package keyboard; # $Id$

use diagnostics;
use strict;

#-######################################################################################
#- misc imports
#-######################################################################################
use common;
use detect_devices;
use run_program;
use log;
use c;


#-######################################################################################
#- Globals
#-######################################################################################
my $KMAP_MAGIC = 0x8B39C07F;

#- a best guess of the keyboard layout, based on the choosen locale
#- beware only the first 5 characters of the locale are used
my %lang2keyboard =
(
  'af'  => 'us_intl',
#-'ar'  => 'ar:80 ar_d:70 ar_azerty:60 ar_azerty_d:50',
  'az'  => 'az:80 tr_q:10 us_intl:5',
  'be'  => 'by:80 ru:50 ru_yawerty:40',
  'bg'  => 'bg_phonetic:60 bg:50',
  'bn'  => 'ben:80 dev:20 us_intl:5',
  'br'  => 'fr:90',
  'bs'  => 'bs:90',
  'ca'  => 'es:89 fr:15',
  'cs'  => 'cz_qwerty:70 cz:50',
  'cy'  => 'uk:90',
  'da'  => 'dk:90',
  'de'  => 'de_nodeadkeys:70 de:50',
'de_AT' => 'de_nodeadkeys:70 de:50',
'de_BE' => 'be:70 de_nodeadkeys:60 de:50',
'de_CH' => 'ch_de:70 ch_fr:25 de_nodeadkeys:20 de:15',
'de_DE' => 'de_nodeadkeys:70 de:50', 
'de_LU' => 'de_nodeadkeys:70 de:50 fr:40 be:35', 
  'el'  => 'gr:90',
  'en'  => 'us:90 us_intl:50',
'en_US' => 'us:90 us_intl:50',
'en_AU' => 'uk:70 us:60 us_intl:50',
'en_CA' => 'qc:60 us:50 uk:40 us_intl:30',
'en_GB' => 'uk:89 us:60 us_intl:50',
'en_IE' => 'uk:89 us:60 us_intl:50',
'en_NZ' => 'uk:70 us:60 us_intl:50',
'en_ZA' => 'us:80 uk:50 us_intl:40',
  'eo'  => 'us_intl:89 dvorak:20',
  'es'  => 'es:85 la:80 us_intl:50',
'es@tr' => 'es:85 la:80 us_intl:50',
'es_AR' => 'la:80 us_intl:50 es:20',
'es_ES' => 'es:90',
'es_MX' => 'la:80 us_intl:50 es:20',
  'et'  => 'ee:90',
  'eu'  => 'es:89 fr:15',
  'fa'  => 'ir:90',
  'fi'  => 'fi:90',
  'fr'  => 'fr:90',
'fr_BE' => 'be:85 fr:5',
'fr_CA' => 'qc:85 fr:5',
'fr_CH' => 'ch_fr:70 ch_de:15 fr:10',
'fr_FR' => 'fr:90',
'fr_LU' => 'fr:70 de_nodeadkeys:50 de:40 be:35', 
  'ga'  => 'uk:90',
  'gd'  => 'uk:90',
  'gl'  => 'es:90',
  'gu'  => 'guj:90',
  'gv'  => 'uk:90',
  'he'  => 'il:89 il_phonetic:10',
  'hi'  => 'dev:90',
  'hr'  => 'hr:80 si:50',
  'hu'  => 'hu:90',
  'hy'  => 'am:80 am_old:10 am_phonetic:5',
  'id'  => 'us:90 us_intl:20',
  'is'  => 'is:90',
  'iu'  => 'iu:90',
  'it'  => 'it:90',
'it_CH' => 'ch_fr:80 ch_de:60 it:50',
'it_IT' => 'it:90',
  'ja'  => 'jp:80 us:50 us_intl:20',
  'ka'  => 'ge_la:80 ge_ru:50',
  'kl'  => 'dk:80 us_intl:30',
  'ko'  => 'kr:80 us:60',
  'kw'  => 'uk:90',
  'lo'  => 'lao:90',
  'lt'  => 'lt:80 lt_new:70 lt_b:60 lt_p:50',
  'lv'  => 'lv:80 lt:40 lt_new:30 lt_b:20 lt_p:10 ee:5',
  'mi'  => 'us_intl:60 uk:20 us:10',
  'mk'  => 'mk:80',
  'ml'  => 'mal:80',
  'mn'  => 'mng:75 ru:20 ru_yawerty:5',
  'mr'  => 'dev:90',
  'ms'  => 'us:90 us_intl:20',
  'mt'  => 'mt:55 mt_us:35 us_intl:10',
  'my'  => 'mm:90',
  'nb'  => 'no:85 dvorak_no:10',
'nl_BE' => 'be:80 nl:10 us_intl:5',
'nl_NL' => 'us_intl:80 nl:15 us:10 uk:5',
  'nn'  => 'no:85 dvorak_no:10',
  'no'  => 'no:85 dvorak_no:10',
  'oc'  => 'fr:90',
  'pa'  => 'gur:90',
  'ph'  => 'us:90 us_intl:20',
  'pl'  => 'pl:80 pl2:60',
  'pp'  => 'br:80 la:20 pt:10 us_intl:30',
'pt_BR' => 'br:80 la:20 pt:10 us_intl:30',
'pt_PT' => 'pt:80',
  'ro'  => 'ro2:80 ro:40 us_intl:10',
  'ru'  => 'ru:85 ru_yawerty:80',
'ru_RU' => 'ru:85 ru_yawerty:80',
'ru_UA' => 'ua:50 ru:40 ru_yawerty:30',
  'sk'  => 'sk_qwerty:80 sk:70',
  'sl'  => 'si:80 hr:50',
  'sp'  => 'sr:80',
'sp_YU' => 'sr:80',
  'sq'  => 'al:80',
  'sr'  => 'yu:80',
'sr_YU' => 'yu:80',
  'sv'  => 'se:85 fi:30 dvorak_se:10',
'sv_FI' => 'fi:85 sv:20',
'sv_SE' => 'se:85 fi:20',
  'ta'  => 'tscii:80 tml:20',
  'tg'  => 'tj:80 ru_yawerty:40',
  'th'  => 'th:90',
  'tr'  => 'tr_q:85 tr_q:30',
  'tt'  => 'ru:50 ru_yawerty:40',
  'uk'  => 'ua:85 ru:50 ru_yawerty:40',
  'uz'  => 'us:80',
  'vi'  => 'vn:80 us:60 us_intl:50',
  'wa'  => 'be:85 fr:5',
'zh_CN' => 'us:60',
'zh_HK' => 'us:60',
'zh_TW' => 'us:60',
);

# USB kbd table
# The numeric values are the bCountryCode field (5th byte)  of HID descriptor
my @usb2keyboard =
(
  qw(SKIP ar_SKIP be ca_SKIP qc cz dk fi fr de gr il hu us_intl it jp),
#- 0x10
  qw(kr la nl no ir pl pt ru sk es se ch_de ch_de ch_de tw_SKIP tr_q),
#- 0x20
  qw(uk us yu tr_f),
#- higher codes not attribued as of 2002-02
);

#- key = extension for Xmodmap file, [0] = description of the keyboard,
#- [1] = name for loadkeys, [2] = name for XKB, [3] = "1" if it is
#- a multigroup layout (eg: one with latin/non-latin letters)
my %keyboards = (
arch() =~ /^sparc/ ? (
 "cz" => [ N_("Czech (QWERTZ)"), "sunt5-cz-us",	    "cz",    0 ],
 "de" => [ N_("German"),         "sunt5-de-latin1", "de",    0 ],
 "dvorak" => [ N_("Dvorak"),     "sundvorak",       "dvorak",0 ],
 "es" => [ N_("Spanish"),        "sunt5-es",        "es",    0 ],
 "fi" => [ N_("Finnish"),        "sunt5-fi-latin1", "fi",    0 ],
 "fr" => [ N_("French"),         "sunt5-fr-latin1", "fr",    0 ],
 "no" => [ N_("Norwegian"),      "sunt4-no-latin1", "no",    0 ],
 "pl" => [ N_("Polish"),         "sun-pl-altgraph", "pl",    0 ],
 "ru" => [ N_("Russian"),        "sunt5-ru",        "ru",    1 ],
# TODO: check the console map
 "se" => [ N_("Swedish"),        "sunt5-fi-latin1", "se",    0 ],
 "uk" => [ N_("UK keyboard"),    "sunt5-uk",        "gb",    0 ],
 "us" => [ N_("US keyboard"),    "sunkeymap",       "us",    0 ],
) : (
 "al" => [ N_("Albanian"),       "al",              "al",    0 ],
 "am_old" => [ N_("Armenian (old)"), "am_old",	    "am(old)", 1 ],
 "am" => [ N_("Armenian (typewriter)"), "am-armscii8", "am",   1 ],
 "am_phonetic" => [ N_("Armenian (phonetic)"), "am_phonetic", "am(phonetic)",1 ],
#-"ar_azerty" => [ N_("Arabic (AZERTY)"),"ar-8859_6","ar(azerty)",1 ],
#-"ar_azerty_d" => [ N_("Arabic (AZERTY, arabic digits)"),"ar-8859_6","ar(azerty_digits)",1 ],
#-"ar" => [ N_("Arabic (QWERTY)"),"ar-8859_6",      "ar",    1 ],
#-"ar_d" => [ N_("Arabic (QWERTY, arabic digits)"),"ar-8859_6","ar(digits)",1 ],
 "az" => [ N_("Azerbaidjani (latin)"), "az",         "az",    0 ],
#"a3" => [ N_("Azerbaidjani (cyrillic)"), "az-koi8k","az(cyrillic)",1 ],
 "be" => [ N_("Belgian"),        "be2-latin1",      "be",    0 ],
 "ben" => [ N_("Bengali"),        "us",              "ben",   1 ],
"bg_phonetic" => [ N_("Bulgarian (phonetic)"), "bg", "bg(phonetic)", 1 ],
 "bg" => [ N_("Bulgarian (BDS)"), "bg",             "bg",    1 ],
 "br" => [ N_("Brazilian (ABNT-2)"), "br-abnt2",     "br",    0 ],
#- Bosnia and Croatia use the same layout, but people are confused if there
#- isn't an antry for their country
 "bs" => [ N_("Bosnian"),	 "croat",           "hr",    0 ],
 "by" => [ N_("Belarusian"),      "by-cp1251",      "by",    1 ],
 "ch_de" => [ N_("Swiss (German layout)"), "sg-latin1", "de_CH", 0 ],
 "ch_fr" => [ N_("Swiss (French layout)"), "fr_CH-latin1", "fr_CH", 0 ],
 "cz" => [ N_("Czech (QWERTZ)"), "cz-latin2",       "cz",    0 ],
 "cz_qwerty" => [ N_("Czech (QWERTY)"), "cz-lat2", "cz_qwerty", 0 ],
 "de" => [ N_("German"),         "de-latin1",       "de",    0 ],
 "de_nodeadkeys" => [ N_("German (no dead keys)"), "de-latin1-nodeadkeys", "de(nodeadkeys)", 0 ],
 "dev" => [ N_("Devanagari"),     "us",              "dev",   0 ],
 "dk" => [ N_("Danish"),         "dk-latin1",       "dk",    0 ],
 "dvorak" => [ N_("Dvorak (US)"), "pc-dvorak-latin1", "dvorak", 0 ],
 "dvorak_no" => [ N_("Dvorak (Norwegian)"), "no-dvorak", "dvorak(no)", 0 ],
 "dvorak_se" => [ N_("Dvorak (Swedish)"), "se-dvorak", "dvorak(se)", 0 ],
 "ee" => [ N_("Estonian"),       "ee-latin9",       "ee",    0 ],
 "es" => [ N_("Spanish"),        "es-latin1",       "es",    0 ],
 "fi" => [ N_("Finnish"),        "fi-latin1",       "fi",    0 ],
 "fr" => [ N_("French"),         "fr-latin1",       "fr",    0 ],
 "ge_ru" => [N_("Georgian (\"Russian\" layout)"), "ge_ru-georgian_academy", "ge_ru",1],
 "ge_la" => [N_("Georgian (\"Latin\" layout)"), "ge_la-georgian_academy", "ge_la",1],
 "gr" => [ N_("Greek"),          "gr-8859_7",       "el",    1 ],
 "guj" => [ N_("Gujarati"),       "us",              "guj",  1 ],
 "gur" => [ N_("Gurmukhi"),       "us",              "gur",  1 ],
 "hu" => [ N_("Hungarian"),      "hu-latin2",       "hu",    0 ],
 "hr" => [ N_("Croatian"),	 "croat",           "hr",    0 ],
 "il" => [ N_("Israeli"),        "il-8859_8",       "il",    1 ],
 "il_phonetic" => [ N_("Israeli (Phonetic)"), "hebrew", "il_phonetic", 1 ],
 "ir" => [ N_("Iranian"),        "ir-isiri_3342",   "ir",    1 ],
 "is" => [ N_("Icelandic"),      "is-latin1",       "is",    0 ],
 "it" => [ N_("Italian"),        "it-latin1",       "it",    0 ],
 "iu" => [ N_("Inuktitut"),      "us",              "iu",    1 ],
 "jp" => [ N_("Japanese 106 keys"), "jp106",        "jp",    1 ],
#There is no XKB korean file yet; but using xmodmap one disables
#�some functioanlity; "us" used for XKB until this is fixed
 "kr" => [ N_("Korean keyboard"), "us",             "us",    1 ],
 "la" => [ N_("Latin American"), "la-latin1",       "la",    0 ],
 "lao" => [ N_("Laotian"),	 "us",	            "lao",   1 ], 
 "lt" => [ N_("Lithuanian AZERTY (old)"), "lt-latin7", "lt_a", 0 ],
#- TODO: write a console kbd map for lt_new
 "lt_new" => [ N_("Lithuanian AZERTY (new)"), "lt-latin7", "lt_std", 0 ],
 "lt_b" => [ N_("Lithuanian \"number row\" QWERTY"), "ltb-latin7", "lt", 1 ],
 "lt_p" => [ N_("Lithuanian \"phonetic\" QWERTY"), "ltp-latin7", "lt_p", 0 ],
 "lv" => [ N_("Latvian"),	 "lv-latin7",       "lv",    0 ],
 "mal" => [ N_("Malayalam"),	 "us",              "ml(mlplusnum)", 1 ],
 "mk" => [ N_("Macedonian"),	 "mk",              "mk",    1 ],
 "mm" => [ N_("Myanmar (Burmese)"), "us",           "mm",    1 ],
 "mng" => [ N_("Mongolian (cyrillic)"), "us",       "mng",   1 ],
 "mt" => [ N_("Maltese (UK)"),   "uk",              "mt",    0 ],
 "mt_us" => [ N_("Maltese (US)"), "us",             "mt_us", 0 ],
 "nl" => [ N_("Dutch"),          "nl-latin1",       "nl",    0 ],
 "no" => [ N_("Norwegian"),      "no-latin1",       "no",    0 ],
 "pl" => [ N_("Polish (qwerty layout)"), "pl",      "pl",    0 ],
 "pl2" => [ N_("Polish (qwertz layout)"), "pl-latin2", "pl2", 0 ],
 "pt" => [ N_("Portuguese"),     "pt-latin1",       "pt",    0 ],
 "qc" => [ N_("Canadian (Quebec)"), "qc-latin1", "ca_enhanced", 0 ],
#- TODO: write a console kbd map for ro2
 "ro2" => [ N_("Romanian (qwertz)"), "ro2",         "ro2",   0 ],
 "ro" => [ N_("Romanian (qwerty)"), "ro",           "ro",    0 ],
 "ru" => [ N_("Russian"),        "ru4",             "ru(winkeys)", 1 ],
 "ru_yawerty" => [ N_("Russian (Yawerty)"), "ru-yawerty", "ru_yawerty", 1 ],
 "se" => [ N_("Swedish"),        "se-latin1",       "se",    0 ],
 "si" => [ N_("Slovenian"),      "slovene",         "si",    0 ],
 "sk" => [ N_("Slovakian (QWERTZ)"), "sk-qwertz",   "sk",    0 ],
 "sk_qwerty" => [ N_("Slovakian (QWERTY)"), "sk-qwerty", "sk_qwerty", 0 ],
# TODO: console map
 "sr" => [ N_("Serbian (cyrillic)"), "sr",          "sr",    0 ],
# no console kbd that I'm aware of
 "tml" => [ N_("Tamil (ISCII-layout)"), "us",       "tml",   1 ],
 "tscii" => [ N_("Tamil (Typewriter-layout)"), "us", "ta(UNI)", 1 ],
 "th" => [ N_("Thai keyboard"),  "th",              "th",    1 ],
# TODO: console map
 "tj" => [ N_("Tajik keyboard"), "ru4",             "tj",    1 ],
 "tr_f" => [ N_("Turkish (traditional \"F\" model)"), "trf", "tr_f", 0 ],
 "tr_q" => [ N_("Turkish (modern \"Q\" model)"), "tr_q-latin5", "tr", 0 ],
#-"tw => [ N_("Chineses bopomofo"), "tw",           "tw",    1 ],
 "ua" => [ N_("Ukrainian"),      "ua",              "ua",    1 ],
 "uk" => [ N_("UK keyboard"),    "uk",              "gb",    0 ],
 "us" => [ N_("US keyboard"),    "us",              "us",    0 ],
 "us_intl" => [ N_("US keyboard (international)"), "us-latin1", "us_intl", 0 ],
 "vn" => [ N_("Vietnamese \"numeric row\" QWERTY"), "vn-tcvn", "vn(toggle)", 0 ], 
 "yu" => [ N_("Yugoslavian (latin)"), "sr",         "yu",    0 ],
),
);

#- list of  possible choices for the key combinations to toggle XKB groups
#- (eg in X86Config file: XkbOptions "grp:toggle")
my %grp_toggles = (
    toggle => N("Right Alt key"),
    shift_toggle => N("Both Shift keys simultaneously"),
    ctrl_shift_toggle => N("Control and Shift keys simultaneously"),
    caps_toggle => N("CapsLock key"),
    ctrl_alt_toggle => N("Ctrl and Alt keys simultaneously"),
    alt_shift_toggle => N("Alt and Shift keys simultaneously"),
    menu_toggle => N("\"Menu\" key"),
    lwin_toggle => N("Left \"Windows\" key"),
    rwin_toggle => N("Right \"Windows\" key"),
);


#-######################################################################################
#- Functions
#-######################################################################################
sub KEYBOARDs { keys %keyboards }
sub KEYBOARD2text { $keyboards{$_[0]} && $keyboards{$_[0]}[0] }
sub keyboards { map { { KEYBOARD => $_ } } keys %keyboards }
sub keyboard2one {
    my ($keyboard, $nb) = @_;
    ref $keyboard or internal_error();
    my $l = $keyboards{$keyboard->{KEYBOARD}} or return;
    $l->[$nb];
}
sub keyboard2text { keyboard2one($_[0], 0) }
sub keyboard2kmap { keyboard2one($_[0], 1) }
sub keyboard2xkb  { keyboard2one($_[0], 2) }

sub grp_toggles {
    my ($keyboard) = @_;
    keyboard2one($keyboard, 3) or return;
    \%grp_toggles;
}

sub group_toggle_choose {
    my ($in, $keyboard) = @_;

    if (my $grp_toggles = keyboard::grp_toggles($keyboard)) {
	my $GRP_TOGGLE = $keyboard->{GRP_TOGGLE} || 'caps_toggle';
	$GRP_TOGGLE = $in->ask_from_listf('', N("Here you can choose the key or key combination that will 
allow switching between the different keyboard layouts
(eg: latin and non latin)"), sub { $grp_toggles->{$_[0]} }, [ sort keys %$grp_toggles ], $GRP_TOGGLE) or return;

        log::l("GRP_TOGGLE: $GRP_TOGGLE");
        $keyboard->{GRP_TOGGLE} = $GRP_TOGGLE;
    } else {
        $keyboard->{GRP_TOGGLE} = '';
    }
    1;
}

sub loadkeys_files {
    my ($err) = @_;
    my $archkbd = arch() =~ /^sparc/ ? "sun" : arch() =~ /i.86/ ? "i386" : arch() =~ /ppc/ ? "mac" : arch();
    my $p = "/usr/lib/kbd/keymaps/$archkbd";
    my $post = ".kmap.gz";
    my %trans = ("cz-latin2" => "cz-lat2");
    my %find_file;
    foreach my $dir (all($p)) {
	$find_file{$dir} = '';
	foreach (all("$p/$dir")) {
	    $find_file{$_} and $err->("file $_ is both in $find_file{$_} and $dir") if $err;
	    $find_file{$_} = "$p/$dir/$_";
	}
    }
    my (@l, %l);
    foreach (values %keyboards) {
	local $_ = $trans{$_->[1]} || $_->[1];
	my $l = $find_file{"$_$post"} || $find_file{first(/(..)/) . $post};
	if ($l) {
	    push @l, $l;
	    foreach (`zgrep include $l | grep "^include"`) {
		/include\s+"(.*)"/ or die "bad line $_";
		@l{grep { -e $_ } ("$p/$1.inc.gz")} = ();
	    }
	} else {
	    $err->("invalid loadkeys keytable $_") if $err;
	}
    }
    uniq(@l, keys %l, grep { -e $_ } map { "$p/$_.inc.gz" } qw(compose euro windowkeys linux-keys-bare));
}

sub unpack_keyboards {
    my ($k) = @_; $k or return;
    [ grep { 
	my $b = $keyboards{$_->[0]};
	$b or log::l("bad keyboard $_->[0] in %keyboard::lang2keyboard");
	$b;
    } map { [ split ':' ] } split ' ', $k ];
}
sub lang2keyboards {
    my @li = sort { $b->[1] <=> $a->[1] } map { @$_ } map {
	#- first try with the 5 first chars of LANG; if it fails then try with
	#- with the 2 first chars of LANG before resorting to default. 
	unpack_keyboards($lang2keyboard{substr($_, 0, 5)}) || unpack_keyboards($lang2keyboard{substr($_, 0, 2)}) || [ [ ($keyboards{$_} ? $_ : "us") => 100 ] ];
    } @_;
    \@li;
}
sub lang2keyboard {
    my ($l) = @_;
    my $kb = lang2keyboards($l)->[0][0];
    { KEYBOARD => $keyboards{$kb} ? $kb : 'us' }; #- handle incorrect keyboard mapping to us.
}

sub from_usb {
    return if $::noauto;
    my ($usb_kbd) = detect_devices::usbKeyboards() or return;
    my $country_code = detect_devices::usbKeyboard2country_code($usb_kbd) or return;
    my $keyboard = $usb2keyboard[$country_code];
    $keyboard !~ /SKIP/ && { KEYBOARD => $keyboard };
}

sub load {
    my ($keymap) = @_;
    return if $::testing;

    my ($magic, @keymaps) = unpack "I i" . c::MAX_NR_KEYMAPS() . "a*", $keymap;
    $keymap = pop @keymaps;

    $magic != $KMAP_MAGIC and die "failed to read kmap magic";

    sysopen(my $F, "/dev/console", 2) or die "failed to open /dev/console: $!";

    my $count = 0;
    foreach (0 .. c::MAX_NR_KEYMAPS() - 1) {
	$keymaps[$_] or next;

	my @keymap = unpack "s" . c::NR_KEYS() . "a*", $keymap;
	$keymap = pop @keymap;

	my $key = -1;
	foreach my $value (@keymap) {
	    $key++;
	    c::KTYP($value) != c::KT_SPEC() or next;
	    ioctl($F, c::KDSKBENT(), pack("CCS", $_, $key, $value)) or die "keymap ioctl failed ($_ $key $value): $!";
	 }
	$count++;
    }
    #- log::l("loaded $count keymap tables");
}

sub keyboard2full_xkb {
    my ($keyboard) = @_;

    my $XkbLayout = keyboard2xkb($keyboard);

    my $XkbModel = 
      arch() =~ /sparc/ ? 'sun' :
	$XkbLayout eq 'jp' ? 'jp106' : 
	$XkbLayout eq 'br' ? 'abnt2' : 'pc105';

    $XkbLayout ? {
	XkbLayout => $XkbLayout, 
	XkbModel => $XkbModel,
	XkbOptions => $keyboard->{GRP_TOGGLE} ? "grp:$keyboard->{GRP_TOGGLE}" : '',
	XkbCompat => $keyboard->{GRP_TOGGLE} ? "group_led" : '',
    } : { XkbDisable => '' };
}

sub xmodmap_file {
    my ($keyboard) = @_;
    my $KEYBOARD = $keyboard->{KEYBOARD};
    my $f = "$ENV{SHARE_PATH}/xmodmap/xmodmap.$KEYBOARD";
    if (! -e $f) {
	eval {
	    require packdrake;
	    my $packer = new packdrake("$ENV{SHARE_PATH}/xmodmap.cz2", quiet => 1);
	    $packer->extract_archive("/tmp", "xmodmap.$KEYBOARD");
	};
	$f = "/tmp/xmodmap.$KEYBOARD";
    }
    -e $f && $f;
}

sub setup {
    my ($keyboard) = @_;

    return if arch() =~ /^sparc/;

    #- Xpmac doesn't map keys quite right
    if (arch() =~ /ppc/ && !$::testing && $ENV{DISPLAY}) {
	log::l("Fixing Mac keyboard");
	run_program::run('xmodmap', "-e",  "keycode 59 = BackSpace");
	run_program::run('xmodmap', "-e",  "keycode 131 = Shift_R");
	run_program::run('xmodmap', "-e",  "add shift = Shift_R");
	return;
    }

    my $kmap = keyboard2kmap($keyboard) or return;

    log::l("loading keymap $kmap");
    if (-e (my $f = "$ENV{SHARE_PATH}/keymaps/$kmap.bkmap")) {
	load(scalar cat_($f));
    } else {
	my $F;
	if (my $pid = open $F, "-|") {
	    local $/ = undef;
	    eval { load(join('', <$F>)) };
	    waitpid $pid, 0;
	} else {
	    eval {
		require packdrake;
		my $packer = new packdrake("$ENV{SHARE_PATH}/keymaps.cz2", quiet => 1);
		$packer->extract_archive(undef, "$kmap.bkmap");
	    };
	    c::_exit(0);
	}
    }
    my $f = xmodmap_file($keyboard);
    eval { run_program::run('xmodmap', $f) } if $f && !$::testing && $ENV{DISPLAY};
}

sub write {
    my ($keyboard) = @_;
    log::l("keyboard::write $keyboard->{KEYBOARD}");

    $keyboard = { %$keyboard };
    delete $keyboard->{unsafe};
    $keyboard->{KEYTABLE} = keyboard2kmap($keyboard);

    setVarsInSh("$::prefix/etc/sysconfig/keyboard", $keyboard);
    run_program::rooted($::prefix, "dumpkeys > /etc/sysconfig/console/default.kmap") or log::l("dumpkeys failed");
    if (arch() =~ /ppc/) {
	my $s = "dev.mac_hid.keyboard_sends_linux_keycodes = 1\n";
	substInFile { 
            $_ = '' if /^\Qdev.mac_hid.keyboard_sends_linux_keycodes/;
            $_ .= $s if eof;
        } "$::prefix/etc/sysctl.conf";
    }
}

sub read {
    my %keyboard = getVarsFromSh("$::prefix/etc/sysconfig/keyboard") or return;
    if (!$keyboard{KEYBOARD}) {
	add2hash(\%keyboard, grep { keyboard2kmap($_) eq $keyboard{KEYTABLE} } keyboards());
    }
    $keyboard{DISABLE_WINDOWS_KEY} = bool2yesno(detect_devices::isLaptop());

    keyboard2text(\%keyboard) ? \%keyboard : {};
}

sub check {
    require lang;
    $^W = 0;

    my $not_ok = 0;
    my $warn = sub {
	print STDERR "$_[0]\n";
    };
    my $err = sub {
	&$warn;
	$not_ok = 1;
    };

    if (my @l = grep { is_empty_array_ref(lang2keyboards($_)) } lang::list()) {
	$warn->("no keyboard for langs " . join(" ", @l));
    }
    foreach my $lang (lang::list()) {
	my $l = lang2keyboards($lang);
	foreach (@$l) {
	    0 <= $_->[1] && $_->[1] <= 100 or $err->("invalid value $_->[1] in $lang2keyboard{$lang} for $lang in \%lang2keyboard keyboard.pm");
	    $keyboards{$_->[0]} or $err->("invalid keyboard $_->[0] in $lang2keyboard{$lang} for $lang in \%lang2keyboard keyboard.pm");
	}
    }
    /SKIP/ || $keyboards{$_} or $err->("invalid keyboard $_ in \@usb2keyboard keyboard.pm") foreach @usb2keyboard;
    $usb2keyboard[0x21] eq 'us' or $err->("\@usb2keyboard is badly modified, 0x21 is not us keyboard");

    my @xkb_groups = map { if_(/grp:(\S+)/, $1) } cat_('/usr/lib/X11/xkb/rules/xfree86.lst');
    $err->("invalid xkb group toggle '$_' in \%grp_toggles") foreach difference2([ keys %grp_toggles ], \@xkb_groups);
    $warn->("unused xkb group toggle '$_'") foreach grep { !/switch/ } difference2(\@xkb_groups, [ keys %grp_toggles ]);

    my @xkb_layouts = (#- (map { (split)[0] } grep { /^! layout/ .. /^\s*$/ } cat_('/usr/lib/X11/xkb/rules/xfree86.lst')),
		       all('/usr/lib/X11/xkb/symbols'),
		       (map { (split)[2] } cat_('/usr/lib/X11/xkb/symbols.dir')));
    $err->("invalid xkb layout $_") foreach difference2([ map { keyboard2xkb($_) } keyboards() ], \@xkb_layouts);

    my @kmaps_available = map { if_(m|.*/(.*)\.bkmap|, $1) } `tar tfj share/keymaps.tar.bz2`;
    my @kmaps_wanted = map { keyboard2kmap($_) } keyboards();
    $err->("missing KEYTABLE $_ (either share/keymaps.tar.bz2 need updating or $_ is bad)") foreach difference2(\@kmaps_wanted, \@kmaps_available);
    $err->("unused KEYTABLE $_ (update share/keymaps.tar.bz2 using share/keymaps_generate)") foreach difference2(\@kmaps_available, \@kmaps_wanted);

    loadkeys_files($err);

    exit($not_ok);
}

1;
}�#����
	]���Nr�"�S�Qfv��mTΝ����	�|�ˡz��nu%��x�V�Rsw���P���k�P���+���.M��D��̋!PK@�-m½���ܖ��.�R���h�+��_�wO�c�����8#?�x~R�?l�j��]�x���l�1EfpOײf��0dF� :
�%l�쁌�����b��#<�� �h�(OL1���=�s>&_&)4m�E`��N��Q@��N���on�1d�=�M��
KJ�\ܼ�X�Z�A��p�(�fT4c��W��u�v�o�T0�y���Q�2h�����֝�̨�!P&q�֧W��/�ZX@�[X��h{��)�,fU�%Vq�6���&�`|Q��G����]#����oU��2P|�"�7ݖ(`��Wμ/�a�ǧ�6�����KFNi�<��W� �RA�^���K����ɛ�w_�Z�M%]ud-���T1�I$�~�	��4hu�H1�@�읧�����<Pƶ~Ǵz?�ᮅ��o�F�9F��YXK�rSʵ���9T`0??�KI2����,��֦�p_���.�;�Pj�a�ɊK�
c~��{�{�W9�����m����}�G�h�S2;H�p�1܄
�r��ڿU8
����!s�r����b���՛�"7�I��!��6]܄����R��� ����~�4�g������b�@QRO���^� Sk������&j�V.S�gI��=H�(����jL�ƚL
w_�����驼�$. �d&�0V�4�����HT��IK	��E���y_�O�9_x ��*n�5�tF[��!��Z�����H����*|�J�zjn00g�-���G�ȹ�jd��Baэ��:=��Z���i�n
��c�*p����M(h���ۖ���e����K�پ���/lh5nԄ�����~=�
����J�����x�W�ѻ��r
o��~F]��б�_�y���J�_��l�=�s��4�O�J���R�~��:���#��w��"!kA�W8�֋�!5�[�(��T�o���Б��0�`������{�/Z_�Ǐ��o�0��G�+�T��ދe�ĺ��6Jf���	6jD�Wu:h�C4Z1<��4,��b�K%&ؚwo۝�7��iQJ��M����/��WE���K���L%S�A0Uܤfю���C�뀢u��UrB��+�<��QF�_����e����:�MvA�Z�,�T��?�
���LO��
=�}��uDm��ߎy@�����{�j1��y���ظ�h�k����TuQ,�Q*35�bW�ά��N?�	S�_9�hZ��[�N�lJ�
�$RH�R,
����cu%TC�k+o���I�G�]�u�Q��M���RL5��y�X7ѵ|�wnV쐔:��?/�3U����m�2B�{)�k�_����m��w-�3�S�H�h��q�;>D� �S��$�ڸ��a^G�t`�K�^��:&��r�Ҵ��5�
��B�E�m��g�#^ M��SЖ:���,�صy��84`R c�w�N���dк[&�G�įOR��6�-Wd��eۗj�&�Yق�$]_�1���Q�‚�/O�T
s��XCn\&@cȣʩ�!qR�7�K��C-	����x>��t<�Gz)�u�������*Ƥ뼞yW��ч)�F�>���oP�SO�������z&$�RB�ζe�>��0����!��H|���%�<-��*�s9�;'s�'�!�)o\b?.d<I�M�o��0�ܫh
T�$N���y���;�J4��d����7�r�[P�@�����{	�a��%@���V�O�l�>�3�X?g�7�d�=���r����j�\X���푇�="K�&W�,�y/�Oa�Z��W�(\`אY4�}Δ\�,�[k�\�ޗo����d�\�o��]��W'����/М�)\��UJ�E!����*������d�4Wˠ�o�J����T���!N�tU����Mrw�&)�������v�xpʣ��
�*Z�7��U4<Q�;������j���S��r����������-��/A٩�R�7�$�"��U�&��&1=��?E��|a�aR41hy4�gB����y�R(*��@�޲���Rz�8y7sMɖ>��ߙ`�i}�����w��}k��N�I7��%�P�D�q�L_Z%!{�I�$�J0��ɢ#�֫���C)yV��9�ُF�\F �&�a���Ի���b{a��]�''��}�p���ʵ�1_���x���C�/w�aa`�r��Sxoi*��?Y�6m����|S�>��Oo�8�'��I.�V���3J~2\R�oTW�[ɻ��	������ֈ�B��������4�~;̕�Ł��(=OU�N���d�$9��3Yk*,r�k��ܧ�����SLj�סAD����L}��WD�����+V^K�_U3 �^J�'���]ª9%J�����Ӛ�4��(N�,��}T����J�����-��&gd�J�2��x�$ɒ�6�~�U'dU�P��J6�#�e$$�z�-?��@p�}d��$xR�&I�HB4-���,6o� =����o;MۻM���K/�㞤UI���AC;�O��juȷ��F�����q���G�Dj~%����?<���{pӛ����wj�,�Tu�1P��
��Ð��R<$�^��(Q��L���P��g�����g���;�OQx�T��5����2�ȭZeK	�[OY�(�1�8��~W�<���9���s��,�<�"�)�v5����_��纓Z�[u3,0�ca|aCn��Op{�"q�����X��,=�ń�Z�dH���MP��bY�WlX�E4Ш�χ��L�_x���D� <,����_��٪:�§6���.G
T&T���^kT°��ԁ��y�1��=b��=�ևr�����e���f�"`ҽ���k�-�I��ўf���+�}\���<1i�!^l�������B�/�rt�$�����K����]�Ѱ��W���Z�����6\�OX
,�t��g��
I���?@���/�u"�.����E���T�?W)���a�A�T��NAb�Z�'��@�	y��A������?�¬��x�2_��ghh̲�K<!�2�-�1f���$�nO�:Սt���w�_)�	�(��H��L�y֑Cd��L6�� ���:������N���������|�YXF9y�7�k��](v$Q����a���}�X8TV9&��i�ꖄ�	 �9��Β�ݿ���v���`��c��#6���Bk�!S�+[ß���^Ao�L�y��
5'2ԷDa�<H�G$q�����m���z�9�2��<���q_�hd�S�K]�[�\g�\&�4*� ;%���K+R۹K�z��$_�w��.t�����/$1�=���_�"s����O$��Y�Z�M"ţ�{
�2l!��-��,����p�lI����������d\ٚl)��0��/�a��.nTs!Π8�矘:w~�rprzp�_|~J���/�\���g�}}J���2ؘY 䎯�cb�T?�&�N�\N�ON���Y684iL�2z�5���Lc�S����#~?��U�M��p�������^��33&�T�딿Ir��zEL=��ykw�S]����{��;:!��G}׭��.R}�(����-@�k3^rnY�����	�y�z�z��!�Z�%	�<��k��5�n��+;,İ"�d��dI��U-�?``��d���b�"����
��7� ��=�=�����P�Gs��z���_����O�蔬O�� j6
k�S����:��(#����1��`�x#��y�i6`g^g��������{R��(�|)=�՟f_HW���"�UW}c��+�n�b�h�_L%�c�:w	ŔhQ��ŋ��mtg:�a��yq�A6[N���X�MzE�nS�
L{��ALr,�n­�1�p�':����	�hyH�m㐿	-�4[
 ����eA�<��*�[X!5��|ʳ.�C�?3[�Fģ�
�[�r�i��y'���{����ݱ��	�T�Q0!�>��x��[��;�p������^ε�>�]A�w�4.�bY�W�#ӻn*'�;�ߑ]��`���2*�x��� Ȍ�C	.��K�I`.��9�R�k'��}�����������¶�рVY��#�k),���;Ye͢ H�_��!s��I��(|�`�`� �o��f�+k��ɰ�������m����H��Yv��Q��h˫�zʼn���F�7M�w��F$	΁����/��'���(��"t�
����
���PR����,�_I)c��@J)5�Bp�����ћ����f�GY�b����ڃ�.����Qȇ*rz��׀up&mü�֑wu
�	���{
��'��x�}����e���������I���l��ƺ�5���2G=T�M�i�Łl3O}�Q��c.;:��Z��
<o,��D����;�@�4B�E�ۻ�5k��jm��R�_�+>T]�.p�[JR��~z�w�Q���0<	�pY�JY���է{U��F��HM�5��|eJ�s2�Kc�Ӧ"�ʾ
��ʕ��9Z[sT̶�`�e���"z��D�V+�Jr���,'�U�H���X��������5B~S�׬q��r����$��y����+&�����S���R��/�q�@��r}�̆��
o��4B���
|�$���`�@�ѐg��W��d*�	l�!Zظ����3�X���Y���D=���J��C��� �(�9i��ۏ7�d%{��:6�r�l�NijY���&�r�5��?3+�9Ɂ��S۴�-Ɋ��q'^�Ѻ���2��MC�
����{�!IvNW�l�p�G�Vd斂�h�Y]L�L��G]8�q{�b
��k�XuƊ4����<�-7^�:pgy˼QX�ǂ3Zv�

G��xL.�At��1 2�=�Pӫ�Y����;5,tw5IA��gR�{߶��H�CS�꣬F��C���%�����e���BZ�;2i����[�V�E��%hc��Y��B?i~���gr�o"�l���"��M�;�4��?�/��?�_ߪ����ϛ��[ߋ3�d)U0*��ߣ�)%UMj�YK<�'>#��x�����`L���R��88Ξ�����ybt�x�',��9o:yY����X�G"d��3\#�{/ex&��؏G�.��}*���4��oq����%�+������A�3�$X�u���U�X=�
��y��&���:�U�ռ���)yӰ	nX��Cõʉ,��7�H���P���l$v��~�K�񅻋�zcFAS7�"��'b+6��!@�XAY�it^eVL��o$U7�n�@�T�t��-LL�x�s~�	���&H�7H2ٕ9%����&^�ȍl�7�z�K������t!��������$t�W3EK�f,.�Ԣ�"j�ٺ\������ɺ�83T�����Kv�	L
�+-�f�w��M��q�a_�n�i5����ĺ�}��z2�!~%��
��!�2�{��nL�/��CŔAL����VẠj��qgO3�H�V,T��� kh�Yy������^�k���[����;'�Q���6[9qe:�m���.����N�X��]��~�J\��1k�4�XEذ��
����nЋ$cS����J�G1G��G�Kp��f�GL�Y�����x�$a0�e���B3�'x��~��V��rF}=��5�z0��\=;
G˻��O�S�ȋ߉J�ҵ�o-����M�>��~���rLq�A@�m��'i��g�9SS�w�D
՗6U�|�#"�6>“ 	�Pn��k)����j{h>����fإa����J^`�|$s�;�Ɖ�m.B�q��O]�\��P�l���(�]�Ũ�R�t
�2���>L�W}��y3h�\���y�KK�M`xt�N��k��1��?��Uk@!*�:ɺ?Y����W�bv؂k�1�>�&�x�-�U0�M���D-�h�Ѽ�P���mһ[��t�*�A�z��`�����R���#O�^�y�R۹s�8H��ϒ�4��rL��>`*Ӟl�V��Ƙ9KE�6���_r��MA�_�4M�c����-�@��lqTE5�x`&@N�һ�=��E�X�,
�?���"��x�}�`(�L���4�
�0Dëhns����{�5Z���B(�\`l$��������Kg�I���~+
�(cأhڒ��jO���Us�d�j}s<V*b��3g��O�e>S:�P�}�
Ǡ���ӥ�"�ϔ˅���O���MR�C�]��"X��Z�'x"0�Ѓ���"ʑ�Dѕm���t�~25���I7�J�����{
u{��we{^�SY�8F�Gȯf�zj�����~G�:Н&Ov�Zw�;g�B��O0��������j(Ot��E��X�Q��%#&X���y!a�b�_��V�/s�0�g������C���ÿ@�f^!e���wV&�2��.I������e�6�:�;���',$y�ߗ�B�k?�j#�kTp����wi���~S�]#�2vx=�	��VbFr����zkv3Mxjq�^���P�AS����p�A��~b���q%;�Z��YA�+ *�*�Tsh�V�H���/#��ɨN{\>0/�L��1(�}2Կ@jp
�h̖�MW�v��92�54$�ډ��6�j�,���]=���PyS�i���FB���
��N
�+Gkk��Rr�Ӏ� ��@+|s�JX���e��Ղ�-�a�#�����2}�u���ŗ�>�ķ?�RYD��gI8�4�%eۓ6!D��k��Q��}�,�s��+�Qw��(!��|�+O�e ]���G qO��c �m@�Kٿ���d�D�7B���u��zdd{��Lc�P����@3;����b�G4Z9�cK�ꁶ�zs4��b�S`�oMm%�=Kw��dt��p|M���O�g��+�䆳j��P���'_�����K���Q���MNGaF������^���
BѫD��^�i�o'�$��j��U	yL�c���"uv�^��@��}[���F,\�Ѳit@�=6��s�ߌ6�̢�B�����L%�3����l1�>ltZ�h+��1$�GÇnB���_@���+�J�:;E�B(��\.x�����.�"'�"�:H�|��+;�,��X�ŗK�v��Ѻ��|�_X��W�f���*�n��#Sӄ�>�"|�P�&t�T��RX�k�E* ������WiAI����L�4^	��X��ѽH�4��T��?���'����r�T�hŦN��LlJ�YB�r��j��̦��n�q"��8�Ϊ��0���r�� ��GS{)�/���m�=�M��7W'҅�
$A��S��$$
�ia>	�_f<s|G7Ҹ��<	�cQ���3����)T�D�hB^�Љ_3D���m!�y�P�U������]�Od�龨�ۻb��'w����@��.ok���
���*��d���x�ȻQ�B�;
�����ߚ��h��ȑ2�s�\W����ՙ����g@e��d�����*�wL�A�Z�����F�O��&Z��N��jۚ���SU�0(U���xJ���=��d���N]�9�>���[
R6�ok��򰙹Ւ[�BrF�%��в�E�O�fW�A�D��*�ȅ��1�Y-���7����C�:�9�q[k(><��-`YI�#%{s�!��x�m_���Ƞ���rOEo���Ht��D �75��։��v�(}[�>��p���Ŗ�֠��s����v+	f���T�g�86�`�3����Db���g��1�Z�#�
_E}Bq�2@���+��h�rʺ'uX$ �8L���ý�OT����^�tj9	C����HV�����qI#�����K�2tr����G-��ܒ��"<(e�
��"{.��c6�dШ�$����<�[��KuR��@�����M�������+���|����I���벀.�����eP�T��
�<X�t���a^�ꐳZ��v�?�J�\ٮ��AD���B�~��r70�{�;���j�zQ�*���*�7[a5EW!�&��%7oO�ز��̹c���9z)�2�c�v�e}��(�M��'?�'6O9rLt�=!��b�zZTl�]���ܚ����d �O�z��;�^r5?|������U�s��O��P���r�K�!ϊx�.1$�Ɩ���1<�M�l���fh���M�
��	t}lj�����~&����=ܸ���ڲQ(u2�j�7wb^���f�z�<�i��۱���.��N%�g��td|��]��g���>�+,``��S�.T�����9��+YDp���ت�Tx���g��4���
�DE�R+���a �eSڏK�Ü��Ԓ���m���k"!\��c~=Jɣ)�Ī���,��ݳ��\1�%A�����A�m�؏Q�-F
��|��3ّ����&���;O�QjK8E�D�jP��}>�&f����qg�J7<�&�Oޔ7�8�{����Na��I1]n���4wm=]��#�WO7|�6���i}OӦJ�Q'��^8^t^���}9�!��:�����d�����
�#���N�����v[Kĥ�iq�$,m��eP��Q��.Ԭ��,��"-����~���gZwٸ����H Tl�t҃��.6�%���|��x�ID�s�p��?�|��,����1@�d��l"c6���囐�'�8q���ʌԡ4юX��\q�ƒ�& ����U�Zs����X[�@�á9��=N�ʲ��t��Bt@R�aDF���D�4��7F�n3�U��X��x�:�
����d@�$Q �	�tU����`�������}�<��$�=�ri*�ʺ��+�r��^�É��}��azBv��1�)��.�邢C��++H97�gn�N5+�k�@��ӫ�>4�`>�����~��~��G/Q��5���7Dݑ!#���ۺhgE�~+_��������j�6G�oxx>��U���W��zqO�����/aq���5��fR�>��G�9q���f�ׄq�ޫ�bp�#N�FT7l�,2{�4�� ��	k^xtA�V
��M��)$�W���I��(�`�A�H+x�O�^u��~<� �W����;f�,�o?�5e��]�#��ֈ�ԧ��)�Ǝ݊#��O��(5i{Q��	�A�1bK;�h��(v��y�[EzQkm�![�����^
���:�tJ��zE����j "�%n֯F���{�Ѻ�ZV]Y�,띑	{m�q�d	��C�9=�2y�E/�y<��w���"f`�t��W��e�7�����~��OG��m$`G�G�]͐8hMl[������֔:�"��$���F���0ؘ���Y��_�s��-�1�>�lft�{�h�h��m=��%�C*J��l5�Dzԛx\�+�ss#�!�܃���8��
���CD��	�x��`�Q_]�V�\�S�ڤ\yñ��1��Nt�5��t<�.L�:����$ډ^N�,�=�4
u�^���q���n���+�Bj8CDM�򗢗�%-�a`P>���˺�Y���ʽ�I�EL������	lh�P֬�?v�Eww^�+&�'UlI_O���Ǩw�@�k�Ip�?\�`���ĺ��*r���~;�oQ�O�K2��e��S;�r{��ܩz��i���7��l��L���y���o��R�%��n�[O�ݿ? @#׈=���ڀ���9W��O��y��'UR�D~W�*@���"�	y�PϯG1�2Z�T�6�M�W6�`K)�t�s�h8�V���ZHKO'�/�n@�^����?���Ka.W�?��}x��wt��:ߏ��;8���ydq�&�
E�i(�G�	j�A�|O�|��,P��Ԕ42G����;��y}������E[��!�P��o�kŅR�^�e������;�c��$�1���G����,jU���7)+���J��P��"X2#x?�E������0;G5zj���\W��77Ƕ��N񁺕�P���(rh2��,�E*n/�$r��#O$��?�+m�,��PgЋ�6#����WU��V�;8��������j��N&��i\]�u۬i����s����f��pw�������^��
��R"	 ��n�6�0��h|�8O(
�]�$`�jj�d,����w�9��+�I�~��U/� ���<Xd�6��}:��OjcF��n8�*�5
�������S���w�@,�Vq0�;(�t%�ܜ�
'E��D���# A��~�F��V-�	
D�������)k��/e^)�u�L��Kkq�}Z�\�xY�rퟬ�:_�Z�J?:2J���Qn	� ��ɳ����kXOἥ�?4ֱ����N��o��Q+�P`S�%JpV��Gx��>4��o�����]y�lV��uƖ���*C�R{w?҅YdG3m����ƃ��Qhh9��z����FF�ս�6��q�DM�]
׼t�U/8�`z�T<�Y*��z���ݠ�+B]˲��D�t�NsKz]���U��q;H4����s2�”��C�����bR�A�$��r-�?*�KP�Y@�m�G��a��`�Q.�����C�����+��o�^F�L��X��AA���
D�[|~z���)��즵��@�D��a~<ǎ������'�@��N�l �NP_<�ҥ?�1�B<��I��nh�5m�)�eC�E'���������j�6�.߇��@��F�c��J�)�����zY�,�L�G�c��l=~�'ݼu���7���Φ��b����.��؁ ZE��������
M�B���Ra��t)8s�N�����U��,S����r%��s!���n��~���؟�9K����z�g|��{�S��S���[�G����3<(��\g���NB��#��󭔙4K¾H����\x��]��^&l�L�42��4�4����5�b�����b�2�t�#�{���㋒���7Ap���s�+�K��f��E���
+�Vin[ܷr�ß�����e��FWӆ�y�S%�}��^�uQZ
�Oտ��V��������*i�Y�e�;���Xж�¥=DO‰&��$��>�d��w�O<������b�mH��ث!��>6 ��?�ۗA-�i�Hv$$�H1�x4SP[���&�m)��m=SW+�"�v�UQ/Һ���`̩�7m�N��(�yӎ5�&��t����^��"�;G�ơJ}�ꢤT��O�\�Y�ݞY�DN6�`�[U)'W�P����ǻn�ƈot�J���@���~l��;�"����JU����$��b$A��׊�u�h(/\����hQ��x�9�
���]�GYMM)��sn2�{�p,v�foc��v�+����[����k�bri3
D*+��0hdqȑ�搹0�n�+��U�͌2)��hi��:L�46������q)��%xh��'P�ٜ�A�}ב8m��b�p}�Qi��Eۥ|�e�螽����Ǯ��_b•>��YV50�x�����-um��m���r{;sGh�M����Ù��P�+1UM���wa�X"�۶���<��6���F���K����&��'�#�k�r|��A��-�
�Ѕ\���쒾�����j��+�b�+y��/ϛ,.��v�;�$�dA�/�h�u��������Ǖ�d�IV��`6A�6��
[I�
E�u�Ho�~����D�w:$�St�v����\�NU���]R?@��s>���F���T�m��"RkUy�~�e�9{]�+�c3%h�`��`�%mtz�_��&W�g#e[Q��P���jD!)�9)]������]���jÅ1��0aU!i5�h!φQPPi�����s�zr��wQ= ������Nr
�>��zO6����k�-�
�`}=0�y�*��N�"��y˥+I�@A�pb��i�U)(z����c�_���n�sD���s_Z����<D8�}�RV�9$�Id���%�$)O�I����H��η�u0����'<����ԧc�0�j!�8[8���?��}#���b(	j��ʀVv����V>6�����Hn��)�Z�xN�_U��4�(5MZ���Z�����i2γe�w��d��"�m!��\�Z�ˊ����N��K�8.J
��e� %۸��qR 1(qES.���h$oݨ��V(F���"�u�����8�1�.eJn���g���?����-�x7(�c���/&�)/s�i�v=b�>E͹�Ş#�d@�W�)��ȏ��1-r��X���=`�KDMsn�7c9|(�>	����u�':UC3�����
Ǐ��#�o�Iq�:�NcK?�l���yc��hS)nY��t�B]�~Ht��S
ڝ~IW��u
B�#-��N: ��t��L&�!9T'�6��
�߷�w���R	�>V��E'���i痒�W
�������� �i\Z�v�J5�I�qx�e� ���؊�5���ʞ�B�V�
�4Ӡ煵���s~��/��@�w]J����o�~��F�]Wf�Y����j)_sW0�I��v�2H��8%vq�)kz�a�H]W�UN�F�Ǭ��>2�a��̺R����G_�*F�O� D�)ɶ���=H{Q
ǚ��\sx���0R��0�>�"|�zNC�ό�bB?�Z��#�^���q9���P�Q>{ y���Q�j��j����o�o�S��Sz;qWsd,9����6�o��*`b�0���~ډ@R杄�O�F�繨TK‘���wf􆘅�#�c�p�W�QW�q��A4��pP{��/�=J�'�b�1�'�(��gi������o+z�#�
�v���E��θ�y��r̎����u�t��`�Ü�ʽ�DxpR�oGu�d|��qehj$��:nӥ��cu�hjD������V��M�
w?�C�h"b-�w�["����L�O��[8�ZԴ�*�ˢ�OꡪdE��k�{�=K_�x,O���r���q=�6|�~�P��(�p���
,�\�h7��Kמ������3�\��܍�-T[-��5dnJE��co�OFr�s��iU0/���������Cw��؀����Muu�[	(�-&П���+3Xg�e��6�HdG�$�E*���׎>�͋K8���K����;�"�<��$z��g	Zjy����QE��HS&<C��j 0�ro���Y?��$$�uK���R�L�w��\�	�w<����GĽ�Y���l�'���G{�f�2����{%%�TAj��P�@�Y
- ��O��8�
Eu0�O���ε��,�񈍘ctx�:�D�:X�h[:]h�}���2;j���<	;[(��6��(-�K�XE�:}`�K@�F�.��w;������K�Q�2�d>|O�l?�/�[�&]��L1���<�+�E<�a?��*,j�k{�H�XlB�U;U��UD	��	������
�?㍰_Th���u9RZ 
�!Ѱf׽S�p�c�xw���ž.-�4��?���Gw�%����D^�y�ߍ��ra�rD�+W��k'��{Ϥ�(��mI�䥞����51S�ޢ�-V�ɩ|�n��0�L�Җ�Ӎ���.}��3-��L����O'�8�1Y�P�@����T�?�|���$���y�L�4�R��*�4~@R��	���C}o�C9q;0��Q��TN3���GcZ����.5>�VZ"{`��r��eO�)S����zI���
t��v4������߹��]Ep3�,�Ќ�2u?��ws6��Q+9H�-�Y	�DX��V@y��	9�ߪ�g���L�N˦�_��a����1}��F�f�&
q��}�����B�2������b��`��Y�DPG>-M��QFp�~��/����"u{��tBk>�A��m;�n�y��T������_���O�`�F?�2��3���e����r�(�t��[O�=�cY+�aP+̲�G0S.Mw1��s�b��Ux�6����T�T��R��BS��n�zk�J��|����3H���*wݩq؊}�m|1�	�a�&T�Z<-�:�@��YE����\fȋ�B+-!�s�O*�FU`�8�YJ��J��ǭ�A���L�/��o���&�������+F�%�!w�5ƒY�Vjw�����Nkl<��*r�[V�~�s��x�<�UX?6h!^�4�|5~�XMhP��7W'
�q&d���0ZE�h�ur��"W�F��n!���0,�I�(G%������v[�*��sr,g�S�ܴ=��E0�)�ΆQ� ��U	�Ü{ə�齣=��.f�j�#�b���|(HWzw�kD�T]��_U�����궩{@"-�W�le�$�X��j�R)�nO[��l&
�c�Rf7J��l�Ώ�N'� �,QL�m��Z��L�.H�z��`�����̃�����x�
��#�
J�bgAϩ���s�\-<Y�=R���Xm�T�F��(~��pC�𩗩�9ּ��V�K����>�6?.��ӡP0a<��7�`P�*���盿��Urx&�,�P��5��t�%��
;�,^z)������80q�Y<-�]�^;4�Օ!�x��2��f��6{��N^^ވ�%C;����v��`�����k���"�;�-����e�K:����NԶ���$$ �K�!�#���J��VR��>�UĀ�(yr�a�;�<�]��d��E���}����Ά
�d́Me��O�A���*�G"W��):�K|	�,���ȹt�\3~CM����Y���2��w/��$�H�IsOg�IY�L>�l�\)Y&7[|�Sβo����u���
�\� D��R��.�$�
���P��/@V��:,{����f�t��T��	8<�I�ο�1�BIh�ь�m�[N�i2�1GJa~�YԐ����7��n��d|��
fD�X+A�8��<$�c��snJK$��*�/oi���BV��ts�l�@��P��i��W����A�e9`�]���Q7?��,A֟����<vj�<d�,�ɫ��m�U%�6�cB�#V_S�g�\�5���b�H�<�k�<���#�_?��$|ܬ�f�c��	�TI^2�\m��Z���`-8v?�
���<E���b(r�]
����8s��Q<R�����F��������M��<�~�X!���*�Q��ȀҊGj��*}0��)k.Й\��[�`��`�����:��#�jFf��d�G�SW��<���B�{��х�5݂��(5����X��C?�G���ւ��2"���D��vS��Gv9�x*m��~��������/�#H����g�QLg7�O�L�\�̂�&Uέ��K
��b�Ã������vչ/3!L�l�вx�
�HTY�z0�k��Yꂡ����S�yM�E�}jSL�ﯺa��2�$��ё��_��(ڂ�7ո{6��7�JV}��g�D���+E�JU��M���hf�%�
ɘ��.�7�	:�C�2�m(t��l�NFY�>=(<�[1��+ZT�
�^04��d��j���w�z����)Tˋ�'vrJiߗ�M�
̚(R��N�-B��-<>�"X!��Zn{Ϡ{�.�iy��-�h��^N���ΏzFR�u�@,J&���<j��}Vm�Ј"�m����'��Oe�� 3.\P���b���VJ��Ƣc�'A����ΑF�HU���F���"鼍o5G
�k�|�/�a�a�������H{6�
��N��r|S�',�w�
7�J�F%ȂO�g�/	h!H�3C�{Q��U<�	�Cļ�CL��gp��EnK�=/z�O'�n;ѐ�I�r�׫˘��eh��B���'c/�/��;.�B�1�)��"���mj�mK�����;�-�?�}�����7�6��&��)�?�Z�J>�`���Z�F
�Njf�"r�T�od3T�񢝽*�iR��_+��TE)H��(0��2UQ9�!7��2��v��1����
����R���򪽙U�|�#'p�Yg�	�n��Q�غh��<��3���\���[�,	g#��_>2i=��s��/���N��$�h�[Y�z2�i���f1o��ܛ!��M��[�A;W�G^����u��~���u���~^�%tަ�"�G~���U5�������I�H8Cz���L<���%��R61뻦�X�Y��Q�����YlpI��z�^>�3��
@H���1
q�W��&s]a����}���)�����A#w�y�I-hL{�{.�qf����ĺ�d%B6�]r�*w}
����A���	��q�I-o`�����p�@�<眒*�"����&mc���n����}�S;�mE�{�S���>��Ժ��m6����
��bH$��*���Z�|�P����6�%Cxj�ٻ��;���dٻ�.s��is�8í����:��n2���[�)J������g��v�hkq�]2��h���NZ�!fs�D掕�7Ҋ�9c�,�tX2�e�?�O��P+i�;�U�kY��w��L�9���Xj{�Nk>?L��kI���J)��+�
�>z��o��j�Ўd���e#�������8SC���L��4l��!�ކml�����\��;d"8�:��'8�گz����^��Z,{�A���j�~�N�S��D�������;�g�<ɾ��� >�'��iP.�S3��[o���-�m�'�}��XC��;FѦK���W0/Q�_�!h�!�dCr�<�o'[C����OB��A�"�F�&����������3�ٍ	,؛ͷ���!i�`�Ϳ�8�Њ�_0Kڶ���:��/o��!ü:ƯS��84b��d��3�k3����H����A����Uob�T-h�#x@)#tf =�"HK�Y��6��p��xv���i�Pe�@��&�E|(]�`�&���<͘��IPvd�|��������Z(��3���)ˡ,�x:f+�8V�F��7�7�{z�ls��r�c
">���ß8\��ʿ�9��x��i�i�x�udu�.aTP��_����Mw�Ŭ_�����,U˻k��ύ"� �>�X��wÿ�-!W�����b�sQb��WYz���,K�];6j�u
rp��`Kd�jz�^È�~�n�*m$�-Qt{�쪃"���p@��QC�E��޸lz&%���n�zӠi��ֻ�j���D|s���
�/�R">0��T�h	^��F�'.r���ƈ(k���(�垇q�wx�*
@1׬�I�}b���L��i��o*�����ޘ�d�k�y�~�%
���[)숙J(��G�k����dN(�<s)���4eWU��]��V��,&��Nel���g��ʔn�]�s<�
��'��&�pbH�(����D"��MM@L
�2��!��7M��rn�J1
�j�/��"�i��^ީv]e4���X2�v���[d�^/�q3ǵ1u�N<��:kn=vQ]���kܰ�2����#y/&�X�
C���O��5��'%���r}�uu%^��f8�s^�.@I2�&�ٜ����5��<��k��M��L��/"�	]�-�R!,�ɂ
�
 �eL����������zO�Ov�(�no�Ƃh*�A�͊mK�@�X
w��܅/���o�K8�Br+��Y�&e���?�k�_u]����9�19,�60���C�I0��B���*���X�l�?�a���u��،1ڶ�E7�#g�Y�k�9�TB�����8X�x�l6Y�'��0��}��q�>}�KA���7�?9��+P�=��.�JV��!2�r�n#��y�/B"x1+����ݍ6���G<������B�<�_r/7��C��F�+_@�YEre��X ������?��[B�u,���ؘ��R�d�GŦxc2���j�pܗ�$g�j2��>'����9��x�\6�����G���u<8
C;~5�����w�0[ m�n���To�f���>�}�9�<�t���gd4p�d�-F���P��G����4�UD����?�͡�SB�xq��H
4C3D�4��9e���y�q���	�*D���\��7�8�������k��ś1���̠�8
bD��wƍ�<q�'���d�6�������� ��k��ADu?�Q������/������(���|l2u$G�Y��Ò��-$R�,��_|o߬Ȋ�B4�1��8�xڰ�1*��o������d���_f�}�o�A�[�۹��!]��g׻�F������>�J/S�L�*6I��]��6�z�p��}�EJ*\�$\(�
���)���YDž��\P�sS��S�e�MN�d�F%l�-@�!�͒iU�k����ɚJzۆ�zƂR6a�׍����k�uhvw/�ȟn�2��UfIRS��y��A5���e>�V�M��?8����&UU�m?�����0���7�w��S���F��,t�4Ƕ���f��O�}�sGY��yY���K�>�;�;��qB����
�rg���T�PK�z����ut�՟d��7�R�ΐS:��N�,~|�j�d������D��]r�ĢR�&������'�Z8�R��
;`������������V� ��J��P�M�����*�Щ+=�y��F���
��.���-�Q�
��T�n4PxJ-�r�����[:�V��ש��<G�(��=����A�y#n�Ǜ�%�%{Q�n��l�2d�<�:���4���D>��nf���52DM���ȫ퍍Aw��x��)���KU�Q�
B0�d���"j3�E�Z�€�ntp�x�����KXp���+��㔢,�Gv"�5�3�K�x��ߙ͔����1�D-�S�y�}�`m�/�P�0F�!�z��+�5��;}��7IjEϯ߲^@���������Z*��9	��I�H�O����VC#H�b���gb�������R�7��)�Fj?�3���d�܁0��c�R��fa
��^�,�8",>�h�w���*7�V�MD[��Ϣ��gΧPp�䶗��%B�‘��T>� �a�Gz�X�����ۭ��p+sU�u��x7�e%eQ6�0�ؾ�i�>��oP3���3�����:$�K��5Sk���ԃy�<l�N���_��c�+Nq�p��*��k�P�W�:ڜ56F��9�¨�d��6᭺�"�z`�k9��I��w�bc�f�n̔�=ٞ�<��X;8S�Y����:�	[�PGq4y8UL<i���v<hߘ��[�q;�HX���VGy�'�t�F&�ՎY�l�?���|D�X��s��cD�s��t�a�W���]o=�.m��ӃT��aT�1�՜��f0�J���'�ej��m��n�GV�:% `�
�XQ�~�YL����D������=o�K��,i� ]�Pt�N��+D�yu#�x�[��������4���k���d�	*VqVL�q�դ�A=W��=�-D�T�W(�=#�=����q����=}'���O�3#��G���Kl��ڛ�*���i�%�Ks��$�����z��{	d�o�Ҟ��c�\}H�gX`	��1�)��9��L�6̧�B�v9^m�&i[tӣ\Ȼ�ٟ谰�|�������(g@�r:3��ć�lҰ~M6�2i���Jlj�����#����7<Kl$RX� �)S��]���Iw#��`Ȋ�:Q���B	}B��J:�Mן�lJB���|���l>;ct�kSyǿ��9�~�	��w�o�M��f2$Z�%
�ק&�p��S����$CXK"`b�/�Ǿ�p�b�&��bhc�+<-���P<�/��?�G��0lJ�?�c��d�R���%1|�����A?��¯�Ai@1B(1A.�@,*��B��c?e	����)�LT�#�c��
�?�������@��%&�xDH�Nj�Q'R�~O���j��o��V��N������Ph@�)�%�cP������[����A����lҸX�:�ј���V��'�M�d؄���{��9KD��J��W^���'�1!�@�0�F�Nob����+b�͆/E	)���0�h� -㒉錽(�S��*%��������k�����0e��JyUN�S	~K��l�Oy���ׁ�X��Ջ�܂�C��P�Hg���$�Ԕ��A�Z�|�M~ˑ60q����T�_(�u�DD�>���ڛ$��k���[�D��) �����Ң}!��t�㞻�3����s$�����G
�
��=n���/�u�}�Ȥ����ܢ�.�D�Dn�/�"�8[Pf��bAp���_�⅕��|�~����H�):��ju�z7��@�^
�.�r�Q�ŪL�b�d��;p�:�g����mn��DϿ��\]դa�5%aR9w�ֈx(�S+���V���������^P�Q��:��;�2{��̆Hօ��.)P
 s�m�5|�ߡ��)JV�h���%����
�(T�J������+�D�]`C�!lLş׮-&��d�n��,�Y�tF$\�,�?al�+��
e�lQ\~�{��'4c#����at��.�K~�,T��Q?�y]{���7�4�	��� 4���ZhIS���y&/h[��C[F7/��h=4_���E	ҡ����웪�5�7���2�=(�zIib��Ǩ�0p��?�3f�[�16�ꋴ��?�ǚG���Ob/�c�{��7�,�l�����îs�USOo}K�M ��0�j�=���|���<�kP�)�T���x�[�
�M�'�\X��-���7����{W�{�=�E��;·���V)�����؜kX,���n�~w�@���c�_��J(��0i��K��+l����zm�!LJg�z�Am˵��g6Q{���˒'�:J഍rd8���E�A�]f��J��Q����E���8����K|ۍeA��x�pR�b���o��Ng����V��2U;N��IrM:�I�/�?P��<b ��.(~��$��aY�
��c+�w=�|��d�O�$��
pp(|�'���x�����(��ϊ��O��W*��-�>���21�W7�n_��8:�~����j!����\V۔Rz�h	�
V@;ō�`�5z��/��i���)=�H�O{E%�Ja!"Cn��RL4��i(��
��5��]t�NH?Z�H.���o/E3�3�SŃ6=M�-��V�0��w}'��?rR+Ƈ��•�&�t�
��j�(\K����\�!�YZ���\/�ROs��x�^]���idUISăd(����;t��|�r�<��F�D�����8�:);L��]����x⡩�p��.#��rj���_�J�f��M��6���8Yt-��y�.GfP7��#k^`jB҅Y������N�\�9��\����xG��dJ��%F���7�+�$�	Z�=7�����7v^� �ZDC{f�8�W��l�s�tCWT�c��Ď�q����@��͂�ĺ!�m�Ӯ�za+g@%tLj]���[
��*�~[x���Yd`�qg�z�B]��P(
���ޣ���S�D4�;
��p��}�\����P0���'�~c���.̩G�XTj�3�6ms�Y����0��R��0���M��"�y��3�)�H�O�O3U��5�Q
����v��'���2f�Yh7?�GsԻL:V�!�[x��6l�Z�{��@���&�&R���P�cD�����:$����S'3���ݳ��Y�'���$Q�z=j&��A}$�՟��φz�	��+36��>v|�v����:��𶣹1�[�%�b��o�4FA�Z�<�CjL�%΂{�2Z��B�|�a�Bb�k�'�-��,s�ok�K%���Mv�R�>4~�6yH�!�L�'"~3n�ͻ��o-hNS'��TG14���15�v���ə���i�����Vr	^�SXj��=N��~�X��*DX�R2�����u���/����>L���w�:	��H���Y���.�6�)eļT�=�
E���eiaき}��n}����@>��I=�[\���h��$���~"���٨�>�R�'!�%�X�J�JU�R��{ֵP���S)�™4�.Tvt?�dE1�9Im�:8��c�r���8f}@��6B�k��J[�=����������kF�1^��ף6��@:�K����&���dWj�
�h[:����
+�D2S5�-�^�轟2&	�'#3�WB�u�q���z�k���
��R�ogl29�֚�v�6��+�[�'��d�
/U?9h�f�4�ڈhM^F��Y��k��5��1ʯ�p�j_��j�
�;Qa�^�'g��A�5�a���a�KF҈O����FP��V����	�
\l��d1C��_����A����K���3����gP����L3��"L��&����Im�7r�V�yI*�m��4k\�G ���F*��Z�a���8JKԎ�+�$\���4w$��G�&��M5�=ߴ`���NPŹ�%D^��f�03�I�۔��nB���|�6�8��\<�]I��z��|�2��j�Ex������%��y��h��!�,�B{��{J.�R������F��9؃_g0�4|~��zD��P��M����؂�5/ɹ����J�H�7W9��@�m��������L�䑗����i�M��:��,��T��Y)�W�L��F�o�
e�
�+R
��ꕹ���L�
(���O4릥q�+��4��w"Q�e����Θ6�}^���s޿�*fjZ��fK�TL�d--6�p��@��m3폡����TS���&f ��s��H����k՟q��OUĽ�b��Yu0ے�p<��`�s3�96C�E�����ŕ�'C�I۞�r<����N]�z����m��bP�.J-��-E�tpvƼ������Nj�5���B�z�t�kV�y
7OX��6'�G��D��G������/{�=��ߒe'z�$>��-1`�G�̈�Qhp}���A��$�)�َ���S�m`@��yk5m<���F���=7!l����� -���9�P�#�L�'��%��?��4rF���E���O����V�z1�Vf���s�Yb=�������okT�@�
5���j6�a?���+����Dj��0�y��W�̟�k�-��k�yI��W�9����Y녗�
�3c���̐i戤��UϏ�Wz T�����P;�wTZS�ӭ��&pu™l|Z���l�f�y�Km3��N��N����:Ʌ.0,��[q޺�,��n��hK‹Bb�_t�]-��V�zy5i����"�r<��)Z�&m8Y!fGgk�B
�+�OЀ��f;Va��kA8��ؔ5��S�\
�(����.�#OHX�4�
8]�
��)�^~�l�3��K���2����i�>�ll���6�.�\��K�N�THDOŹl�-����$�����'0/�I�~���������S���V��Mr.�X�XSt��)_�����&3w\2���d-�tO�-�T
��焈J}���
I,�o��z��9��O�B�Z�Q�8�WeԐ���.�8|(��{�:W�R(��R_�n�>Ύ�=�H讗Ј��5`��hi��
�%�jG3˴��kVd6��G
A�Eo�˄nDi�u���uG�1���,�n,'F���e4fJ�K�{/T�����نaz=��Zx?��; �t��-�㌱��*�SBV�xn=<e����<�#�Ⅲ�9�L܋���_��������)��inn��y���Cj��:�!��4�&[�-���B�KF4j�W�\@F�ٖ+�-�?�h�8^X�KT��+�I�aGD�C&�A)�З��
�1����1�?Z��F�A�:r]{]x���`N?�,7���sB�h�ž������).�S��Q�����Ȗ��k�b�l�Ӣ��tWʢ���ڮZ!�d��DL�^��!8�c�m߽w�_�6ДZrZnZP�%�8����.i!T\�F�ދ7���z�:�'�,Ȭ�;����~�,[��uѵ�����hs=���ć����^��`J�`�"2+4t��g,��.D@��=��|�&�ۃ�30ð��
�onX��X�k�.U��u��S�����A]z�C�����W���3�tGAÏE.��e}H~�X"�.�:����n�5�^�_)q�!,�9����q	|.-�Ų;���B��:H\�JX�4�Z��;j�[Ԍ����O_L�c�,nzk��Ϙ���
@!@�2�hN����}D=���5�]F*"]d�v�I7*׾������9��9��<_"6H�p�}�+��ϑ�ԚvT~�`����͈����0B�3��Fyl���#5�LR�����G|u7�E�j���q�jJ����x�Ų7�y��g�;�+��&��ޯ@�pFC�'�=�� �Ğ��
Fƚ�������d{�룎f�W �-����:�K+ �2
pER��j�iA֛x�G���$4AN
���0ń�TN�)���3V;��fnކ"�K����3�i��9�z��˾��ڨ$o�w_P�"������Y�r:~9��2���۱й#�\���l���O����~.�XO���XB�e�Aq��+�@Q1�lEИ�^�����,<
$�{�(��dk�z���	�9	�T�~����Ř
sx?�; �p�ZnKg_q��/3x�&_�,�=����.����1S �'�+�e�s��7e����&z���)�CyVP3¤Αk�19���ipG;V��cY�,I�۾ԋ��ЩN���s1p�O�d_,nʱ|-�^�E�n���%Mq�u[�w������ۈ�@E
��\���
��T��\�:ٶ%�J�~�j�:8t��,u���D����:W�
q_��wf�Y�9� %�n�����[-O���rE�C���ʒ��2$��+�N
�xD�A~��[�GuO��t�peN~U�!�vM[�A�u1ȯ5�*��|��n���r�Q(�u�,�ˋ��>����#�v��]כ��2J��X�%�	����4�Πx��[�4B��t�:l�L� ���p����6{�.Mm�(�M�dkڜ��l�9"#Q�@��[���;i5CG-����+m�"J4��\6#�%|�P�M��T�d�t\�=X��:���E6�`ͻ���ڊ����H���j�Ek�����rqN���͌�0�F�LVw��y�;%hUc�y��.�v�6�l����h��d�ոe��la�TW�3�`��h�xs��C�+��B5�K�x�`�G���Hs���;��8�#��_�8������;�D�~
#��z�������+R+�E�25��ة{�t:�y�%K`^���.&3JoQ֛?�
pTA:�,v�i�A$z�Df�����s	�e��C�\��^�_�W�Q����fD��v/+�j-fO�p"�!3(Cn9K�g����hk���JHcX�CR�%v%K�
����4eC���~��R)b��m*�;Rr�?�Bz~�l�j]�>��*T�T���R��In�a�
�u>
rd�����j:V?�<_�.ݭx���x��\���JB��7��?QL����6I�}13<S�u~��T�]�;F���_�e��B��̃��z�S��[�I���Z�j;R�ad�%�y��jn�qk\�Z��m��o���?�-
�2�Q�P=��Q]V�]'��a�-:���c��u'�I�?�]��NO��A0��	H�bJLB�T�$M�ܚ�.W�HxA�O��$��S��a��(�}��J%��a�y�Bs���!���QEˣ��&ԯs��.I}��ݧ��s$�s&�iV�ɴu�?��A}*R'�LNj�b)�[�G�-(���f:���w�������u��0�H�F4����)F�+C���s,�X�0�d2�Uh�FgB�2��sЩ�%p�M��ޝ�@���u��y���c�]��CA�
�h�z6M[��M�����������1��?G�d7����x�Yn,C��w�w�r2��]��ңhnY�0p|��^5�h}��b/K�@���T:���g���E�LV^p����c�o-a4�WN�����@��Wi
c�(M
x��>��f3A����z.�!�	����]E��Ϲ$��*G�ʗ'�O�����M|z/pC�����yسd��m�Y�&�zz�r&g\�W��9��	�h�5J��T��#U�L��֝ѭ����v�R�M��PV��c;��,�{}W����_,N�o�5I}�t��7�K��6?���z�����b�[��y\)�G�I��㍯�L��/W�O[q��u��r�_ܴ͚�L��ߺ���u�ץ�(E8�Q1j^L�pM�P¼�j8�
f�O�VU�K�en}W�+�wq|17��{Ї-
[f74:�%����9N@N�ԁ���X%�S	Y������Q�
Ų�H�n�`��`�yY1>*	�p%A��u߇����S {p����ĕՕO����x��As�����R��?�$�N�����9����Ù�M2��Qӌ�8RV�-ں�̼�uGTu��P�W�ti7�M+��YFH0,�ʐ��?\޴Q��4FH���Ɉ$�v�]x,V��w����?Z�6E�쁪��������|��^3Ձ]���X�^�WI�ud�4H�Oݴ#R�����u�Ŋ	��'3Et���/T�
�[BYH豢`�0p��Μ�^Ocu��1�WO6�zM6�V�,=]74k)s�*MG�������U����\?n���{�ٶ�.rC�JՖ��	"�N��ٔ#
����N�q�Ő�ޞ��t���
Kx�Ý�Len�#�<7��m����~t!kTa-�+��#hˣ��<W��v�Q��Z:%�L�EP�ǨZ��޿z��W��@����t��ӵY[�U��\E���(����3d�6o5�m�Զ�B��+Ӿ��K�:k�"c���(o��F"Q�^��|�I����F��ⓛ�ր�X.vS��k�ك��ߞNa�@	"�%	]5��1i�[2^�M3Ι.3h�__x�*�sۛ�K)��D������ $!���eq[9(�DL<J�r���x"a(ݯ�ޥ�"�K7a|����������� �J�`i賞�n��@�-� ��!��N��f����y&k�7��%eiב!*U��.��_�*��S8s�s�*��Hu��VL�@e|�~�"�G�ՍTaY�o����������x�"EI�qλ��JE#w]n'4f��hi��'�Ì��7�߽h!�����t�˷:g�b��r�{֚�_m�X��ˎ��`RgO�=�'P/��\�.\��93�H~�
��V����lRjLH{�y=����.(�$��Yb��nX���|��V�8-�1n�\iS/�/�H̿H:�3ϴ�����{+!�m�M�ޱ}N&����4܍�P�����w-	f0G*�3�v�qFӹ��2�'c�ºA��������ʘ���Hk�v�v"�G����_�4���J�0u}�Jp2��j�$��������Z	*�N`\eM;��MќE�Ǭ>3�8�”゛`X�v����x�H�EmƦ���?A+e�s����෰��|ݳ��x'�h����ŐN���J�1?묗d�
�`���De=��@�dM*��a j�4����
���]�6pm@�Kc���V���Mڰ1wr�%�������H �^#�P�̶=��J EO1�)7�6[:�u�w`�$��bX����=2�rE����^[�����.u��LCa*�\�@i���.�:��v퍉�8���e��.K�;��Ͱg���* ���L�.�*�я����1~C2.�q�c(��Ng:������@��W�����3p��%U��欌ʌ'�04Z�/L+q'��Gآ<�젌��=oY���$)��3U�l���@�P3����m6���t�Q�?���}�	�LeW����C~��~3z�t�P�;V��A*�j�b�5�F��M��"���37K���ZR��0�2c҉Li�p��࣌��1���E^�n�r=z��&%#����f�bs�ɏ:�G�@���.w�z_#`Ʀ�t��<�"���w����S��)X׎oy��yE�fѭ��?-�4.E�O�i{���S��ˆ��5�?�K�j���-e��Ki���I�[�EO�~�^�0[o�`n���Had^�����R���6�Fu�)m�px�P+�j��ca�b?<ثe�vHisF1�X��M���=/����)N\*�w{����Z��t�$�;RSj^�[�
t5��"�Bw`��9�!�<
����5�������<��@,h7�K��yw3)7z���Mq�v�6W��;�ҲSV±��
x��x�k�/X̫��O%"Gb�U��G9g��6Χ��	��-�5m�w��V�l���o��*���ka�O�ju�O�̈́W�$�F�~r���c�L�Mf�(w%��s�����$�v�Z���>²F�>�4�T�\7��dž�� ���\C��/v�"��i�_�^�m���]5_]H�c�&��$?��t=���;yc�
��V�P���f�'G��F�����vf9?!S9�����@�ïF�.s���W��3z/i����֒�õ��m��"��Z��x�f��+�~����k�ݰP4�D�9W8�����.KF%�e������W���Hi��t��u��8�)7#�uO�ӭHSE~��=���%�?�R}'h��X�D`SM1i��W)�h�`����/����F��$?B���6};>�Ř�B�jKn'd���ƒ����l?/�4���_ި";�T����n���G���=-��mQ��2��֑LI&���|[�n0��y�
u0sy_��z�#5%��4��^�r�˷��*�l�� ��S�^q�Jb��������7�����L��+��ɫꁔ���m��`'
�2�D���2�h`���Q��8�E$�B���c�I�D�_k�!�7ũ�����$m�+��4��h�gkp~��,:�A��4v#�i�� &Ӯ�jXP���C���'>%���{��6�r��l�x���`�5�}���"ƥ��M�1w/�7p�hPq#�
��GCjK�g����FY�(TP=j��׈�G�w1
ݔ`A�(��puZ���#•�b�;?�u�N:8�N�"����4Gȍ��$��D������,O'I�WyQA�����o+a�~GU��L�L�7M�^+�o7�}x��s�[�!<lt���y���v�?��p�f�c�9-ig�eڸOg��n�&�AU���Y�%Y,�l*fpw�U��A�e��?�Z����Lx�L��]��ddh��>��\�Lio�]�kO�w�����\C�����h�������w
a�Ax�g@:�T�}�6I�؟�eh��������_���H�H��JM�=�Ʌ���F]ʒ�)���]���5�X��Vu~��5ϛg{sج�(�5����s2kD/%^fa�*HZ6N?�4d" ��A����D��1���@�^|_��+��X�Z�=u��*��&�<���ݹ �F��)��������2)s�8��zZf_�FJ ��ktu�+cE���uX�&�Ay[l��Kf��mg��j��\�Τ(0͎�8�n���G��4F�nmd!�?�AxE�\h.�e�L��|�|#��h��y�u����$MF��Sv�[��1����U�9ɬ���~����N�	���A�K��&H-��~��ǽN�V�*�M���ڰg�X..��zQ�yX׼O�B|Ú�u�<Ct
��_-����ծ��~�������x�W�K�d*��
]��P�ER`�;.�A�r+D�d>�F�y�-�Zހhy�=d��\���6�䫘#�R�B ��n�h�	/ATB�M513A�}*Ɖ�=NC�i�t8C�3��RhtJ3v�: ��b�bMfK���P�ar<�~lB�K��v�ˣq����:?�`cDB�b߮��'���'�¶B�j���_�3]ʈ>d6ꐐ�I8�8�_+T('r~"g���ծ��">�1~���?rcfiK���ʑ��v�ae�>12��#��4�4l]1R���8��8��C]Qӟ����a�f�?���.g�?����ۃ`��:�YP&�+z�����̅�����hf��cCu��2�w�=h��6�:"d:�,�z z�
�2%M��������/�"���c������&�����ktK������
Q�Sn�T��y�Ou�F��'�e.�gI��eQCS�R~�����!�����wA���5%e&�>?�����'=m���8�RLZ��S����e�찅2V}�>.cE%��0,[���b��
3��&����[$u��Mybd���
�`�[���Lg��L؃��f)h`l�c(֊�0���?q�8�1�|�8d��|d�.��T���_ɴ�~��'��RK�1�%;'��TC^�'���F��fM���/���o��*g�C}jSLx�e�7���$m<V��P�fʚ9$�������4�j�|��=��@�u�#zZ'Z�R�OЎ(�HO��xm�L�
|�WP	�,����3!f�3�dɟ
Fs��$\���P��� ��
dC���@�60�oR�
���ٙm�<�f<�����4.�v�?xptu����h������P�H��8U�@U={&-Lu����e��{���
ʻ蓇P��k�����@�*"�4o�����x�c�m����i��&�*�	ZNΠK�߆��.��/����ˁ����j#8�l�5^�/~�Q���0�������͝�i�wɨP�kǛf�!�=Oo*�O��H��X��)����, ��`��8Э�w.�H�|��1A������I�YN�!�2"R�I�-�8��D��d��b�*Ǫ�	�l���/Ė^���&c�'r=gP��G�q��H�.?���J��/�W�AG�+�"|"��F���6�H8U�olmX���0q��|3Tݭ��Bs��m��V^���3����ڇ�.;>*� i�������[yj��9Z����f�$��w���ro'�0��~���LP/� �#�l4�ؙ�~��+>�
��T.s�b8���vP먎�֌L�B!}�v����e�����H�S\�T�Y�T�8ܞ�V�S8QO���g.w'eWK6
���G�`ʛ����5��k����4�h�|�����K��b*�g��޲A�#�`���y7 ���>U�)ˋ6D��<�A���G|��l�"��kjf�z]cf3-�ܔ�⇦�g���H@����q1��N�N����t��������+=��x�{jF9ú�����;�����h�����tZ�������]��l�&!|��$������-MkT����u[�`���tJ�rH��&۾w�L�!.�k���ڝ,u��Qny���?k�����8��>��v�!p�`�:���1�E���Gw��d68[v�&r��
��G#�� �.3��2I&oG?&ǁ����W/�}36�FX��T��f���KL�0��"�`��:I�ع`r�/`���KD��'J]=�6����nZ��p��.G�d�*oG>ր;���p��*���6�Z��`�3Qm�&�ulD�i��B,u^��L��$��O�.|
� ���T:
��R�I�B>�ȕm�	�6�љ��S���3���'J�ys<+��
�)�{�&/)������b��ǵqft�A���>�/�ikHF,
2��y�p����U�L���%a_���u�P��f�*����_���=15��묏�L��Z������=)�4^���7��6LHLK}pvi�˹�\^E�"U�!�1�lS3��k��hHz0F�^��$rX~g'=c���s[���f�V<��@b^>S�`רh0g�9H�xO��|c�j��5<�ߊ��"��WcCcl�(��}YP���~�jB���r�Z�t2ƓR(�X����_�;��R����^��x_l^����ȃ}[���]Qް�j�Ys�;�F���@�)���F����C��'������89��`H�i]��������E�[��������g��$ɨ��:�g��e��\�����,� ����������dM�W�UQ��%s�%��kd�$ի"�6�Z��T�ρ�6EP*9����}!?{7�X��n��u�\�ʊ����T~&3�kbK$EƮ�q����p\$���;ݰ�(w&}�-�޽"g�0ۻk�$�����c�F��v�R�"�2y�e���)6l�C���(>oqt���c�=)o��$k�K���}hYjث���_e�Y�D[��L��1͸R%�������$�at�F4¿���ί9ʹ�'��՗G%\����ń�y����9��#�l[��*+��Q{�β�����-2O��ӵ�˅���:(�X�I���˕�}d�O�'�n+'@Y��5�ܷ����������h5m�rz���bEVr��D�hs�}��xK`‡9���h�Ac"^��
��ɴa7ѿ�������\���2O���O���`���o}6Y�2�_Y���O��PX��M�w<�^�ԝ���]5�u�!hz�աҫ���+w��y��xA?�j;���e)
g"/���=�����+����J� ?6n�22E��X�Fv)
[,M�pu�%q��"�,�&�l�u�G��9�m5�p)|<������sl9AKF����r��������T�����s0���)`x�ɤ���SB�*����x��E엷�v�T�M4�h��R�;�q0	t���m��2������E��T�t)����W��x�O룽(Ɇ��M�I�l�C-Ʀc����P�74CzA}�Q���'���s̶��t�6���jAnI׆`���U%��
*_gi�妖���G�c�b5��V���͵��tiRC�&��eTM����[s�Qɪ��$7 &���<I����W�D`@�p6�[�g�3fO]�_lzx��U��.�Ƿ�\�����ۜ?|�Γ6#��Q)�;�N._�~t��1r,䥪�x-Y����|,�"��M���y��3��'��Ͻ�w���LN�w��y����1:3T���0��M��\o3�]�eX��2���'�m\���Ѡ��+&���m5M� �s�����*���x@�J ɉ5E���O,������4��}�=��.L��J����X�?��],�>
3J���i�d{П7SoZ���U"]�O���k,C(����}�n�9���z����K�������8�>F`�<��gpe�}�Κ�=a�cL�pœs�W�J�Y|K��\�L���F���_}��IhuM�Q�3���t������|�7>�t�8���GC! \ ��4ѻ�2�
��[0��34�=�����X�
c��J�My�rGC������
�P%��W��F`>
%Ҥƫb�+/�z�;�
�,"�W����r�ދ�F��Ax�-��C�r��N��
<od|�)��	��g;��P:0�y;d,rOL��X��ƕG @Ʉ�.ڎ(Σ������Jx��v��zuH��-���i�1
��/�"=o��U!�Өv�^=�1E��Jw3�7+��	�J�HCL|)R�Z5�H����†�OP5���#�6\�$M1���D2)�,��X�(ߙԔQ?�J��n�('r��h��\A�M�� �!��9�JI�S⠝l����L7_�]��5�<�
g������x����G(E�y�ecrx����ֲ��[�[`c��
O�h���^�
A��Ћéѵ[�T����E�n������H\�7��5P�k�l̾�[՚��鋎�}��k�O ~!�CZe_���aa���G��f]z;<���t
ͺ�m��)�0..���(�^���׊)^���X��3�D���B�ʔ
�1�8��Mث6�?
��� SkB��f1��6 "�Fp�B-+�㢅=f�����+m�B�r��GA�r�	���'����������s�iR���!�xY�
|�
��p�4�{�We���$g���G��m��`�9^S
���`�7�@Sr"m�W�����'	�$o�T�۴i�I��ĩ��߼tG�^+���r#
r�C5(�5E�W�����x|Z8��੓o
Y���|t��0�K�X�,�R�G���i���k�7���X�x�Q�V]0����~Mz�M{f�Bv�q���Y	J��̸w�r�Z��%�Ϛ�z���ȑ>Ҁyf�.1��7���9�,7V���2��.y�0X��?o]̓�#d2�U]��r�F��M��u!���{��	>��n@2|c
Y��8���5N�����;r�ç-0��)fg��W1��=�s�tX��;ܘ�n��e��ޟ`�ȑ��N�҇n
0������Z�n������V�L�&WO��L@��@����\e>�0I��0u%1Xƿ��>�Kz&���Cj��$��u�6���6yya�tRh���g�6��7�He �@Xs5Y-"�����PnJ�LU�E�v-��AȱWy���=ՠ$�E��h^UQ ��P}GJa	w�zf��I]�ZWB���i<�12Fq&M1��"�&^���i^�'�x�a�1���p��x�ADn�!,�J��Nڭ�X�QL�b���C��J�Q�U�qt/*,k��m6^q��( ��P>|�ߗm�αEl�p�^x!�ݦ��D��[�+�XT*_U�0_$�eE�07*j�w��
H�!V��#L�|��C�
`K��,s��-	m�i��0�3�M����?@���Cv