/* Widget Name: Button Description: Create a custom button with flexible styling, icon support, and click tracking functionality. Author: SiteOrigin Author URI: https://siteorigin.com Documentation: https://siteorigin.com/widgets-bundle/button-widget-documentation/ Keywords: event, icon, link */ class SiteOrigin_Widget_Button_Widget extends SiteOrigin_Widget { public function __construct() { parent::__construct( 'sow-button', __( 'SiteOrigin Button', 'so-widgets-bundle' ), array( 'description' => __( 'Create a custom button with flexible styling, icon support, and click tracking functionality.', 'so-widgets-bundle' ), 'help' => 'https://siteorigin.com/widgets-bundle/button-widget-documentation/', ), array( ), false, plugin_dir_path( __FILE__ ) ); } public function get_settings_form() { return array( 'responsive_breakpoint' => array( 'type' => 'measurement', 'label' => __( 'Responsive Breakpoint', 'so-widgets-bundle' ), 'default' => '780px', 'description' => __( 'This setting controls when the Mobile Align setting will be used. The default value is 780px.', 'so-widgets-bundle' ), ), ); } public function initialize() { $this->register_frontend_styles( array( array( 'sow-button-base', plugin_dir_url( __FILE__ ) . 'css/style.css', array(), SOW_BUNDLE_VERSION, ), ) ); } public function get_widget_form() { return array( 'text' => array( 'type' => 'text', 'label' => __( 'Button Text', 'so-widgets-bundle' ), ), 'url' => array( 'type' => 'link', 'label' => __( 'Destination URL', 'so-widgets-bundle' ), 'allow_shortcode' => true, ), 'new_window' => array( 'type' => 'checkbox', 'default' => false, 'label' => __( 'Open in a new window', 'so-widgets-bundle' ), ), 'download' => array( 'type' => 'checkbox', 'default' => false, 'label' => __( 'Download', 'so-widgets-bundle' ), 'description' => __( 'The Destination URL will be downloaded when a user clicks on the button.', 'so-widgets-bundle' ), ), 'button_icon' => array( 'type' => 'section', 'label' => __( 'Icon', 'so-widgets-bundle' ), 'fields' => array( 'icon_selected' => array( 'type' => 'icon', 'label' => __( 'Icon', 'so-widgets-bundle' ), ), 'icon_color' => array( 'type' => 'color', 'label' => __( 'Icon Color', 'so-widgets-bundle' ), ), 'icon' => array( 'type' => 'media', 'label' => __( 'Image Icon', 'so-widgets-bundle' ), 'description' => __( 'Replaces the icon with your own image icon.', 'so-widgets-bundle' ), ), 'icon_placement' => array( 'type' => 'select', 'label' => __( 'Icon Placement', 'so-widgets-bundle' ), 'default' => 'left', 'options' => array( 'top' => __( 'Top', 'so-widgets-bundle' ), 'right' => __( 'Right', 'so-widgets-bundle' ), 'bottom' => __( 'Bottom', 'so-widgets-bundle' ), 'left' => __( 'Left', 'so-widgets-bundle' ), ), ), ), ), 'design' => array( 'type' => 'section', 'label' => __( 'Design and Layout', 'so-widgets-bundle' ), 'hide' => true, 'fields' => array( 'width' => array( 'type' => 'measurement', 'label' => __( 'Width', 'so-widgets-bundle' ), 'description' => __( 'Leave blank to let the button resize according to content.', 'so-widgets-bundle' ), ), 'align' => array( 'type' => 'select', 'label' => __( 'Align', 'so-widgets-bundle' ), 'default' => 'center', 'options' => array( 'left' => __( 'Left', 'so-widgets-bundle' ), 'right' => __( 'Right', 'so-widgets-bundle' ), 'center' => __( 'Center', 'so-widgets-bundle' ), 'justify' => __( 'Full Width', 'so-widgets-bundle' ), ), ), 'mobile_align' => array( 'type' => 'select', 'label' => __( 'Mobile Align', 'so-widgets-bundle' ), 'default' => 'center', 'options' => array( 'left' => __( 'Left', 'so-widgets-bundle' ), 'right' => __( 'Right', 'so-widgets-bundle' ), 'center' => __( 'Center', 'so-widgets-bundle' ), 'justify' => __( 'Full Width', 'so-widgets-bundle' ), ), ), 'theme' => array( 'type' => 'select', 'label' => __( 'Button Theme', 'so-widgets-bundle' ), 'default' => 'flat', 'options' => array( 'atom' => __( 'Atom', 'so-widgets-bundle' ), 'flat' => __( 'Flat', 'so-widgets-bundle' ), 'wire' => __( 'Wire', 'so-widgets-bundle' ), ), ), 'button_color' => array( 'type' => 'color', 'label' => __( 'Button Color', 'so-widgets-bundle' ), ), 'text_color' => array( 'type' => 'color', 'label' => __( 'Text Color', 'so-widgets-bundle' ), ), 'hover' => array( 'type' => 'checkbox', 'default' => true, 'label' => __( 'Use hover effects', 'so-widgets-bundle' ), 'state_emitter' => array( 'callback' => 'conditional', 'args' => array( 'hover[show]: val', 'hover[hide]: ! val', ), ), ), 'hover_background_color' => array( 'type' => 'color', 'label' => __( 'Hover Background Color', 'so-widgets-bundle' ), 'state_handler' => array( 'hover[show]' => array( 'show' ), 'hover[hide]' => array( 'hide' ), ), ), 'hover_text_color' => array( 'type' => 'color', 'label' => __( 'Hover Text Color', 'so-widgets-bundle' ), 'state_handler' => array( 'hover[show]' => array( 'show' ), 'hover[hide]' => array( 'hide' ), ), ), 'font' => array( 'type' => 'font', 'label' => __( 'Font', 'so-widgets-bundle' ), 'default' => 'default', ), 'font_size' => array( 'type' => 'measurement', 'label' => __( 'Font Size', 'so-widgets-bundle' ), 'default' => '1em', ), 'icon_size' => array( 'type' => 'measurement', 'label' => __( 'Icon Size', 'so-widgets-bundle' ), 'default' => '1.3em', ), 'padding' => array( 'type' => 'measurement', 'label' => __( 'Padding', 'so-widgets-bundle' ), 'default' => '1em', ), 'rounding' => array( 'type' => 'multi-measurement', 'label' => __( 'Rounding', 'so-widgets-bundle' ), 'default' => '0.25em 0.25em 0.25em 0.25em', 'measurements' => array( 'top' => array( 'label' => __( 'Top', 'so-widgets-bundle' ), ), 'right' => array( 'label' => __( 'Right', 'so-widgets-bundle' ), ), 'bottom' => array( 'label' => __( 'Bottom', 'so-widgets-bundle' ), ), 'left' => array( 'label' => __( 'Left', 'so-widgets-bundle' ), ), ), ), ), ), 'attributes' => array( 'type' => 'section', 'label' => __( 'Other Attributes and SEO', 'so-widgets-bundle' ), 'hide' => true, 'fields' => array( 'id' => array( 'type' => 'text', 'label' => __( 'Button ID', 'so-widgets-bundle' ), 'description' => __( 'An ID attribute allows you to target this button in JavaScript.', 'so-widgets-bundle' ), ), 'classes' => array( 'type' => 'text', 'label' => __( 'Button Classes', 'so-widgets-bundle' ), 'description' => __( 'Additional CSS classes added to the button link.', 'so-widgets-bundle' ), ), 'title' => array( 'type' => 'text', 'label' => __( 'Title Attribute', 'so-widgets-bundle' ), 'description' => __( 'Adds a title attribute to the button link.', 'so-widgets-bundle' ), ), 'on_click' => array( 'type' => 'text', 'label' => __( 'Onclick', 'so-widgets-bundle' ), 'description' => __( 'Run this JavaScript when the button is clicked. Ideal for tracking.', 'so-widgets-bundle' ), 'onclick' => true, ), 'rel' => array( 'type' => 'text', 'label' => __( 'Rel Attribute', 'so-widgets-bundle' ), 'description' => __( 'Adds a rel attribute to the button link.', 'so-widgets-bundle' ), ), ), ), ); } public function get_style_name( $instance ) { if ( empty( $instance['design']['theme'] ) ) { return 'atom'; } return $instance['design']['theme']; } /** * Get the variables for the Button Widget. * * @return array */ public function get_template_variables( $instance, $args ) { $button_attributes = array(); $attributes = $instance['attributes']; $classes = ! empty( $attributes['classes'] ) ? $attributes['classes'] : ''; if ( ! empty( $classes ) ) { $classes .= ' '; } $classes .= 'sowb-button ow-icon-placement-' . $instance['button_icon']['icon_placement']; if ( ! empty( $instance['design']['hover'] ) ) { $classes .= ' ow-button-hover'; } $button_attributes['class'] = implode( ' ', array_map( 'sanitize_html_class', explode( ' ', $classes ) ) ); if ( ! empty( $instance['new_window'] ) ) { $button_attributes['target'] = '_blank'; $button_attributes['rel'] = 'noopener noreferrer'; } if ( ! empty( $instance['download'] ) ) { $button_attributes['download'] = null; } if ( ! empty( $attributes['id'] ) ) { $button_attributes['id'] = $attributes['id']; } if ( ! empty( $attributes['title'] ) ) { $button_attributes['title'] = $attributes['title']; } if ( ! empty( $attributes['rel'] ) ) { if ( isset( $button_attributes['rel'] ) ) { $button_attributes['rel'] .= " $attributes[rel]"; } else { $button_attributes['rel'] = $attributes['rel']; } } $icon_image_url = ''; if ( ! empty( $instance['button_icon']['icon'] ) ) { $attachment = wp_get_attachment_image_src( $instance['button_icon']['icon'] ); if ( ! empty( $attachment ) ) { $icon_image_url = $attachment[0]; } } return array( 'button_attributes' => apply_filters( 'siteorigin_widgets_button_attributes', $button_attributes, $instance ), 'href' => ! empty( $instance['url'] ) ? $instance['url'] : '', 'on_click' => ! empty( $attributes['on_click'] ) ? $attributes['on_click'] : '', 'align' => $instance['design']['align'], 'icon_image_url' => $icon_image_url, 'icon' => $instance['button_icon']['icon_selected'], 'icon_color' => $instance['button_icon']['icon_color'], 'text' => $instance['text'], ); } /** * Get the variables that we'll be injecting into the less stylesheet. * * @return array */ public function get_less_variables( $instance ) { if ( empty( $instance ) || empty( $instance['design'] ) ) { return array(); } $text_color = isset( $instance['design']['text_color'] ) ? $instance['design']['text_color'] : ''; $button_color = isset( $instance['design']['button_color'] ) ? $instance['design']['button_color'] : ''; $less_vars = array( 'button_width' => isset( $instance['design']['width'] ) ? $instance['design']['width'] : '', 'button_color' => $button_color, 'text_color' => $text_color, 'icon_size' => ! empty( $instance['design']['icon_size'] ) ? $instance['design']['icon_size'] : '1.3em', 'hover_text_color' => ! empty( $instance['design']['hover_text_color'] ) ? $instance['design']['hover_text_color'] : $text_color, 'hover_background_color' => ! empty( $instance['design']['hover_background_color'] ) ? $instance['design']['hover_background_color'] : $button_color, 'font_size' => isset( $instance['design']['font_size'] ) ? $instance['design']['font_size'] : '', 'rounding' => isset( $instance['design']['rounding'] ) ? $instance['design']['rounding'] : '', 'padding' => isset( $instance['design']['padding'] ) ? $instance['design']['padding'] : '', 'has_text' => empty( $instance['text'] ) ? 'false' : 'true', 'responsive_breakpoint' => $this->get_global_settings( 'responsive_breakpoint' ), 'align' => ! empty( $instance['design']['align'] ) ? $instance['design']['align'] : 'center', 'mobile_align' => ! empty( $instance['design']['mobile_align'] ) ? $instance['design']['mobile_align'] : 'center', 'has_button_icon' => empty( $instance['button_icon']['icon_selected'] ) ? 'false' : 'true', ); if ( ! empty( $instance['design']['font'] ) ) { $font = siteorigin_widget_get_font( $instance['design']['font'] ); $less_vars['button_font'] = $font['family']; if ( ! empty( $font['weight'] ) ) { $less_vars['button_font_weight'] = $font['weight_raw']; $less_vars['button_font_style'] = $font['style']; } } return $less_vars; } /** * Make sure the instance is the most up to date version. * * @return mixed */ public function modify_instance( $instance ) { if ( empty( $instance ) ) { return array(); } $migrate_props = array( 'button_icon' => array( 'icon_selected', 'icon_color', 'icon', ), 'design' => array( 'align', 'theme', 'button_color', 'text_color', 'hover', 'hover_text_color', 'hover_background_color', 'font_size', 'rounding', 'padding', ), 'attributes' => array( 'id', ), ); foreach ( $migrate_props as $prop => $sub_props ) { if ( empty( $instance[ $prop ] ) ) { $instance[ $prop ] = array(); foreach ( $sub_props as $sub_prop ) { if ( isset( $instance[ $sub_prop ] ) ) { $instance[ $prop ][ $sub_prop ] = $instance[ $sub_prop ]; unset( $instance[ $sub_prop ] ); } } } } // Migrate onclick setting to prevent Wordfence flag. if ( ! empty( $instance['attributes'] ) && ! empty( $instance['attributes']['onclick'] ) ) { $instance['attributes']['on_click'] = $instance['attributes']['onclick']; } // If the mobile_align setting isn't set, set it to the same value as the align value. if ( ! empty( $instance['design'] ) && ! empty( $instance['design']['align'] ) && empty( $instance['design']['mobile_align'] ) ) { $instance['design']['mobile_align'] = $instance['design']['align']; } // Migrate predefined settings to more customizable settings. if ( ! empty( $instance['design']['font_size'] ) && is_numeric( $instance['design']['font_size'] ) ) { $instance['design']['font_size'] .= 'em'; } if ( ! empty( $instance['design']['padding'] ) && is_numeric( $instance['design']['padding'] ) ) { $instance['design']['padding'] .= 'em'; } if ( ! empty( $instance['design']['rounding'] ) && is_numeric( $instance['design']['rounding'] ) ) { $instance['design']['rounding'] = $instance['design']['rounding'] . 'em ' . $instance['design']['rounding'] . 'em ' . $instance['design']['rounding'] . 'em ' . $instance['design']['rounding'] . 'em'; } if ( empty( $instance['design']['icon_size'] ) ) { $instance['design']['icon_size'] = '1.3em'; } return $instance; } public function get_form_teaser() { if ( class_exists( 'SiteOrigin_Premium' ) ) { return false; } return array( sprintf( __( 'Add a beautiful tooltip to the Button Widget with %sSiteOrigin Premium%s', 'so-widgets-bundle' ), '', '' ), ); } } siteorigin_widget_register( 'sow-button', __FILE__, 'SiteOrigin_Widget_Button_Widget' );{"id":21981,"date":"2026-05-14T18:03:32","date_gmt":"2026-05-14T18:03:32","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=21981"},"modified":"2026-05-14T18:03:33","modified_gmt":"2026-05-14T18:03:33","slug":"andere-gangbar-casinos-unter-einsatz-von-teutone-lizenz-vorteil-der-bonusangebot-damit-wachsamkeit-hinter-erwerben","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/andere-gangbar-casinos-unter-einsatz-von-teutone-lizenz-vorteil-der-bonusangebot-damit-wachsamkeit-hinter-erwerben\/","title":{"rendered":"Andere Gangbar Casinos unter einsatz von teutone Lizenz vorteil der Bonusangebot, damit Wachsamkeit hinter erwerben"},"content":{"rendered":"

Hohe Bonusbetrage & mesurer Bedingungen fordern jedem, neue Nutzer nach obsiegen. Es bedeutet fur deutsche Spieler zahlreiche inhaltsstarke Bonusangebote, sobald welche neue Spielsalon Seiten ausprobieren.<\/p>\n

Ich hatte je euch selbige neuesten Bonusangebote mit diesseitigen besten Bedingungen zusammengestellt. Ersteinzahlungsboni unter zuhilfenahme von Freispielen sind der lange nach oben schon etwas gelistet. Weitere aktuelle Promos unter anderem Startguthaben erreicht ein in meiner Seite uber neue Spielcasino Vermittlungsgebuhr Angebote 2026.<\/p>\n

Untergeordnet etliche etablierte Online Casinos werden in der Liste tragen, hier diese ihre Boni vorhin uberarbeitet innehaben. Wahrscheinlich ist und bleibt das passendes Willkommenspaket je euch intensiv.<\/p>\n

Mehr unverbrauchtheit Angebote und kreative Promotionen<\/h2>\n

Der weiterer Verschutt gegangen, um 2026 inoffizieller mitarbeiter Moglich Spielsaal euren Schwarmerei weiters mogliche Gewinne hinten erhohen, ist, aufwarts den neuesten Provision Aktionen oder geeigneten Promotionen Ausschau nach schleppen. Zu tun haben Cashback Vermittlungsprovision Angebote, Einzahlungsboni fur jedes bestimmte Zahlungsdienstleister, Freispiele, Turniere, VIP- ferner Treueprogramme, hinein denen ihr diskret mehr Belohnungen freispielt. Nachfolgende Angebote gewinn andere Gangbar Casinos, damit Neukunden nach fur sich entscheiden ferner gegebene Zocker hinter belohnen. Schaut euch selbige Angebote verschiedener neuer Casinos aktiv, damit dies richtige fur euch dahinter finden.<\/p>\n

Bitte beachtet selbige Bonusbedingungen! Seid ein andere Zocker, danach empfehle selbst euch, eher nette Boni uber leichten Umsatzanforderungen ferner nicht nachdem spinarium casino<\/a> knapper zeitlichen Limitierung hinein dersten Einzahlung anzunehmen. Seid das gegen schon erfahrener, konnt der ich vorstellen, ob ihr den geforderten Inanspruchnahme hinein ein gegebenen Zeitform aufbringen konnt, um angewandten Maklercourtage fur jedes die Auszahlung hinter weiterbilden.<\/p>\n

Beachtet bitte sekundar, sic dies Bedingungen je Gewinne alle Freispielen existiert. Falls das noch mehr ubers Sache routiniert und weitere lohnenswerte Boni inoffizieller mitarbeiter Vergleich hatten wollt, dock diesseitigen Ansicht aufwarts die Flugel dahinter attraktiven Spielsalon Maklercourtage Angeboten. Schaut immerhin im vorfeld eurer Ausschuttung unter, in wie weit der unser Konditionen des Willkommensbonus Pakets erfullt habt.<\/p>\n

Unser forderfahigen Spielcasino Programs weiters Android Spiele<\/h2>\n

Das Quotient der mobilen Benutzer cap inoffizieller mitarbeiter Jahr 2023 global nachfolgende 85% Marke entdeckt. Das konnt folglich feststehen, so sehr alle besondere Angeschlossen Casino 2026 gunstgewerblerin enorme Auslese aktiv mobilen Spielen je Cellphone und Pad qua Menschenahnlicher roboter ferner ios devices Operating system vereint. Besonders selbige Reihe das Slots wird heute aufwarts Mobilgeraten riesig.<\/p>\n

Dasjenige Real time Spielsaal konnt ihr wie Gamer bei Bundesrepublik deutschland gegen nicht visitieren. Bei keramiken seht ihr viele meiner absoluten Favoriten unter den jungeren Casinos, sowie eres damit das Musizieren qua der mobiles Endgerat geht. Weitere neue Funkfernsprecher Casinos erreicht ein auf der Sonderseite hinten dem Problemstellung.<\/p>\n

Inside angewandten Droid Casinos konnt das nicht jedoch auf dem weg zu im Omnibus oder ihr Bahn vortragen, der konnt selbst unter einsatz von eurem Gurke echtes Penunze einzahlen weiters von herumtollen mobilen Vermittlungsprovision Leistungen gewinnen. Achtet fur jedes ihr gelunges Durchlauf durch auf achse darauf, auf diese weise eure Verbindung mit dem internet zah wird. Solltet ein unser Anbindung verschusseln, unterdessen das spielt, sei euer Geld wohl nicht einheitlich verschutt gegangen. Online marketing Fall wird dies Durchlauf nach Ziel gespielt oder sei nachher pausiert bis der zum wiederholten mal im Netzwerk seid.<\/p>\n

Neue Trends & Sankt-nimmerleins-tag<\/h2>\n

Technologie entwickelt umherwandern fix langs ferner macht immer wieder innovative Trends heraus, selbige ebendiese Zukunft formen. Ihr gerade aufstrebender Tendenz war nachfolgende vr (VR). Ebendiese Technique gibt dies Besucher, mit Virtuelle realitat-Brillen bei virtuelle Welten einzutauchen oder gunstgewerblerin immersive Praxis dahinter herstellen. Beispielsweise fahig sein Benutzer dematerialisee E-Rugby Turniere erfahrung, wie waren sie meine wenigkeit Bestandteil des Geschehens.<\/p>\n

Ihr weiterer aufregender Trend, das diese Futur bilden konnte, war unser Metaverse. Welches Metaverse sei ihr Konzeption, bei dem physische unter anderem virtuelle realitat sich verschmelzen. Dieses Design konnte auch nachfolgende Art & Fasson neu gestalten, wie gleichfalls innovative Erreichbar Casinos funktionieren. Andere Spielsaal Kehrseiten konnten gegenseitig im Metaverse aufbauen oder einen Spielern der einzigartiges Erfahrung prasentation, bei dem welche as part of der virtuellen Spielbank Blauer planet musizieren im griff haben.<\/p>\n

Sekundar selbige Kryptowahrungen durften in kurze ausnahmslos noch mehr in betrieb Stellenwert fur sich entscheiden. Krypto loath bereits hinein zahlreichen Markt Kasemauke cool und auch inoffizieller mitarbeiter Verbunden Wette ist parece aufwarts einem Vormarsch. Diverse andere Online Casinos zu eigen machen schon etwas Kryptowahrungen als Geld oder zuteil werden lassen sera den Spielern, unter einsatz von Bitcoin & folgenden digitalen Wahrungen nachdem zum besten geben. Sera ermoglicht etliche Anonymitat weiters Zuversichtlichkeit z. hd. selbige Zocker.<\/p>\n","protected":false},"excerpt":{"rendered":"

Hohe Bonusbetrage & mesurer Bedingungen fordern jedem, neue Nutzer nach obsiegen. Es bedeutet fur deutsche Spieler zahlreiche inhaltsstarke Bonusangebote, sobald welche neue Spielsalon Seiten ausprobieren. Ich hatte je euch selbige neuesten Bonusangebote mit diesseitigen besten Bedingungen zusammengestellt. Ersteinzahlungsboni unter zuhilfenahme von Freispielen sind der lange nach oben schon etwas gelistet.\u2026<\/p>\n

Continue reading<\/span><\/i><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-21981","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/21981","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/comments?post=21981"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/21981\/revisions"}],"predecessor-version":[{"id":21982,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/21981\/revisions\/21982"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=21981"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=21981"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=21981"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}