Plugin Directory

Changeset 3229095


Ignore:
Timestamp:
01/27/2025 05:32:14 AM (14 months ago)
Author:
intoxstudio
Message:

version 3.21.1

Location:
content-aware-sidebars/trunk
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • content-aware-sidebars/trunk/app.php

    r3203370 r3229095  
    1212{
    1313    const PLUGIN_VERSION_KEY = 'cas_db_version';
    14     const PLUGIN_VERSION = '3.21';
     14    const PLUGIN_VERSION = '3.21.1';
    1515
    1616    /**
  • content-aware-sidebars/trunk/content-aware-sidebars.php

    r3203370 r3229095  
    99 * Plugin URI:        https://dev.institute/wordpress-sidebars/
    1010 * Description:       Unlimited custom sidebars and widget areas for any post, page, category etc.
    11  * Version:           3.21
     11 * Version:           3.21.1
    1212 * Author:            DEV Institute
    1313 * Author URI:        https://dev.institute
  • content-aware-sidebars/trunk/lib/freemius/assets/css/admin/common.css

    r3203370 r3229095  
    1 .fs-badge{background:#71ae00;border-radius:3px 0 0 3px;border-right:0;box-shadow:0 2px 1px -1px rgba(0,0,0,.3);color:#fff;font-weight:700;padding:5px 10px;position:absolute;right:0;text-transform:uppercase;top:10px}.theme-browser .theme .fs-premium-theme-badge-container{position:absolute;right:0;top:0}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge{margin-top:10px;position:relative;text-align:center;top:0}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge.fs-premium-theme-badge{font-size:1.1em}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge.fs-beta-theme-badge{background:#00a0d2}.fs-switch{background:#ececec;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);box-shadow:0 0 4px rgba(0,0,0,.1),inset 0 1px 3px 0 rgba(0,0,0,.1);color:#ccc;cursor:pointer;display:inline-block;height:18px;padding:6px 6px 5px;position:relative;text-shadow:0 1px 1px hsla(0,0%,100%,.8)}.fs-switch span{display:inline-block;text-transform:uppercase;width:35px}.fs-switch .fs-toggle{background-color:#fff;background-image:linear-gradient(180deg,#ececec,#fff);border:1px solid rgba(0,0,0,.3);border-radius:4px;box-shadow:inset 0 1px 0 0 hsla(0,0%,100%,.5);height:25px;position:absolute;top:1px;transition:.4s cubic-bezier(.54,1.6,.5,1);width:37px;z-index:999}.fs-switch.fs-off .fs-toggle{left:2%}.fs-switch.fs-on .fs-toggle{left:54%}.fs-switch.fs-round{border-radius:24px;padding:4px 25px;top:8px}.fs-switch.fs-round .fs-toggle{border-radius:24px;height:24px;top:0;width:24px}.fs-switch.fs-round.fs-off .fs-toggle{left:-1px}.fs-switch.fs-round.fs-on{background:#0085ba}.fs-switch.fs-round.fs-on .fs-toggle{left:25px}.fs-switch.fs-small.fs-round{padding:1px 19px}.fs-switch.fs-small.fs-round .fs-toggle{border-radius:18px;height:18px;top:0;width:18px}.fs-switch.fs-small.fs-round.fs-on .fs-toggle{left:19px}body.fs-loading,body.fs-loading *{cursor:wait!important}#fs_frame{font-size:0;line-height:0}.fs-full-size-wrapper{margin:40px 0 -65px -20px}@media(max-width:600px){.fs-full-size-wrapper{margin:0 0 -65px -10px}}.fs-notice{position:relative}.fs-notice.fs-has-title{margin-bottom:30px!important}.fs-notice.success{color:green}.fs-notice.promotion{background-color:#f2fcff!important;border-color:#00a0d2!important}.fs-notice .fs-notice-body{margin:.5em 0;padding:2px}.fs-notice .fs-close{color:#aaa;cursor:pointer;float:right}.fs-notice .fs-close:hover{color:#666}.fs-notice .fs-close>*{display:inline-block;margin-top:7px}.fs-notice label.fs-plugin-title{background:rgba(0,0,0,.3);border-radius:0 0 3px 3px;bottom:auto;color:#fff;cursor:auto;font-size:12px;font-weight:700;left:10px;padding:2px 10px;position:absolute;right:auto;top:100%}div.fs-notice.promotion,div.fs-notice.success,div.fs-notice.updated{display:block!important}#fs_connect .fs-error .fs-api-request-error-details,#fs_connect .fs-error .fs-api-request-error-show-details-link,#fs_connect .fs-error ol,.fs-modal .notice-error .fs-api-request-error-details,.fs-modal .notice-error .fs-api-request-error-show-details-link,.fs-modal .notice-error ol,.fs-notice.error .fs-api-request-error-details,.fs-notice.error .fs-api-request-error-show-details-link,.fs-notice.error ol{text-align:left}#fs_connect .fs-error ol,.fs-modal .notice-error ol,.fs-notice.error ol{list-style-type:disc}#fs_connect .fs-error .fs-api-request-error-show-details-link,.fs-modal .notice-error .fs-api-request-error-show-details-link,.fs-notice.error .fs-api-request-error-show-details-link{box-shadow:none;color:#2271b1;text-decoration:none}#fs_connect .fs-error .fs-api-request-error-details,.fs-modal .notice-error .fs-api-request-error-details,.fs-notice.error .fs-api-request-error-details{border:1px solid #ccc;max-height:150px;overflow:auto;padding:5px}.rtl .fs-notice .fs-close{float:left}.fs-secure-notice{background:#ebfdeb;box-shadow:0 2px 2px rgba(6,113,6,.3);color:green;left:160px;opacity:.95;padding:10px 20px;position:fixed;right:0;top:32px;z-index:9989}.fs-secure-notice:hover{opacity:1}.fs-secure-notice a.fs-security-proof{color:green;text-decoration:none}@media screen and (max-width:960px){.fs-secure-notice{left:36px}}@media screen and (max-width:600px){.fs-secure-notice{display:none}}@media screen and (max-width:1250px){#fs_promo_tab{display:none}}@media screen and (max-width:782px){.fs-secure-notice{left:0;text-align:center;top:46px}}span.fs-submenu-item.fs-sub:before{content:"↳";padding:0 5px}.rtl span.fs-submenu-item.fs-sub:before{content:"↲"}.fs-submenu-item.pricing.upgrade-mode{color:#adff2f}.fs-submenu-item.pricing.trial-mode{color:#83e2ff}#adminmenu .update-plugins.fs-trial{background-color:#00b9eb}.fs-ajax-spinner{background:url(/wp-admin/images/wpspin_light-2x.gif);background-size:contain;border:0;display:inline-block;height:20px;margin-bottom:-2px;margin-right:5px;vertical-align:sub;width:20px}.wrap.fs-section h2{text-align:left}.plugins p.fs-upgrade-notice{background-color:#d54e21;border:0;color:#f9f9f9;margin-top:10px;padding:10px}
     1.fs-badge{background:#71ae00;border-radius:3px 0 0 3px;border-right:0;box-shadow:0 2px 1px -1px rgba(0,0,0,.3);color:#fff;font-weight:700;padding:5px 10px;position:absolute;right:0;text-transform:uppercase;top:10px}.theme-browser .theme .fs-premium-theme-badge-container{position:absolute;right:0;top:0}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge{margin-top:10px;position:relative;text-align:center;top:0}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge.fs-premium-theme-badge{font-size:1.1em}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge.fs-beta-theme-badge{background:#00a0d2}.fs-switch{background:#ececec;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);box-shadow:0 0 4px rgba(0,0,0,.1),inset 0 1px 3px 0 rgba(0,0,0,.1);color:#ccc;cursor:pointer;display:inline-block;height:18px;padding:6px 6px 5px;position:relative;text-shadow:0 1px 1px hsla(0,0%,100%,.8)}.fs-switch span{display:inline-block;text-transform:uppercase;width:35px}.fs-switch .fs-toggle{background-color:#fff;background-image:linear-gradient(180deg,#ececec,#fff);border:1px solid rgba(0,0,0,.3);border-radius:4px;box-shadow:inset 0 1px 0 0 hsla(0,0%,100%,.5);height:25px;position:absolute;top:1px;transition:.4s cubic-bezier(.54,1.6,.5,1);width:37px;z-index:999}.fs-switch.fs-off .fs-toggle{left:2%}.fs-switch.fs-on .fs-toggle{left:54%}.fs-switch.fs-round{border-radius:24px;padding:4px 25px;top:8px}.fs-switch.fs-round .fs-toggle{border-radius:24px;height:24px;top:0;width:24px}.fs-switch.fs-round.fs-off .fs-toggle{left:-1px}.fs-switch.fs-round.fs-on{background:#0085ba}.fs-switch.fs-round.fs-on .fs-toggle{left:25px}.fs-switch.fs-small.fs-round{padding:1px 19px}.fs-switch.fs-small.fs-round .fs-toggle{border-radius:18px;height:18px;top:0;width:18px}.fs-switch.fs-small.fs-round.fs-on .fs-toggle{left:19px}body.fs-loading,body.fs-loading *{cursor:wait!important}#fs_frame{font-size:0;line-height:0}.fs-full-size-wrapper{margin:40px 0 -65px -20px}@media(max-width:600px){.fs-full-size-wrapper{margin:0 0 -65px -10px}}.fs-notice{position:relative}.fs-notice.fs-has-title{margin-bottom:30px!important}.fs-notice.success{color:green}.fs-notice.promotion{background-color:#f2fcff!important;border-color:#00a0d2!important}.fs-notice .fs-notice-body{margin:.5em 0;padding:2px}.fs-notice .fs-notice-body .fs-trial-message-container{align-items:center;display:flex;flex-wrap:wrap;gap:5px}.fs-notice .fs-close{color:#aaa;cursor:pointer;float:right}.fs-notice .fs-close:hover{color:#666}.fs-notice .fs-close>*{display:inline-block;margin-top:7px}.fs-notice label.fs-plugin-title{background:rgba(0,0,0,.3);border-radius:0 0 3px 3px;bottom:auto;color:#fff;cursor:auto;font-size:12px;font-weight:700;left:10px;padding:2px 10px;position:absolute;right:auto;top:100%}div.fs-notice.promotion,div.fs-notice.success,div.fs-notice.updated{display:block!important}#fs_connect .fs-error .fs-api-request-error-details,#fs_connect .fs-error .fs-api-request-error-show-details-link,#fs_connect .fs-error ol,.fs-modal .notice-error .fs-api-request-error-details,.fs-modal .notice-error .fs-api-request-error-show-details-link,.fs-modal .notice-error ol,.fs-notice.error .fs-api-request-error-details,.fs-notice.error .fs-api-request-error-show-details-link,.fs-notice.error ol{text-align:left}#fs_connect .fs-error ol,.fs-modal .notice-error ol,.fs-notice.error ol{list-style-type:disc}#fs_connect .fs-error .fs-api-request-error-show-details-link,.fs-modal .notice-error .fs-api-request-error-show-details-link,.fs-notice.error .fs-api-request-error-show-details-link{box-shadow:none;color:#2271b1;text-decoration:none}#fs_connect .fs-error .fs-api-request-error-details,.fs-modal .notice-error .fs-api-request-error-details,.fs-notice.error .fs-api-request-error-details{border:1px solid #ccc;max-height:150px;overflow:auto;padding:5px}.rtl .fs-notice .fs-close{float:left}.fs-secure-notice{background:#ebfdeb;box-shadow:0 2px 2px rgba(6,113,6,.3);color:green;left:160px;opacity:.95;padding:10px 20px;position:fixed;right:0;top:32px;z-index:9989}.fs-secure-notice:hover{opacity:1}.fs-secure-notice a.fs-security-proof{color:green;text-decoration:none}@media screen and (max-width:960px){.fs-secure-notice{left:36px}}@media screen and (max-width:600px){.fs-secure-notice{display:none}}@media screen and (max-width:1250px){#fs_promo_tab{display:none}}@media screen and (max-width:782px){.fs-secure-notice{left:0;text-align:center;top:46px}}span.fs-submenu-item.fs-sub:before{content:"↳";padding:0 5px}.rtl span.fs-submenu-item.fs-sub:before{content:"↲"}.fs-submenu-item.pricing.upgrade-mode{color:#adff2f}.fs-submenu-item.pricing.trial-mode{color:#83e2ff}#adminmenu .update-plugins.fs-trial{background-color:#00b9eb}.fs-ajax-spinner{background:url(/wp-admin/images/wpspin_light-2x.gif);background-size:contain;border:0;display:inline-block;height:20px;margin-bottom:-2px;margin-right:5px;vertical-align:sub;width:20px}.wrap.fs-section h2{text-align:left}.plugins p.fs-upgrade-notice{background-color:#d54e21;border:0;color:#f9f9f9;margin-top:10px;padding:10px}
  • content-aware-sidebars/trunk/lib/freemius/includes/class-freemius.php

    r3203370 r3229095  
    16621662                $this->is_user_in_admin() &&
    16631663                $this->is_parallel_activation() &&
    1664                 $this->_premium_plugin_basename !== $this->premium_plugin_basename_from_parallel_activation
     1664                $this->_premium_plugin_basename !== $this->_premium_plugin_basename_from_parallel_activation
    16651665            ) {
    1666                 $this->_premium_plugin_basename = $this->premium_plugin_basename_from_parallel_activation;
     1666                $this->_premium_plugin_basename = $this->_premium_plugin_basename_from_parallel_activation;
    16671667
    16681668                register_activation_hook(
     
    16821682         */
    16831683        private function is_parallel_activation() {
    1684             return ! empty( $this->premium_plugin_basename_from_parallel_activation );
     1684            return ! empty( $this->_premium_plugin_basename_from_parallel_activation );
    16851685        }
    16861686
     
    52065206                }
    52075207
    5208                 $this->premium_plugin_basename_from_parallel_activation = $premium_basename;
     5208                $this->_premium_plugin_basename_from_parallel_activation = $premium_basename;
    52095209
    52105210                if ( is_plugin_active( $premium_basename ) ) {
     
    2400124001            // Start trial button.
    2400224002            $button = ' ' . sprintf(
    24003                     '<a style="margin-left: 10px; vertical-align: super;" href="%s"><button class="button button-primary">%s &nbsp;&#10140;</button></a>',
     24003                    '<div><a class="button button-primary" href="%s">%s &nbsp;&#10140;</a></div>',
    2400424004                    $trial_url,
    2400524005                    $this->get_text_x_inline( 'Start free trial', 'call to action', 'start-free-trial' )
    2400624006                );
    2400724007
     24008            $message_text = $this->apply_filters( 'trial_promotion_message', "{$message} {$cc_string}" );
     24009
    2400824010            $this->_admin_notices->add_sticky(
    24009                 $this->apply_filters( 'trial_promotion_message', "{$message} {$cc_string} {$button}" ),
     24011                "<div class=\"fs-trial-message-container\"><div>{$message_text}</div> {$button}</div>",
    2401024012                'trial_promotion',
    2401124013                '',
     
    2547725479
    2547825480                // Locate the main assets folder.
    25479                 if ( 1 < count( $fs_active_plugins->plugins ) ) {
     25481                if ( ! empty( $fs_active_plugins->plugins ) ) {
    2548025482                    $plugin_or_theme_img_dir = ( $this->is_plugin() ? WP_PLUGIN_DIR : get_theme_root( get_stylesheet() ) );
    2548125483
  • content-aware-sidebars/trunk/lib/freemius/includes/class-fs-plugin-updater.php

    r3203370 r3229095  
    543543            global $wp_current_filter;
    544544
    545             $current_plugin_version = $this->_fs->get_plugin_version();
    546 
    547             if ( ! empty( $wp_current_filter ) && 'upgrader_process_complete' === $wp_current_filter[0] ) {
    548                 if (
    549                     is_null( $this->_update_details ) ||
    550                     ( is_object( $this->_update_details ) && $this->_update_details->new_version !== $current_plugin_version )
    551                 ) {
    552                     /**
    553                      * After an update, clear the stored update details and reparse the plugin's main file in order to get
    554                      * the updated version's information and prevent the previous update information from showing up on the
    555                      * updates page.
    556                      *
    557                      * @author Leo Fajardo (@leorw)
    558                      * @since 2.3.1
    559                      */
    560                     $this->_update_details  = null;
    561                     $current_plugin_version = $this->_fs->get_plugin_version( true );
    562                 }
     545            if ( ! empty( $wp_current_filter ) && in_array( 'upgrader_process_complete', $wp_current_filter ) ) {
     546                return $transient_data;
    563547            }
    564548
     
    569553                    fs_request_get_bool( 'force-check' ),
    570554                    FS_Plugin_Updater::UPDATES_CHECK_CACHE_EXPIRATION,
    571                     $current_plugin_version
     555                    $this->_fs->get_plugin_version()
    572556                );
    573557
  • content-aware-sidebars/trunk/lib/freemius/includes/entities/class-fs-plugin-plan.php

    r3203370 r3229095  
    1414     * Class FS_Plugin_Plan
    1515     *
    16      * @property FS_Pricing[] $pricing
    1716     */
    1817    class FS_Plugin_Plan extends FS_Entity {
  • content-aware-sidebars/trunk/lib/freemius/includes/entities/class-fs-site.php

    r3203370 r3229095  
    1111    }
    1212
    13     /**
    14      * @property int $blog_id
    15      */
    16     #[AllowDynamicProperties]
    1713    class FS_Site extends FS_Scope_Entity {
    1814        /**
     
    2016         */
    2117        public $site_id;
     18        /**
     19         * @var int
     20         */
     21        public $blog_id;
    2222        /**
    2323         * @var number
     
    232232            foreach ( $sandbox_wp_environment_domains as $domain) {
    233233                if (
     234                    ( $host === $domain ) ||
    234235                    fs_ends_with( $host, '.' . $domain ) ||
    235236                    fs_ends_with( $host, '-' . $domain )
  • content-aware-sidebars/trunk/lib/freemius/includes/entities/class-fs-user.php

    r2835339 r3229095  
    4949        }
    5050
     51        /**
     52         * This method removes the deprecated 'is_beta' property from the serialized data.
     53         * Should clean up the serialized data to avoid PHP 8.2 warning on next execution.
     54         *
     55         * @return void
     56         */
     57        function __wakeup() {
     58            if ( property_exists( $this, 'is_beta' ) ) {
     59                // If we enter here, and we are running PHP 8.2, we already had the warning. But we sanitize data for next execution.
     60                unset( $this->is_beta );
     61            }
     62        }
     63
    5164        function get_name() {
    5265            return trim( ucfirst( trim( is_string( $this->first ) ? $this->first : '' ) ) . ' ' . ucfirst( trim( is_string( $this->last ) ? $this->last : '' ) ) );
  • content-aware-sidebars/trunk/lib/freemius/includes/managers/class-fs-admin-menu-manager.php

    r2934101 r3229095  
    700700            }
    701701
     702            $menu_slug   = $menu['menu'][2];
    702703            $parent_slug = isset( $menu['parent_slug'] ) ?
    703                 $menu['parent_slug'] :
    704                 'admin.php';
    705 
    706             return admin_url(
    707                 $parent_slug .
    708                 ( false === strpos( $parent_slug, '?' ) ? '?' : '&' ) .
    709                 'page=' .
    710                 $menu['menu'][2]
    711             );
     704                $menu['parent_slug'] :
     705                'admin.php';
     706
     707            if ( fs_apply_filter( $this->_module_unique_affix, 'enable_cpt_advanced_menu_logic', false ) ) {
     708                $parent_slug = 'admin.php';
     709
     710                /**
     711                 * This line and the `if` block below it are based on the `menu_page_url()` function of WordPress.
     712                 *
     713                 * @author Leo Fajardo (@leorw)
     714                 * @since 2.10.2
     715                 */
     716                global $_parent_pages;
     717
     718                if ( ! empty( $_parent_pages[ $menu_slug ] ) ) {
     719                    $_parent_slug = $_parent_pages[ $menu_slug ];
     720                    $parent_slug  = isset( $_parent_pages[ $_parent_slug ] ) ?
     721                        $parent_slug :
     722                        $menu['parent_slug'];
     723                }
     724            }
     725
     726            return admin_url(
     727                $parent_slug .
     728                ( false === strpos( $parent_slug, '?' ) ? '?' : '&' ) .
     729                'page=' .
     730                $menu_slug
     731            );
    712732        }
    713733
  • content-aware-sidebars/trunk/lib/freemius/includes/managers/class-fs-admin-notice-manager.php

    r2835339 r3229095  
    195195         */
    196196        static function _add_sticky_dismiss_javascript() {
     197            $sticky_admin_notice_js_template_name = 'sticky-admin-notice-js.php';
     198
     199            if ( ! file_exists( fs_get_template_path( $sticky_admin_notice_js_template_name ) ) ) {
     200                return;
     201            }
     202
    197203            $params = array();
    198             fs_require_once_template( 'sticky-admin-notice-js.php', $params );
     204            fs_require_once_template( $sticky_admin_notice_js_template_name, $params );
    199205        }
    200206
  • content-aware-sidebars/trunk/lib/freemius/start.php

    r3203370 r3229095  
    1616     * @var string
    1717     */
    18     $this_sdk_version = '2.10.0';
     18    $this_sdk_version = '2.11.0';
    1919
    2020    #region SDK Selection Logic --------------------------------------------------------------------
     
    109109    }
    110110
     111    $theme_name = null;
    111112    if ( $is_current_sdk_from_active_theme ) {
    112         $this_sdk_relative_path = '../' . $themes_directory_name . '/' . get_stylesheet() . '/' . $theme_candidate_sdk_basename;
     113        $theme_name             = get_stylesheet();
     114        $this_sdk_relative_path = '../' . $themes_directory_name . '/' . $theme_name . '/' . $theme_candidate_sdk_basename;
    113115        $is_theme               = true;
    114116    } else if ( $is_current_sdk_from_parent_theme ) {
    115         $this_sdk_relative_path = '../' . $themes_directory_name . '/' . get_template() . '/' . $theme_candidate_sdk_basename;
     117        $theme_name             = get_template();
     118        $this_sdk_relative_path = '../' . $themes_directory_name . '/' . $theme_name . '/' . $theme_candidate_sdk_basename;
    116119        $is_theme               = true;
    117120    } else {
    118121        $this_sdk_relative_path = plugin_basename( $fs_root_path );
    119122        $is_theme               = false;
     123
     124        /**
     125         * If this file was included from another plugin with lower SDK version, and if this plugin is symlinked, then we need to get the actual plugin path,
     126         * as the value right now will be wrong, it will only remove the directory separator from the file_path.
     127         *
     128         * The check of `fs_find_direct_caller_plugin_file` determines that this file was indeed included by a different plugin than the main plugin.
     129         */
     130        if ( DIRECTORY_SEPARATOR . $this_sdk_relative_path === $fs_root_path && function_exists( 'fs_find_direct_caller_plugin_file' ) ) {
     131            $original_plugin_dir_name = dirname( fs_find_direct_caller_plugin_file( $file_path ) );
     132
     133            // Remove everything before the original plugin directory name.
     134            $this_sdk_relative_path = substr( $this_sdk_relative_path, strpos( $this_sdk_relative_path, $original_plugin_dir_name ) );
     135
     136            unset( $original_plugin_dir_name );
     137        }
    120138    }
    121139
     
    203221        if ( $is_theme ) {
    204222            // Saving relative path and not only directory name as it could be a subfolder
    205             $plugin_path = $this_sdk_relative_path;
     223            $plugin_path = $theme_name;
    206224        } else {
    207225            $plugin_path = plugin_basename( fs_find_direct_caller_plugin_file( $file_path ) );
     
    358376    }
    359377
    360     if ( version_compare( $this_sdk_version, $fs_active_plugins->newest->version, '<' ) ) {
     378    if ( isset( $fs_active_plugins->newest ) && version_compare( $this_sdk_version, $fs_active_plugins->newest->version, '<' ) ) {
    361379        $newest_sdk = $fs_active_plugins->plugins[ $fs_active_plugins->newest->sdk_path ];
    362380
  • content-aware-sidebars/trunk/readme.txt

    r3203370 r3229095  
    66Requires PHP: 7.1
    77Tested up to: 6.7
    8 Stable tag: 3.21
     8Stable tag: 3.21.1
    99License: GPLv3
    1010
     
    194194####Highlights
    195195
     196= 3.21.1 =
     197
     198* [new] performance improvements
     199
    196200= 3.21 =
    197201
Note: See TracChangeset for help on using the changeset viewer.