sapconf-5.0.6-150000.7.27.1 >  A d?p9|{]3vQH,h&-r{Ce/G.K 0@UEF1x 7i@cmltm@#զb!'gtՆE:Z_N8|OPA 4` O |>/sex/hj#YtA&!A?S3f~DzQ6N2/ n<. 1M6c\fFLkŘPmIt.Q #Sy594efbd2f017d1167c0f9a7ea8c6dd08e541713ecf01a9477d24891ccc0e2bd64f7de32f2673c985705d007989208928ccd3b4e2)hd?p9|O`PFdg-%踗̙v"|n,h吮j:`ޭ)?0^R/ '( kޒaup6'\-C,W/4)M1QY]O0V=F>1=u &f,HpЩЩjj&E 420ibOf??ff؞gOOP*yPK˽Ʀ(q6焚0kUc=TBXh`+ QrK?ku Ѵ ^ݦ/\`M^>pK?d   O(,48Qr *[/L5l5 5 6 6h 9 ::p:;B;h;;<<=e(=8=*9>d*:@*=>?@FGHpIXY\ ]`^X bEcdhemfplruvwXxyz,$(-04:|Csapconf5.0.6150000.7.27.1Kernel Parameter Initializiation for SAP SystemsThe utility adjusts operating system parameters, such as kernel tuning settings and resource limits, to allow running various SAP solutions at satisfactory performance. Authors: -------- Angela Briel, Howard Guod?sheep65R^SUSE Linux Enterprise 15SUSE LLC LGPL-2.1-or-laterhttps://www.suse.com/Productivity/Otherhttps://www.suse.com/partners/alliance/sap/linuxnoarch if [ -x /usr/bin/systemctl ]; then test -n "$FIRST_ARG" || FIRST_ARG="$1" [ -d /var/lib/systemd/migrated ] || mkdir -p /var/lib/systemd/migrated || : for service in sapconf.service ; do sysv_service=${service%.*} if [ ! -e /usr/lib/systemd/system/$service ] && [ ! -e /etc/init.d/$sysv_service ]; then mkdir -p /run/systemd/rpm/needs-preset touch /run/systemd/rpm/needs-preset/$service elif [ -e /etc/init.d/$sysv_service ] && [ ! -e /var/lib/systemd/migrated/$sysv_service ]; then /usr/sbin/systemd-sysv-convert --save $sysv_service || : mkdir -p /run/systemd/rpm/needs-sysv-convert touch /run/systemd/rpm/needs-sysv-convert/$service fi done fi if [ $1 -eq 1 ]; then # package initial install # check, if old config files from a former installation still exist SC=/etc/sysconfig for f in sapconf sapnote-1557506 sapnote-1680803; do if [ -f "${SC}${f}" ]; then mv "${SC}${f}" "${SC}${f}".rpmold || : fi done else # package update # to prevent sapconf related tuned error messages anytime after this # sapconf package installation switch off tuned to remove the 'active' # sapconf profile # 'tuned-adm off' is sadly the only possibility to remove an 'active' # sapconf profile # # check for active tuned systemctl -q is-active tuned && [[ $(cat /etc/tuned/active_profile 2>/dev/null) == sap-* || $(cat /etc/tuned/active_profile 2>/dev/null) == sapconf ]] && (echo "found active tuned with a sap related profile"; touch /run/sapconf_tuned_removal_started; mkdir -p /run/sapconf; touch /run/sapconf/active; tuned-adm off; > /etc/tuned/active_profile 2>/dev/null) || : # if the tuned profile is a sap related profile, try to switch off tuned # if 'tuned-adm off' before had worked, the profile is empty # if not try again [[ $(cat /etc/tuned/active_profile 2>/dev/null) == sap-* || $(cat /etc/tuned/active_profile 2>/dev/null) == sapconf ]] && (echo "found a sap related tuned profile, try to switch off tuned"; tuned-adm off || systemctl stop tuned.service) || : # check for enabled and/or active sapconf.service sc_active=$(systemctl is-active sapconf.service 2>/dev/null) || : ([[ "$sc_active" == "activating" ]] || [[ "$sc_active" == "deactivating" ]] || [[ "$sc_active" == "active" ]]) && (echo "found active sapconf.service ($sc_active)"; touch /run/sapconf_pre_actss_found) || : systemctl -q is-enabled sapconf.service && (echo "found enabled sapconf.service"; touch /run/sapconf_pre_enblss_found) || : ([ ! -f /run/sapconf_tuned_removal_started ] && ([ -f /usr/lib/tuned/sapconf/script.sh ] || [ -f /usr/lib/tuned/sap-hana/script.sh ])) && touch /run/sapconf_tuned_removal_started || : if ([ -f /etc/sysconfig/sapnote-1557506 ] || ([ -f /etc/sysconfig/sapnote-1680803 ] && [ ! -f /etc/sysconfig/sapnote-bobj ]) || [ -f /usr/lib/tuned/sapconf/script.sh ]); then touch /tmp/sapconf_remove_nofile || : fi /usr/bin/md5sum /etc/sysconfig/sapconf > /tmp/sapconf_sys_md5_pre || : touch /run/sapconf_during_pkg_inst || : fiif [ $1 -eq 1 ]; then # package initial install PNAME=sapconf SUBPNAME= SYSC_TEMPLATE=/usr/share/fillup-templates/sysconfig.$PNAME$SUBPNAME # If template not in new /usr/share/fillup-templates, fallback to old TEMPLATE_DIR if [ ! -f $SYSC_TEMPLATE ] ; then TEMPLATE_DIR=/var/adm/fillup-templates SYSC_TEMPLATE=$TEMPLATE_DIR/sysconfig.$PNAME$SUBPNAME fi SD_NAME="" if [ -x /bin/fillup ] ; then if [ -f $SYSC_TEMPLATE ] ; then echo "Updating /etc/sysconfig/$SD_NAME$PNAME ..." mkdir -p /etc/sysconfig/$SD_NAME touch /etc/sysconfig/$SD_NAME$PNAME /bin/fillup -q /etc/sysconfig/$SD_NAME$PNAME $SYSC_TEMPLATE fi else echo "ERROR: fillup not found. This should not happen. Please compare" echo "/etc/sysconfig/$PNAME and $TEMPLATE_DIR/sysconfig.$PNAME and" echo "update by hand." fi touch /tmp/initial_sapconf_inst || : else # package update hook=$(/usr/lib/sapconf/sc_hooks.sh del) if [ -f /etc/sysconfig/sapnote-1557506 ]; then # covers updates from SLE12 sapconf versions < 4.1.12 echo "covers updates from SLE12 sapconf versions < 4.1.12" mv /etc/sysconfig/sapconf /etc/sysconfig/sapconf.rpmsave || : PNAME=sapconf SUBPNAME= SYSC_TEMPLATE=/usr/share/fillup-templates/sysconfig.$PNAME$SUBPNAME # If template not in new /usr/share/fillup-templates, fallback to old TEMPLATE_DIR if [ ! -f $SYSC_TEMPLATE ] ; then TEMPLATE_DIR=/var/adm/fillup-templates SYSC_TEMPLATE=$TEMPLATE_DIR/sysconfig.$PNAME$SUBPNAME fi SD_NAME="" if [ -x /bin/fillup ] ; then if [ -f $SYSC_TEMPLATE ] ; then echo "Updating /etc/sysconfig/$SD_NAME$PNAME ..." mkdir -p /etc/sysconfig/$SD_NAME touch /etc/sysconfig/$SD_NAME$PNAME /bin/fillup -q /etc/sysconfig/$SD_NAME$PNAME $SYSC_TEMPLATE fi else echo "ERROR: fillup not found. This should not happen. Please compare" echo "/etc/sysconfig/$PNAME and $TEMPLATE_DIR/sysconfig.$PNAME and" echo "update by hand." fi # remove no longer needed 'pagecache' sysconfig file rm -f /etc/sysconfig/sapnote-1557506 && echo "Removing obsolete /etc/sysconfig/sapnote-1557506..." || : # remove no longer needed 'ase' sysconfig file rm -f /etc/sysconfig/sapnote-1680803 && echo "Removing obsolete /etc/sysconfig/sapnote-1680803..." || : elif [ -f /etc/sysconfig/sapnote-1680803 ]; then # covers updates from SLE12 sapconf versions >= 4.1.12 echo "covers updates from SLE12 sapconf versions >= 4.1.12" # remove pagecache section from sapconf sysconfig file # no longer supported in SLE15 sed -i '/## Path: SAP\/Note\/1557506 - Linux paging improvements/,/.*PAGECACHE_LIMIT_IGNORE_DIRTY[[:blank:]]*=.*/d' /etc/sysconfig/sapconf sed -i '/.*PAGECACHE_LIMIT_IGNORE_DIRTY[[:blank:]]*=.*/d' /etc/sysconfig/sapconf # bsc#1096496/bsc#1096498 # to update the comment sections in /etc/sysconfig/sapconf # does not work with /bin/fillup, but is mandatory for SAP /usr/lib/sapconf/sccu.sh || : echo "Updating /etc/sysconfig/sapconf ..." /bin/fillup -q -t /etc/sysconfig/sapconf /usr/share/fillup-templates/sysconfig.sapconf # remove no longer needed 'ase' sysconfig file rm -f /etc/sysconfig/sapnote-1680803 && echo "Removing obsolete /etc/sysconfig/sapnote-1680803..." || : # remove no longer needed 'bobj' sysconfig file rm -f /etc/sysconfig/sapnote-bobj && echo "Removing obsolete /etc/sysconfig/sapnote-bobj..." || : else # covers updates from SLE15 echo "covers updates from SLE15" # bsc#1096496/bsc#1096498 # to update the comment sections in /etc/sysconfig/sapconf # does not work with /bin/fillup, but is mandatory for SAP /usr/lib/sapconf/sccu.sh || : echo "Updating /etc/sysconfig/sapconf ..." /bin/fillup -q -t /etc/sysconfig/sapconf /usr/share/fillup-templates/sysconfig.sapconf fi PNAME=sapconf DEF_VAL="no" DEL_TEMPL=/usr/share/fillup-templates/$PNAME.del rm -f $DEL_TEMPL for var in SEMMSL SEMMNS SEMOPM SEMMNI ; do echo -e "#\n$var=$DEF_VAL\n" >> $DEL_TEMPL done if [ -f /etc/sysconfig/$PNAME ] ; then /bin/fillup -q -t -r -i -d "=" /etc/sysconfig/$PNAME $DEL_TEMPL /etc/sysconfig/$PNAME.deleted.$$ test -f /etc/sysconfig/$PNAME.new && mv /etc/sysconfig/$PNAME.new /etc/sysconfig/$PNAME fi for i in $DEL_TEMPL /etc/sysconfig/$PNAME.deleted.$$ ; do if [ -f $i ] ; then . $i rm -f $i fi done # adapt new SAP note values to the configuration /usr/lib/sapconf/adapt2newSNvalues.sh || : /usr/lib/sapconf/sc_hooks.sh $hook || : # move custom specific sapconf related tuned profiles from /etc/tuned/ # to /var/lib/sapconf/saved_configs /usr/lib/sapconf/mv_tuned_conf.sh || : # remove nofile related limits.conf entries for @sapsys @sdba @dba if [ -f /tmp/sapconf_remove_nofile ]; then lim_chg=false for ulimit_group in @sapsys @sdba @dba; do for ulimit_type in soft hard; do limits_line=$(grep -E "^${ulimit_group}[[:space:]]+${ulimit_type}[[:space:]]+nofile.+" /etc/security/limits.conf) if [ -n "$limits_line" ]; then sed -i "/$limits_line/d" /etc/security/limits.conf || : lim_chg=true fi done done [[ $lim_chg ]] && echo "Updating /etc/security/limits.conf..." || : rm -f /tmp/sapconf_remove_nofile || : fi fi sed -i '/^[^#].*[[:blank:]][[:blank:]]*=[[:blank:]][[:blank:]]*.*/s;[[:blank:]];;g' /etc/sysconfig/sapconf >/dev/null 2>&1 || : if [ -x /usr/bin/systemctl ]; then test -n "$FIRST_ARG" || FIRST_ARG="$1" [ -d /var/lib/systemd/migrated ] || mkdir -p /var/lib/systemd/migrated || : if [ "$YAST_IS_RUNNING" != "instsys" ]; then /usr/bin/systemctl daemon-reload || : fi for service in sapconf.service ; do sysv_service=${service%.*} if [ -e /run/systemd/rpm/needs-preset/$service ]; then /usr/bin/systemctl preset $service || : rm "/run/systemd/rpm/needs-preset/$service" || : elif [ -e /run/systemd/rpm/needs-sysv-convert/$service ]; then /usr/sbin/systemd-sysv-convert --apply $sysv_service || : rm "/run/systemd/rpm/needs-sysv-convert/$service" || : touch /var/lib/systemd/migrated/$sysv_service || : fi done fi # cleanup leftover - old SLE12 profile file rm -f /var/lib/sapconf/act_profile || : # Amend logind's behaviour (bsc#1031355, bsc#1039309, bsc#1043844), there is no rollback. # Not needed any longer as the limit is removed from logind (jsc#SLE-10123) SAP_LOGIN_FILE=/etc/systemd/logind.conf.d/sap.conf if [ -f $SAP_LOGIN_FILE ]; then echo "removing no longer needed file '$SAP_LOGIN_FILE'" rm -rf $SAP_LOGIN_FILE || : fi test -n "$FIRST_ARG" || FIRST_ARG="$1" if [ "$FIRST_ARG" -eq 0 -a -x /usr/bin/systemctl ]; then # Package removal, not upgrade /usr/bin/systemctl --no-reload disable sapconf.service || : ( test "$YAST_IS_RUNNING" = instsys && exit 0 test -f /etc/sysconfig/services -a \ -z "$DISABLE_STOP_ON_REMOVAL" && . /etc/sysconfig/services test "$DISABLE_STOP_ON_REMOVAL" = yes -o \ "$DISABLE_STOP_ON_REMOVAL" = 1 && exit 0 /usr/bin/systemctl stop sapconf.service ) || : fi test -n "$FIRST_ARG" || FIRST_ARG=$1 if [ $FIRST_ARG -eq 0 ]; then # Package removal, not upgrade # revert settings - not needed, done by service_del_preun # clean up custom specific sapconf tuned configuration # move custom specific sapconf related tuned profiles from /etc/tuned/ # to /var/lib/sapconf/saved_configs [ ! -d /var/lib/sapconf/saved_configs ] && mkdir -p /var/lib/sapconf/saved_configs || : for prof in sapconf sap-hana sap-netweaver sap-ase sap-bobj; do if [ -f /etc/tuned/"$prof"/tuned.conf ]; then echo "moving custom profile /etc/tuned/$prof to /var/lib/sapconf/saved_configs" mv /etc/tuned/"$prof" /var/lib/sapconf/saved_configs || : fi done fitest -n "$FIRST_ARG" || FIRST_ARG=$1 if [ $FIRST_ARG -eq 0 ]; then test -n "$FIRST_ARG" || FIRST_ARG="$1" if [ $1 -eq 0 ]; then # Package removal for service in sapconf.service ; do sysv_service="${service%.*}" rm -f "/var/lib/systemd/migrated/$sysv_service" || : done fi if [ -x /usr/bin/systemctl ]; then /usr/bin/systemctl daemon-reload || : fi if [ "$FIRST_ARG" -ge 1 ]; then # Package upgrade, not uninstall if [ -x /usr/bin/systemctl ]; then ( test "$YAST_IS_RUNNING" = instsys && exit 0 test -f /etc/sysconfig/services -a \ -z "$DISABLE_RESTART_ON_UPDATE" && . /etc/sysconfig/services test "$DISABLE_RESTART_ON_UPDATE" = yes -o \ "$DISABLE_RESTART_ON_UPDATE" = 1 && exit 0 /usr/bin/systemctl try-restart sapconf.service ) || : fi fi # Package removal, not upgrade - cleanup # remove drop-in file for ulimit settings if [ -f /etc/security/limits.d/sapconf-nofile.conf ]; then echo "removing no longer needed file '/etc/security/limits.d/sapconf-nofile.conf'" rm -f /etc/security/limits.d/sapconf-nofile.conf fi rm -f /run/sapconf/active /var/lib/sapconf/*profile rm -rf /var/lib/sapconf/saved_state fi # remove no longer needed UserTasksMax setting, if still available SAP_LOGIN_FILE=/etc/systemd/logind.conf.d/sap.conf if [ -f $SAP_LOGIN_FILE ]; then echo "removing no longer needed file '$SAP_LOGIN_FILE'" rm -rf $SAP_LOGIN_FILE fi~o &+ L F0u 0A큤큤AA큤큤AAAd?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?b766380fbe5b5b0af2a403f7c37b407ea1620d4dbcba93d23aa2b5e4c56debb69da2f3e4a493dbe584e63c91ebdcd0236a9dbda017859a03fbc9b47c00b8fef5c2aeb3db7dfd61d436d5f048ec55633130cb550823d49f909dc1695ca9ff96b867fdcd18dbbce288ee4080596b95a49bc30b52820549b9a3fd65189e99671e9dbbe6463390ab38a0278d42974a02926005cec1d48a7dde067a989246f91758e7b6982a6191a916d133db9d6108fd59f55c9006f8204311de2ecf2251645f6980786f60ded947eaa3185e017af665cefb8ec8b301d67ebdfaa99ea1074661e942946d3bb62e8aabe1e6e17e745b378661edaf48e476fa226a411178fe249db5fa4b123c9e4bc78dc5f12559c0fa1f6e96cf403c40ab93decd6fb9b0d86a601f5eacba2f45566b2657b907efb314a06553ec2ec18d8eb30643de0a03bf01f222af4df566e37a3570e4448fd7788f1f4843f8a425299b084d9c677fa571e76a7271ab3f86449205d22a8ffa1ea863b52769cff9985c38b136aca3b489df4b222764a89e59ce75caecb40ff0b7c9697e59fd24847c516d0192439e87312cf0c7932ec1ba910fe26a5ddaba381d7f3b6d42124297d3ed1b1a9a771e0438f531dee26aservice@rootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootsapconf-5.0.6-150000.7.27.1.src.rpmconfig(sapconf)sapconf @ @      /bin/bash/bin/bash/bin/sh/bin/sh/bin/sh/bin/sh/usr/bin/cpupower/usr/bin/envbcconfig(sapconf)coreutilsdiffutilsfillupgreplogrotaterpmlib(CompressedFileNames)rpmlib(FileDigests)rpmlib(PayloadFilesHavePrefix)rpmlib(PayloadIsXz)sysstatsystemdsystemdsystemdsystemdsystemduuidd5.0.6-150000.7.27.13.0.4-14.6.0-14.0-15.2-1234-24.424.14.1d2cRbf@a^`S@^^s^\Q[[#@Z@ZЛZJ@Za@ZZ@ZkZZ8@Z&@Y@YJYaY@Y@YyYJ_Y>@Y@X-XXO@XX=mW@WzOWV@W'A@V@VIV@V +abriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comhguo@suse.comabriel@suse.comabriel@suse.comabriel@suse.comhguo@suse.comhguo@suse.comhguo@suse.comhguo@suse.comhguo@suse.comhguo@suse.comhguo@suse.comhguo@suse.comhguo@suse.comhguo@suse.comhguo@suse.comhguo@suse.comhguo@suse.com- version update from 5.0.5 to 5.0.6 - add parameter IGNORE_RELOAD to /etc/sysconfig/sapconf to prevent sapconf from changing any system tunables during package update (bsc#1209408) - fix for a race condition which leads to a missing start/restart of sapconf, which ends up with restored kernel parameters to defaults (bsc#1207899)- version update from 5.0.4 to 5.0.5 - adapt check of an active saptune service during the initial package installation to work in a chroot environment and fix the missing enablement of sapconf. (bsc#1190736, bsc#1190787)- version update from 5.0.3 to 5.0.4 - change block device handling to handle multipath devices correctly. Only the DM multipath devices (mpath) will be used for the settings, but not its paths. (bsc#1188743) - fixed wrong comparison used for setting force_latency (bsc#1185702) - SAP Note 1771258 v6 updates nofile values to 1048576 (bsc#1192841)- version update from 5.0.2 to 5.0.3 - adapt the activity detection of saptune to the upcoming saptune version 3 (bsc#1189496)- version update from 5.0.0 to 5.0.2 - added sapconf_check and supportconfig plugin for sapconf - change log message for 'MIN_PERF_PCT' parameter to reduce the spot light (bsc#1179524) - add additional check to detect an active saptune service (started but disabled and without any notes applied). Improve the logging message. (bsc#1182314) - enable and start sapconf.service during package update, if tuned is running with sapconf as profile (bsc#1176061) - preserve the state of the sapconf.service during the package update. Only disable the sapconf service, if saptune is active. In any other cases don't touch the state of the sapconf service. If tuned has problems and the command 'tune-adm off' does not work properly in the preinstall script of the package, try to stop the tuned service to avoid weird error messages in the log of tuned during and after the package update (bsc#1182906)- version update from 4.2.3 to 5.0.0 - check the values of the vm.dirty_* settings to be in a valid range before activating or restoring these system values. (bsc#1168067) - add a logrotate drop-in file for sapconf to control the size of the /var/log/sapconf.log logfile (bsc#1166925) - use a drop-in file in /etc/security/limits.d instead of modifying /etc/security/limits.conf directly. So during sapconf service start the ulimits for the max number of open files configured with sapconf will be written to /etc/security/limits.d/sapconf-nofile.conf. During sapconf service stop this file will be removed. During package update from version 4 to version 5 of sapconf the nofile related entries added by version 4 of sapconf will be removed from /etc/security/limits.conf. (bsc#1168840) - support multi-queued scheduler for block devices (jsc#SLE-11140, jsc#SLE-11142, jsc#SLE-11143) - remove usage of tuned from sapconf That means: Now there is only ONE configuration file for sapconf /etc/sysconfig/sapconf All trailing comment sections, which were only used for documentation purpose are now removed. All parameters of the tuned profile defined in tuned.conf governor, energy_perf_bias, min_perf_pct, force_latency and elevator are moved to /etc/sysconfig/sapconf Customer specific tuned profile changes in /etc/tuned/ are transferred to /etc/sysconfig/sapconf. The customer specific tuned profile files from /etc/tuned/sapconf are moved to /var/lib/sapconf/saved_configs. Additional parameter settings in these tuned configuration files are NOT covered by sapconf. Additional changes during package update: if sapconf with tuned support was not used during package update stop and disable the sapconf service if sapconf with tuned support was used during package update stop and disable tuned service if saptune is active during package update stop and disable sapconf service To prevent sapconf related tuned error messages anytime after the package installation we need to switch off tuned in the preinstall of the package to remove the 'active' sapconf profile before the package installation removes the no longer shipped sapconf profile files. The system tuning will be restarted after the configuration transfer in the post phase of the package installation. (jsc#SLE-10985, jsc#SLE-10987, jsc#SLE-10988)- version update from 4.2.2 to 4.2.3 - file /etc/systemd/logind.conf.d/sap.conf will be removed during the package update. It is not needed any longer as the limits for TasksMax and UserTasksMax are removed from systemd/logind (bsc#1148163, jsc#SLE-10123) - if sapconf detects an improper tuned profile during start it will write an information to the log file and the start of the sapconf service will fail to guide the administrator to the problem. (bsc#1139176) - use absolute path to script.sh in tuned.conf file (bsc#1124453) - use ';' as new delimiter for a sed command in postinstall script, because the used '%' is used and expanded by rpm macros. (bsc#1150868, bsc#1150870)- source /etc/sysconfig/sapconf entries correctly, even if the /etc filesystem is read-only (bsc#1122741) - log skipping of existing /etc/systemd/logind.conf.d/sap.conf file during package installation (bsc#1111243)- Do not change the system settings for kernel.sem. So remove the variables SEM* from sapconf. (bsc#1099101)- correct the SAP Note references in the man pages and in the sysconfig file of the sapconf package (bsc#1096498)- never ever stop or disable uuidd.socket in sapconf. It is mandatory for every SAP application running. (bsc#1093843) - remove hardcoded default value for VSZ_TMPFS_PERCENT. This allows an admin to exclude VSZ_TMPFS settings from the sysconfig file, so current system value will remain untouched. This value only got used in the previous version, if the variable VSZ_TMPFS_PERCENT was removed from the sapconf configuration file /etc/sysconfig/sapconf. If the value of the variable was only changed (increase or decrease) in the sapconf configuration file everything works fine. (bsc#1093844)- remove the no longer needed sysconfig file '/etc/sysconfig/sapnote-1680803' in any update case. (bsc#1089549)- sapconf will set ALL values specified in the file /etc/sysconfig/sapconf irrespective of the current system value. The values will be not just increase, but also decrease, if the value in the sysconfig file is lower than the current system value. All actions are logged to /var/log/sapconf.log (fate#325548) - change variable names in sysconfig file for the avoidance of doubt (bsc#1070495) - remove unnecessary TMPFS_SIZE_MIN from sysconfig file (bsc#1070496)- remove the pagecache references from the sysconfig file during the package update from SLE12 to SLE15 (bsc#1071539)- consolidate the 4 former sapconf profiles sap-hana, sap-netweaver, sap-ase and sap-bobj to one basic sapconf profile 'sapconf' as requested by SAP. If one of the former profiles is the currently active tuned profile, the active tuned profile will be reset to the 'sapconf' profile during the update installation of the package. Additionally the no longer needed sysconfig file '/etc/sysconfig/sapnote-1680803' will be removed during the package update. (fate#324489, bsc#1070504)- add directive ExecStop to the systemd unit file sapconf.service and start sapconf.service after initial package installation (fate#325363)- add system unit file sapconf.service to start tuned, uuidd.socket and sysstat during system boot and to restart tuned during package update installation so that the changes will take effect immediately (fate#325363) - remove left over pagecache limit references (bsc#1071539)- Remove sapconf legacy interface /usr/lib/systemd/system/sapconf.service /usr/sbin/SAPconf /usr/sbin/rcsapconf /usr/sbin/sapconf The man pages are adapted to reflect the changed handling. (bsc#1070505, fate#324490)- Check, if pagecache limit is available at the system. If yes, set pagecache limit according the settings in /etc/sysconfig/sapconf. If not, log a message to the log file. (bsc#1071539, fate#323778)- Refactoring sapconf parameter settings together with SAP Linux Lab. (fate#324491) - ATTENTION: One main feature of this sapconf package update to version 4.1.12 is a consolidation of all sapconf configuration settings into the central /etc/sysconfig/sapconf configuration file (except those settings related to ASE or BOBJ and those settings which can only be set via tuned.conf) This will result in a lot of configuration file changes concerning /etc/sysconfig/sapconf, /etc/sysconfig/sapnote-1557506, /usr/lib/tuned/sap-netweaver/tuned.conf and /usr/lib/tuned/sap-hana/tuned.conf. That means that your system configuration get changed after a restart of tuned or during a system reboot. Please read carefully the following information about configuration file handling before restarting tuned or rebooting the system. (bsc#1070508) - use the same tuning values for HANA and Netweaver workloads. That means the use of the same tuned.conf and script.sh file for both profiles (sap-hana and sap-netweaver) This should lead to a better base for mixed HANA and ABAB workloads on one system. (bsc#1070508) - the pagecache configuration is now integrated in the general sapconf sysconfig file and the old sysconfig file sapnote-1557506 is obsolete. As before pagecache handling is disabled by default. ATTENTION: configuration file handling during package installation. During an initial package installation the new sysconfig file, which includes the pagecache values from the former file sapnote-1557506, is copied to /etc/sysconfig/sapconf and the changes will take effect immediately after restarting tuned. During a package update previously copied /etc/sysconfig files will exist. If both files in /etc/sysconfig are unchanged - that means, there are no custom changes present - the new sysconfig file is copied to /etc/sysconfig, the old obsolete /etc/sysconfig/sapnote-1557506 is removed and the changes will take effect immediately after restarting tuned. If the file /etc/sysconfig/sapconf is unchanged - that means, there are no custom changes present - but the file /etc/sysconfig/sapnote-1557506 contains custom modifications, the new sysconfig file is copied to /etc/sysconfig, the changed values from /etc/sysconfig/sapnote-1557506 are copied to /etc/sysconfig/sapconf and /etc/sysconfig/sapnote-1557506 is moved to /etc/sysconfig/sapnote-1557506.rmpsave. The changes will take effect immediately after restarting tuned. If the file /etc/sysconfig/sapconf contains custom modifications, the new sysconfig file is copied to /etc/sysconfig as sapconf.rpmnew. Custom modifications from /etc/sysconfig/sapnote-1557506 - if available - are not merged in this new file. Please merge the needed custom modifications manually from both files into /etc/sysconfig/sapconf.rpmnew, move this file to /etc/sysconfig/sapconf and remove /etc/sysconfig/sapnote-1557506 before you restart tuned to get the changes take effect. (bsc#1070496, bsc#1070508) - The following parameters are additional specified (instead of static tuning inside the tuning script or defined in other configuration files like tuned.conf or sapnote-1557506) or changed in the central configuration file /etc/sysconfig/sapconf. vm.max_map_count, vm.dirty_bytes, vm.dirty_background_bytes, kernel.shmmni, net.ipv4.tcp_slow_start_after_idle, ksm, transparent_hugepages, numa_balancing added and value changed vm.pagecache_limit_ignore_dirty, vm.pagecache_limit_mb added and commented out kernel.shmall, kernel.shmmax, kernel.sem changed But be in mind: higher system value will ever remain unchanged. sapconf will respect higher values set by the system or by the administrator using sysctl configuration files. Values set with sysctl command will respect too, but do not survive a system reboot. Every tuning action is logged to /var/log/sapconf.log ATTENTION: configuration file handling during package installation. During an initial package installation the new sysconfig file is copied to /etc/sysconfig and the changes will take effect immediately after restarting tuned. During a package update a previously copied /etc/sysconfig file will exist. If this file in /etc/sysconfig is unchanged - that means, there are no custom changes present - the new sysconfig file is copied to /etc/sysconfig and the changes will take effect immediately after restarting tuned. If this file in /etc/sysconfig includes custom modifications, the new sysconfig file is copied to /etc/sysconfig as sapconf.rpmnew. Please merge the needed custom modifications into /etc/sysconfig/sapconf.rpmnew and move this file to /etc/sysconfig/sapconf before you restart tuned to get the changes take effect (bsc#1070494, bsc#1070495, bsc#1070496, bsc#1070508) - The following parameters were specified in tuned.conf of profile sap-hana and/or sap-netweaver before. But they are removed from tuned.conf because they are redundant, no SAP Note is mentioned it, replaced by another parameter, moved to another configuration file or commented out, because they are only valid for a special architecture or special tasks (like the [cpu] part was only valid for Intel architecture and only performance related) vm.swappiness, kernel.sched_min_granularity_ns, kernel.sched_wakeup_granularity_ns, readahead removed [cpu] section with governor, energy_perf_bias, min_perf_pct commented out vm.dirty_ratio, vm.dirty_background_ratio removed from tuned.conf replaced by vm.dirty_bytes, vm.dirty_background_bytes defined in sysconfig/sapconf kernel.sem, net.ipv4.tcp_slow_start_after_idle, transparent_hugepages moved to sysconfig/sapconf ATTENTION: these changes will take effect immediately after restarting tuned. Except the administrator is using an own copy of the tuned.conf file in /etc/tuned/ (where may be sap-hana or sap-netweaver) to set own or changed values. The tuned.conf files in /etc/tuned/ remain untouched during package installation. To get the new behaviour SAP is recommended, remove the profile copy from /etc/tuned or copy the new tuned.conf file from /usr/lib/tuned/ to /etc/tuned/ or compare the files in /etc/tuned/ with the files in /usr/lib/tuned/ manually and adjust the content, if needed. (bsc#1070494, bsc#1070495, bsc#1070496, bsc#1070503) (bsc#1048550, bsc#1064720) - Setting of UserTasksMax, a parameter of the systemd login manager, will be done in the post script during the package installation. The value is set to 'infinity'. Note: A reboot is needed after the first setup to get the change take effect. A message will indicate if a reboot is necessary. As before there is no automatic rollback. (bsc#1070386) - enable and start sysstat service during post script of the package installation (see SAP Note 1310037) (bsc#1070390) - add package requirements including a short description to the man page of sapconf and to the central configuration file /etc/sysconfig/sapconf (bsc#1070390) - Update the sapconf man page and associated man pages to reflect all the changes of sapconf package version 4.1.12 (bsc#1070506) - respect active tuned profile during reboot of the system even if it is not a 'sap' profile. sapconf only activates sap-netweaver profile by default, if NO tuned profile is actually set. (bsc#1026862) - reinsert 'elevator=noop' to tuned.conf of profile sap-hana and sap-netweaver. (bsc#1031073, bsc#1032516, bsc#1070494)- fix variable name for pagecache handling (bsc#1057986)- restrict UserTasksMax setting to os releases > 12.1- add SLE12-SP1 specific change for UserTasksMax (bsc#1039309 and comment #35 of bsc#1031355)- add a message to %post to remind the admin to restart the tuned service, if he want the configuration changes to take effect immediately (bsc#1048550)- increase MAX_MAP_COUNT_REQ to 2147483647, see SAP Note 900929 (bsc#1048550)- Update package description. - Make "tuned" a mandatory runtime dependency to address bsc#1043844. - In all tuning profiles, do not overwrite a parameter if present value is higher than optimal value. (bsc#1048550)- Amend logind's behaviour (bsc#1031355, bsc#1039309, bsc#1043844)- Add a dependency against the package sapinit-systemd-compat to prevent SAP systems to be stopped every time the SAP Host Agent is restarted (SLE12-SP1 only) (bsc#1043841)- add new profiles for SAP ASE (Sybase) and SAP BOBJ according to fate#320359.- Upgrade to upstream version 4.1.7 that addresses exactly one issue: Lee Martin and colleagues noticed that SAP HANA performs better with "force_latency=70" in its tuning profile, so the setting is now introduced to the profile. (bsc#1032516)- Upgrade to upstream version 4.1.6 that addresses exactly one issue: sapconf's sap-hana tuning profile incorrectly uses "noop" IO scheduler on disk block devices, which is not explicitly recommended by either SUSE or SAP. Performance regression showed up during benchmark runs. Hence, the IO scheduler setting is removed from tuning profile, and left to be decided by end-user. (bsc#1031073)- Use arbitrary precision calculator rather than bash's built-in integer calculator to calculate parameter values, this gets rid of all integer overflow issues observed in production. (bsc#1027411) - Apply tuning technique of Netweaver in HANA profile too. (bsc#1016795) Upgrade to upstream version 4.1.5.- "force_latency=1" is removed from HANA's configuration, so that CPUs are no longer kept busy when idling. (bsc#1025824) - Introduce complementary README.d and LICENSE files from upstream git repository.- Do not touch THP configuration in Netweaver profile, avoid inheriting configuration from high throughput profile. (bsc#994306)- Put version number in source archive name. - Fix a race condition during start (bsc#977575).- Start uuidd.socket as soon as the package is installed. Further fix bsc#983454.- Control uuidd as a step of the tuning process. Fix bsc#983454.- Introduce mandatory dependency on package tuned. Implement fate#320783.- Redo the directory structure in the source archive file. - Introduce /etc/sysconfig/sapnote-1557506 to: * Disable pagecache_limit by default. * Let user decide if and how to tune pagecache_limit. Fix bsc#966930 and bsc#971625.- Mention tuned parameters in manual pages: fix bsc#966720- Fix a misplaced optimisation routine that should have been applied to SAP HANA but in fact applied to SAP NetWeaver. (bsc#962059)- Implement fate#319480 - [ECO] Include tuned architecture in sapconf * Replace the entire sapconf package content with tune daemon SAP profiles, * The executables remain compatible with the original sapconf implementation. * Following files are removed from package source: LGPL README SAPconf SAPconf-reconfig SAPconf.8 config.b64 functions sapconf sapconf.8 sapconf.service * Following file is added into package source: sapconf.tgz/bin/sh/bin/sh/bin/sh/bin/shsheep65 1681899745 5.0.6-150000.7.27.15.0.6-150000.7.27.1 sapconfsapconfadapt2newSNvalues.shcommon.shmv_tuned_conf.shsapconfsc_hooks.shsccu.shutil.shsupportconfigpluginssapconfsapconf.servicercsapconfsapconf_checksysconfig.sapconfsapconf.5.gzsapconf.7.gzsapconfsaved_configssaved_state/etc/logrotate.d//usr/lib//usr/lib/sapconf//usr/lib/supportconfig//usr/lib/supportconfig/plugins//usr/lib/systemd/system//usr/sbin//usr/share/fillup-templates//usr/share/man/man5//usr/share/man/man7//var/lib//var/lib/sapconf/-fmessage-length=0 -grecord-gcc-switches -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -gobs://build.suse.de/SUSE:Maintenance:28652/SUSE_SLE-15_Update/90c636ef26cbd90a7ef9d8b1cb7ccf25-sapconf.SUSE_SLE-15_Updatecpioxz5noarch-suse-linuxASCII textdirectoryBourne-Again shell script, ASCII text executableBourne-Again shell script, UTF-8 Unicode text executableUTF-8 Unicode texttroff or preprocessor input, UTF-8 Unicode text, with very long lines (gzip compressed data, max compression, from Unix)troff or preprocessor input, ASCII text, with very long lines (gzip compressed data, max compression, from Unix)RRRRRRRr⋵gmM# Use a real bash script with an explicit "exit 0" at the end to be by default fail safe # an explicit "exit 1" must be use to enforce package install/upgrade/erase failure where needed # see the "Shared_libraries" section in http://en.opensuse.org/openSUSE:Packaging_scriptlet_snippets # Begin refresh systemd units and clean up possibly obsolete systemd units # The following is a generic way how to refresh and/or clean up systemd units. # A systemd unit may need a refresh after updating a package when the new package # had installed a changed systemd unit file for an enabled systemd unit. # A systemd unit may become obsolete by updating a package (see bnc#904215). # A systemd unit is considered to have become obsolete when the systemd # symlink /etc/systemd/system/.../unit_name -> /path/to/unit_file is broken. # When during package update the new package does no longer provide a unit file # then the systemd symlink becomes broken after the files of the old package # had been actually removed by RPM. # According to /usr/share/doc/packages/rpm/manual/triggers and according # to https://en.opensuse.org/openSUSE:Packaging_scriptlet_snippets#Scriptlet_Ordering # and http://fedoraproject.org/wiki/Packaging:ScriptletSnippets#Scriptlet_Ordering # from the new package only "posttrans of new package" is run after "removal of old package" # so that the new package must do the clean up as RPM posttrans scriptlet. if systemctl --quiet is-enabled sapconf.service 2>/dev/null; then # Refresh still valid enabled systemd units and clean up possibly obsoleted systemd units: # Enforce systemd to use the current unit file which is usually the unit file of the new package # but also in case of custom units (that use other unit files) a "reenable" won't hurt because # "reenable" does not implicitly stop a running service which is "the right thing" because # a RPM package installation must not automatically disrupt (restart) a running service. # Using "--force reenable" is essential to clean up possibly conflicting/broken symlinks. # (without "|| :" build fails with "Failed to get D-Bus connection: No connection to service manager. posttrans script ... failed"): systemctl --quiet --force reenable sapconf.service 2>/dev/null || : else # Refresh still valid disabled systemd units and clean up possibly obsoleted systemd units: # First using "--force reenable" is essential to clean up possibly conflicting/broken symlinks # because there is no "--force disable" that would clean up possibly conflicting/broken symlinks # see https://bugzilla.opensuse.org/show_bug.cgi?id=904215#c34 # so that first the unit has a clean state and then it is set back to disabled (as it was before). # If a disabled systemd unit has become obsoleted, "systemctl --force reenable" will clean it up # which means the unit gets removed and the subsequent "systemctl disable" will do nothing. # (without "|| :" build fails with "Failed to get D-Bus connection: No connection to service manager. posttrans script ... failed"): systemctl --quiet --force reenable sapconf.service 2>/dev/null || : systemctl --quiet disable sapconf.service 2>/dev/null || : fi rm -f /run/sapconf_during_pkg_inst if [ -f /tmp/initial_sapconf_inst ]; then # package initial install rm -f /tmp/initial_sapconf_inst || : # if saptune is active - stop and disable sapconf service # (jsc#SLE-10987 decision) saptune_active=no if systemd-detect-virt -q -r; then # running in chroot - systemctl is-active/start/stop does not work as # expected - acts as 'NOPs' and returns '0', but enabel/disable does work if [[ $(ls /etc/systemd/system/multi-user.target.wants/saptune.service 2>/dev/null) || $(cat /etc/tuned/active_profile 2>/dev/null) == "saptune" || $(ls -A /var/lib/saptune/saved_state 2>/dev/null) || $(ls -A /run/saptune/saved_state 2>/dev/null) ]]; then echo "Running in chroot, but detected that saptune is enabled or active. Disable sapconf service" systemctl disable sapconf.service || : saptune_active=yes #else - do not change system preset fi else if (systemctl -q is-active saptune) || (systemctl -q is-enabled saptune) || [[ $(cat /etc/tuned/active_profile 2>/dev/null) == "saptune" || $(ls -A /var/lib/saptune/saved_state 2>/dev/null) || $(ls -A /run/saptune/saved_state 2>/dev/null) ]]; then echo "saptune is enabled or active, stop and disable sapconf service" systemctl stop sapconf.service || : systemctl disable sapconf.service || : saptune_active=yes fi fi if [ "$saptune_active" == "no" ]; then td_profile=$(cat /etc/tuned/active_profile 2>/dev/null) || : if [ "$td_profile" != "" ]; then echo "found non empty active tuned profile ($td_profile), not starting sapconf service" elif [ -f /run/sapconf/active ]; then echo "found '/run/sapconf/active' file, seems sapconf already runing. So doing nothing." else echo "starting sapconf service" systemctl start sapconf.service || : fi fi else # package update # check sapconf service state before update sapconfServEnable=false sapconfServActive=false if [ -f /run/sapconf_pre_enblss_found ] && [ -f /run/sapconf_pre_actss_found ]; then echo "sapconf service was active and enabled before, stay with it" rm -f /run/sapconf_pre_enblss_found /run/sapconf_pre_actss_found || : sapconfServEnable=true sapconfServActive=true fi if [ -f /run/sapconf_pre_enblss_found ]; then echo "sapconf service was enabled before, stay with it" rm -f /run/sapconf_pre_enblss_found || : sapconfServEnable=true fi if [ -f /run/sapconf_pre_actss_found ]; then echo "sapconf service was active before, stay with it" rm -f /run/sapconf_pre_actss_found || : sapconfServActive=true fi # if sapconf with tuned support was not used - stop and disable sapconf service # (jsc#SLE-10987 decision) if [ ! -f /run/sapconf/active ] && [ -f /run/sapconf_tuned_removal_started ]; then echo "sapconf with tuned support was not used" if [ "$sapconfServEnable" == "true" ]; then echo "but sapconf.service was enabled, so skip disable sapconf service" else echo "disable sapconf service" systemctl disable sapconf.service || : fi if [ "$sapconfServActive" == "true" ]; then echo "but sapconf.service was active, so skip stopping sapconf service" else echo "stop sapconf service" systemctl stop sapconf.service || : fi fi # if sapconf with tuned support was used - stop and disable tuned service # (jsc#SLE-10987 decision) # and enable and start sapconf service (bsc#1176061) if [ -f /run/sapconf/active ] && [ -f /run/sapconf_tuned_removal_started ]; then (echo "sapconf with tuned support was used, stop and disable tuned service, enable and start sapconf service"; systemctl stop tuned.service; systemctl disable tuned.service; systemctl enable sapconf.service; systemctl restart sapconf.service) || : fi # if saptune is active - stop and disable sapconf service # (jsc#SLE-10987 decision) systemctl -q is-active saptune || systemctl -q is-enabled saptune || [[ $(cat /etc/tuned/active_profile 2>/dev/null) == "saptune" || $(ls -A /var/lib/saptune/saved_state 2>/dev/null) || $(ls -A /run/saptune/saved_state 2>/dev/null) ]] && (echo "saptune is enabled or active, stop and disable sapconf service"; systemctl stop sapconf.service; systemctl disable sapconf.service) || : # if sapconf is/was active - reload new configuration if systemctl -q is-active sapconf; then /usr/bin/md5sum /etc/sysconfig/sapconf > /tmp/sapconf_sys_md5_post || : if ! (diff /tmp/sapconf_sys_md5_pre /tmp/sapconf_sys_md5_post >/dev/null 2>&1); then # the config in /etc/sysconfig/sapconf was changed, # if not already reloaded by tuned transfer - reload config if [ ! -f /run/sapconf_tuned_removal_started ]; then echo "sapconf service is active, reload config" systemctl reload sapconf.service || : fi else echo "config in /etc/sysconfig/sapconf not changed, no need to reload config" fi # saftety net - check if really tuned. if [[ ! -f /run/sapconf/active || ! $(ls -A /var/lib/sapconf/saved_state 2>/dev/null) ]]; then echo "sapconf.service is active, but the tunings seems to be not in place, restarting..." systemctl restart sapconf.service || : fi fi # cleanup 'sapconf with tuned support' indicator rm -f /run/sapconf_tuned_removal_started || : # remove active indicator, so that a restart of sapconf after the package # installation will work correctly, side effect found by bsc#1176061 ! (systemctl -q is-active sapconf) && rm -f /run/sapconf/active || : fi exit 0/bin/bashcronutf-87e216b97c4e485a9212c0454df298d8bab407e5427850c2bf1bbbe5c563727c4?P7zXZ !t/]k] crv(vX0+q:#Gt20ֿR(:ikJ(}.G3ґonc~liΝ'PrlS"k !M"SxP?B/X iЉv83aeri?TU9`Z ?5O95d7:jW QmXvL抸>qR1,7 TqLjkU/zt}BM rAp+ Ušei:d yٙ28t^Tyj~Qk?=ܿ!EBV󆍺lim*토Ȝ%%̀zIELdBɝ)בKKd8ōM*|niaeq1^.`Ճ}r>Ƚ],飯è>H䉾$M?%plY>ys4+E32NW'A'q4/9ԐmZ ̼ȼ%{=zc71aH8p@[hfwV=T;LӜ8:FYL3y"c̀wXik4חH–t]Dm>&~h/6K_]mskDΑmyMb F\i0(%I?d99Udw6f^wX]idz2?7_ g$v?^rqj]%&|$܀n~`$'CM|$I8!ܞ ƑBߺc'YnˠqgS/` D>졪lNO~sh&z&/)d&9xnhQlUxڈ<(-L 7×Q g.ʽ(~Q n"1Oz;d{1!&kHO[{-0k=O7e ϻWǖӺ4zEdJݹ XM?Q]){K$I -%VrձUo=-Qӂ GhR᠖?g(FB-!A Σ>he4M3uwS쒱 GSѱmS+[BN11kOfdpS X/~/[͓1XZȀ`GA;N=^ri0X_<bA Shs,tK; 7Q6B,E*b2J'[Ǚնyiy¼U,}s~DƗIOvLe_f?uI&&B:#jyjm4n\4|ѷ…VڛTIe'f&2<^W00Gy8HHJxa0+ݯ*f bma׬_x[_K=o(lPbn6*#_'1rqrt_~$.pNDBogS4ɲ{p81@߿0uLZkb>6дܑ^' _6A1UBbXt l+lYu\>Sݬr'+ٚz g6>ݽme+2!\/sPB~ʥiWƓI%a1d \-+k<5xr֊ (\'4bI{\ C1?J5OHA w ʹmu(_i]9@]{E8U)vQqQ6د U;fxwB)(3=ׁƨ?.gE2 0k"9]X'wZwf}K( E~) 4(WyKv]>x w}3uNBiJHiD}hDz6{ Cvf<'I}zMfxz?4o?!Be2) iu(# Շ[Uȭ H:u_!6% q/͒'HL"'?h}oUR8}J;]g3=ʴ_ m$$D\]Ϻp%xa9:"&ډ#|1uW;nFO=vL]Y3$lȌOHqGE1IYYѕqZ]nUSRFy cf:Wx3嚥Q7buG3_4#ʟF>B6eD> U4B04 H|2EzR3RZ@c< ʹ}6yl%Fp,xmJ9Yllń4 gŤv$2}r!JVf"бa,MvoS;^1Q6yz*E4:ȤǺrLAlayʙZY3yP\t*Qا9a#sI(}۪0B| Uzu5o,+Ua5^֠ x0`j 5Rs_˼{]nn9riDԭ+lf*A+ vئ·( OfUnIB3ǝz0/܃<('!EL#9 ӓW+2>#IQ Q?3퉀 |:8W):袞A3 D6I~ {v+i&]yLAnH/j$Nc#+I2ysYŎ@99J', ^Zy8(YKTtfLnϷޗzՎR5cx1e2'r_d3e0v הhiOH%GNZ5ؠ:r]?tb66뤨&UJu*<XL;ָݕx5D"Glk6@+(*[e[ȴlbП/"Zp;D)"˶dP.SNtln}$@|5\svd 9&]#6WI @Z¦-;{ 27*KtKd4kAGqmFG!cpw"@MVǜe$yX ScIo7% >A,j>ޤ+Q0_N?ҁ0q_}^@ta&>hUc%}m67)6Tec_rނKuX~JQFr4_/MO0NOɌEq^fQDsʉ)~w@aUl)7KrkiLa#Il~F2RΆE /CêTdw$RTHitq=Kt}&Ky̡kU z=9}ơԀ[k @:f( M&pyM/BW8اH{;K[p: 3EkcA39Z=0q)'RsN? ^x^fKpTAl2pW5TpR3}W kk LBI#s eݒwOozm {dI,rrGٺV0JǸfq^T Kn;!e8kA:/HX?iqOv1A6;@#=;H9eF*s*a˅w:ݝܲ&=LȞ%0B-}6prR FQrn|2fȵԩ1|sc >)۰c%`kf6-l =uEz­H.1qJ ?Lgm`EOx!q״g._UCԩ钷k&!Ʌs9T֎ɄHxFem(Qۥ>/{9>$Tx#Nj;JT/:K 1%OQ %YFg8w[raЗTU˓/ ^b`(IH sC:+ŕrL7~;4E aHRZ#η\EH^ؙB.'To 0amt C"<#Y{ԔiR<z.ƹ߻Ġ~@:0Lmq{6LqiU!e\\ 2`|RG{\Lym L[W'*t[>vҵPp~B7ymkCeLȣfftcWK;r${>Ww][7.-:vwMqRj=2P+љ qBB@lGts͍PF1^jMt1c͡׮z?-~<ŀ*eNs>$N1WwACmEe+>C#]),1YkS:"bڱOayfGy'f:%ADz2yȻۈfxy /d'lqVN%ř5J7 > v@-/G K]+rqNj0Wp=&F7T_*}R季 ]qN/0YX>F%]JρEx)U]_ ~>!4mc&ykliG1RǶ6[3_ #gՏz#aJ wȭ~lI( UPts7冈BpXP3n'T Xmd޶T LZR:>kUdXq0#6Lj_Em0ZNMNHQl { 8fBxBjh(rRj3CW+G* zdz܇F/ӶpD}੫#vjlVc( 7à*p ,KucCqas,Y}cmQRlV;f>&1xoOkb}Nj2ÈB"#H&[QU9ʓ6hT5MÂ~# kV )\彰Uz۳r-i0,ܣb0(xE 2IAܤ+TAYffÐq46[\ ^'> Ga`\!)Zá j7ǵב]c=K7:QTHdъHn,)(3n8ts;߽%WrxՇc.3T"IΞRF}w[na27K,nWz>q^F(>yJޖo7O]0vy29Zwiࣦi|xjƋO6SbOՙ3_:NѪMJEӾw )c`=j;RP~7^b6 r?s^}MP1s𮋓mR-ߩ|d*yh@$5tCL r6@)hTc"&~9F20m _Q!|KV+5݆y0yFD@ 5C/۠7bJ.Wl~6إUv1i.K 1ۛE?w*GAj\y/ڼ1;3bewu!ZV.VWo;p3,,MЖxMozbP_即JƸ^LT&_qROj, t\(fqԝ~:ͪ䀵=^zxL#m?nɢ͵с݌`Z(i仅7>kbhL{͓jdlk p>FGsjSr¼U}32!^tLNxú~ B QR|z.|a_a|3R֒(yQeVG棏Gkt„|8/ \`yM^N2MHSoґCOi`uXzCAj0z*m"IԢmG3`6yK.y'r11+ݍca+ˍ_v0 jbZ?w,-KWOp,-ve% [C L*xw=OY '@h(8_?I:hW_wM`` #oj08ZVȊaFJX12G}+,"Gԥ oD$6ߓ΋ G oC$2S}_:q)ڲ6E:\6 TPW]y&R,*hG5-Mzͅ_j5K,ZDAeܼg fxPS*\t_i-m.`7kֆFG*eK? [E_d5{amz v&6ɓJ6yc'_̓IEr5ҠgqK%F,OƼ?nf5v}x$v (vx|a57ħ){J'>1ZZ9Na PIP1>êx|7u)MVDA+Q<;b*!Nr'DWfl~i 4f J^j8zo_T-#luV ^sm>~Ot2NHMSp$Y1r=}dGB%\5N8e͆!weB_4Q}^kO@';V|E?t`)PL~Lrk {:*a6eŸ.c msЏ 5rk2$ˊ $uh)Ƅ}sJdE{=St gUMÙ ";Ȯr N)i7v{?` Fns 1vꀣpa6j}s@rm0+@xh"M'ޱҾ ;Tp)M}`>)M_ޔતRczd)inޗ: `bj (O"A}<O觹tA3yjꨟl?,%1T1,g˜ą3ξt%l!-hփʢ7iRURYűHn 'J/zNuT6h#{g{kԀ̀n+ U!f!U+|`D.!_'ˉб0ڛ]ӱz{otO; &y-NaL<HEңCꞯe4ߟflvw b`LiE[Lɧ5!Q"3 GU4жeܬQ3dGjh+IAiy_)NQ+*?6S 3k io~ c; kŞ5^!_|`Mץ\3÷K֮ПE6Xe_,;`ݺKHA.ГΒ A( 챱E _Iڑ%?Q:cjR~i##C09κKy=yppYC`)$x6Xmz6xPb:O ì>: ;}7>K >8.Ղ}ĢK=aQ=pY;\@4ߊM$h6>c)*>ǘuž}X2Ct/[XOM^"0_fSH^i˳"LYmNn|;bi&p*Kc^ۣ7A:LZWWk .^`$vĝRnAOg@ϊl/7*6!%"'ƈJgXD1*7˱;]J;c'g'DB;wtw2)'X/tx YEPY`7}:*AK4*yJ̷WP"n_s:jմ$61gm N ɑp;="*ItӎeAyCo9ђx4+#Rޙ['+zt5UbMqWufdgPiE{Yv@#:PZvxl7W!wHa?t:&ˆDuה%D@X f~;GGZ{q ^FF#]OG7}a5|L5|HJy&}R؉vVji4W'CrD@8ATEb~/K;@?2˿C@1!$*A\5tZ{E}Nn!)rT>B6W$J!^T7@;ǿ6H ݱP!U/;J(pC |{7TLw24QUǠ|8xj;C~4:C1'Jgf%LEܴ6a6z^TPIJ?n\q+Օ~,ip5U۱P2WnֻFx-7RC`Em^0Qإ m B!fv&hf,W#m@afۊּN6 j=^x>_Ų DSe??tQsnT")Kd2mYoxj.-کJuI'DG vO7 BN( >тĐxzpSznl[0OZ2Ҟ^kf4CA9>j': <=yTƜ]| .5E JlD_LJʼzs2 f$WvwEssC14BuŜθw 80a Ȣ,走ѣdDO_HKg! ٰvh0\ד>:X#k*Fiւdc~ot8!W0Ľs[<׳Z[u{2̬gF~܉-]qќEǵJP;><=(fWKӇ2JbI䑀a%=k3p~!.ozC) 3F=)nWb|ɥp(Y<꿩XCD &,t0DB$ v^nx6<i yCa{E|˩?C]1Y\np?mHD)3{/-u!D0(z^ZQH9o?hx;~%aOWc'ߓ N.9&Dv* _ fkiVۓSŮ`ԃN.e 9J-!io,rxgc?#cV5 !l#H>1QK-n7 _,H)7e:qxJ.^%Ro[]> -OJG0^$|CiM 9,ݩ:_x5'Ҟ;g=v$roYTiaXoe$o?P*gbj?`#m>kdhƩ Iخ]A+sn"l4zFlY?*]6 jjd %UUC@MEA/=zx䩘%k"Xm"i&Cg%8tʾ]֣YZF>q- &6tÙIͰK79,>: h5 nRQiInl#z,U?И(.Ù{,4 )$/"+;14m̒<%{썉Wヨ Δ#Kz2t8#t#|WA'^Y{ҋ|v:VBQTurr +tI£7MeCPcu1w |A9=jOe}s7,BWYt\<2;ưoXU826k ʀuFbUis-YEU))BS벅9LowT]xKeSB֬p<Q^!Fر5vS Q80>GL2LUst\H4] v/[|:A/:R0Ҍ̥޲&?A\Q-o +30$re׉ ?ԸM+"s;8"OJcaSuCɆ˘@ &!cE܅ϺydvD[x'„T*10,Bd*3NU7muCDhͷ*PKN^4P\ԞwwQ֡S5wq+CT,v8B;Uo2wercҭhEVZRևwFx@_;px=zMj |Źou1X|VsdHp̏˳ؙnĴZ47zdWI ©1㈏2~P"ҪHJN ({7r};;cJGYm笞EB#jaT 8*\[jBfG(f`¼#˸^Nmega2jH /*YeBvV?=/MՠEI{|?2cVq1Vk]#`-$~| cBegTLD U25e'al@ZT,-'0s5JK* v=;2i#E䶧r˘a2EHjU\tqsod|O@Z\<"&0dwmݹBAbǗJ$6n,SVP演ۢf* v^p~t*؍ iPй[&1a (մZ|)s>͙ Wpxs5%HL"8UV4gS%OĘ#bVW|I0+NB`qFI,h"mGJ C$E,j?/ۓӦ:p ܏\ۂ7bp69W[7)2 Hy$AǩR{L=/3.{_~1'_W>_+E xg޴|YӕnlQGsWjHOV~VI4,ah?͡pVM4 {T {e֬'?p2QJyM3`Qmz) uT~Loܾ0{ ? =cf]PQ#Xֻgk߆wTMH!IH{Qeˮt=QlRv $TF9( j3M L!&W ~ K$k ,W1R87SL 0]@|}# ^XD?7X {^>OuOou-] FTbݡ1~fy]EGit*c`uE5)zwhʄ4&AW\P @?o;a4/Οߪ!v=S9.5dMRr>Eǵ|I`j1;5hB6Ue[,ь+e5PP^o9$68}k_ \|-@P<4-+LpyjåVG[u)hK4ʼn.Gj%kwrrpυF|j) яVpqG?f(WV@8cZ[9x@$'LSNڂ ,nŕ&h|O" Ɓ&.ԥBfyC癲5WOS2"[BDc 일pozm "aFғ bFJ9\E!WoRm޷GfQ/5+ # {!7f09pM~E:.1u#nTAw+ꛮ\~HG>ؙ]s\.]ϋ?\: JF}Akx+)6mˌiO)W&-讆A.?hTօ,A<4;j(k_Yד}Q8X42|P}vl\~p-ɯ{*-BBҌѧ4)נ B:rDpfc葞Qc6i=|53eG'yg \t۷:;hnQW2DDzLba!3[O 8Pw 5_:i=QH82#**YYKd'.2:7(#3v+omsC>DZq՘L:V~ݏPt4^/YdEZ:%:CŅZ "Wq{ J+9`6Fkga_kS#Yط\fr{2 RY֐6{IgCOxc5KRk]DH\t溨*qaQťRhWjjAQ8ΟOo4KL:i̇$R `i0J 6zDJ&ybY^zzCm LjPS";F9Y#qb:r;!|;T/ՔYN?mL,5Cnmg6D18'u~-*&Q6Y_L|IiKXN3LfCoO{0~5#3DŸ^4nΐh3?&A&ey._Bn]xSƲvuvɒrڡ.}Cg)03K+ՈN3O ֮͟ @$aSZW[O䑩ՉB Kd"RgyܑK΃ 3A0i4E^=+!nCp0ޝi#BVZ0l{Ҫ,Hs ^gIWIU?8i\SUͯ+cX\v9¾bvy䒵X2PK?@}b"`5zN2IE`/(Kh H/ٛOOI܎ݙ6 ΙX&Y FjK5m&[aT?$\,/Ic"!ExBm hUݐm2_ Op1ly9ЍY4{j֭5O4*PYZzeBG. klW|gEy=j=/ {-0mb/; 43b]Gpdz `` TpGeK !tmxI ڈRӷgܶp]fS)/ܜ1q.TaQ]EP햷ޤ I8 9Q0&PpZD07] #AdG *Nũtp5cpaWW7g(tR7Pɴ"¶@n`@Ð蹞^B!¤ǽ>X*[HL9B*joS\q'g;Bdnr)y2< "\Gj1h{Gq'[yYa }J"o E'189UzSEáO5}vkrdѽa߽NY 10'hghAϏ} :i-=D>*|P=шhT."LҀ;Qe#bh+/(Z~<2DΒy^daMܞ"7StƜzPN8_s!/g>([\#R`K#Y{`I*$k]/'Ih `!ozP;)ݟX +^D^~i~G M .a+`==hNl-$ n^#-J;%h3aɉvo̳ lk)JK qZ"Id3|Z \Y1+pB{@ItEZeayTmjLAJ'UhFE]6 Ķ!.`j1IqEzJ9IPoKD ڊqkAɧG[Nonֈ_d|퐆.)^Gg{(,j@mpr8X-K^&8n-xa^xl o٧EZ/"vG&|FXܒu=&pa:m?#(l݇ec+Ic0fv@Ŷnd6)A~:q0K="RE'-ka>gEUS:/vH䶸N$? WkM]22N;{ |"VJtU"]b\ b4QKD-Ҋ8m t|Ә 8ߺ>"}\cB]qypBs EFU%#4 MltKC2MtAdQв4P|rs"E]G<35`L]nU]]<9!󽶧3]yUD2_<E`9$DeUu`g{Sou 6aG)+|N27-q3D֖FCQ6[btWhw6YҮn#7'[TcTXF*7 wBeUchy$bmAx _N3Z/.c[vbiZK ~4=Bgj,*X-v3 z?#Jhmfu:" eZĘSS&lR6-Z`GW3\g ^ZP`{!M4ŎI{16 !g!C{HwiDgu*?zNM"m_%)+XW"( ڻٜ~; ++g`|rI/D~?NWڊN4lI ZS.JfH w`? kl٫XHX71 `9$ x#C5ևAؔu(g{6FtJl>M~K9y6*wYXוJlj"%[@aI@BӧAFY:XfP>ۣ+.݄g%Ɓ==^U^)[m/nt\Mq&IJ dٷqb jWK"U鎠Nyd;eTvu:V("=fjQS3Vaj>7f4^h:̠$!M`]s΢z#8оVQ>g~ S@MldJbLo4[vItoz=ЄwE}؞>P"ֽv% ~n]XVJ,De "㻏z_aǸ#_ H6GR}$0aj&!Wzn`CZU.0E 91vJulĦ$[ɦHsQW+r1^8q ̖x塸A:_kpˑDU<)آizz ]ڭ/ɼ(Hm0M@vKvzr%TN08K/«͚Hp#GۀF3?a6b!s(1 װBzyE/ՀVl4G4{eN]Q~UI ߥ#Dt'-/27o8z.쇨/ug_g(S ?#iͻmgZnzik/lf<1byNpT3].r$J[$5R-&\8$?V:D^;/ Ԑ:q]eԁ _حHRƉ52D%/I_Ҫ}FSW (>%!FҚֵiRõ9@i<=y7ު|@#@6J!-.o;tΉ"q50  h!qx # tķl k:jJP} ';ꝟ_9WHg.Fk$*הfK( 0ӴHjIyΫ.zZĞ02 ViMgxten(ug~2 ֔ȿ_SKwqpBԆ^ #/z#, 4B1`v@I<+a-VW}h،vvVq@""VO`=煭a__{zmcnؠ!4N /R-Smz}wZnC#&n/U<9E:o" A;rzu\)C\}9Η:V1Ql6_G'nϴMS| *"G7j´ OF]*XjZ+\+vnWs悏%j-1AB $pX邯S%YBrxߣ{]at"/ jTMhU/'F9n]gsT@SKbx.{&|lMUxYu஦"'@a<39$Z෤2VBP \z&R#^ 0D$OGE2aQ \"q:pm򈫐>ZJQ\(6h A]ıS=2zɦ krذ]m| 7(qY$rJpٟ֛%.c;\d^ӖMP#;BY¡Df:MNAfymdDoh6X=11{gx^^Ǭ̂侓vmLg\EEAoCM WBQ^ppwSNX+;n +,u"!18 h ESpfk~%0hl m bBP-xP#ڴoB~UK0r}|Ez}b"hyre+9 KWt{^D!G.Ȼٌ~Xj <\~1Q9n-=|020kzy qӅ=o '䈧K~%pMFUL?n6oũ1^UhtĘ%$ԗf@1 mc;De2G|R,A;A*VFY&\cay1񗧣 =|f .)mu[Y0|\ .:Moʅjb_!ZFkG~DYV` Z 1v&”@^9q 4IP+O֭zLPT?==G 0ʮpm33mL¼HeVQ Z|žT`ZCIj!k'm4 '56f]wr\7P%XYw W }xCDB8?],";AͰ=HSä0,.=jDp:Ja.8ElE#g}!:$H6~MJ%[P`FD"B|> hOM)>n36GX;qE94͢Tzsv ݇\i3I6@l8LÉ@k$Ea>G2j^| h{%FNuyuB1EZX@ipza՝,Jg:!% wsTb2weלqZxeB,z6bZ'TȚALEc%SnYlC0%B@nH_+3o$=s(ؽgj㍥3ԇfI\v!EP,w!EYW>27jVwz*4Ysԍ`k^@1NpM5e!{N"c T5w8_;oƄ] 2P% #E vH[O8D1qu>bn(=U6p U#7쌰)"HZ6MLjvS]wbmO$HٛsLwF)z7B?&i h]8 \1p˯!1CDA]n!p'6(ұD-F岅_v2!\ Q2!%մUz>a4"E0gs=$W<?PbxDR`x( %<6Vy秅L*@QjثЌs/E$ 2H;C9a$D4$A)+[nBFS 8oPrȒ76!y]_|B' +vx$BUC|,&&l`|  D,0U3'v`yk+ygX"[ C:f:F,qgY ڍ/xn=V9Hsfs{b uʳoNGJA]Ro2%"_ -ۑ^֛0nR==i_DWatR زyD.埡H$+Ixk? o\+}lmJȖʜ6Ds3`r3M)ijRpd q5#6;{۔6~*!2XywT?q)6ک|@-qv -3ǖom>? NXЫПx疟JkaXь$Ҵˈ%h`8!EE YZ