/* * NET4: Implementation of BSD Unix domain sockets. * * Authors: Alan Cox, * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version * 2 of the License, or (at your option) any later version. * * Fixes: * Linus Torvalds : Assorted bug cures. * Niibe Yutaka : async I/O support. * Carsten Paeth : PF_UNIX check, address fixes. * Alan Cox : Limit size of allocated blocks. * Alan Cox : Fixed the stupid socketpair bug. * Alan Cox : BSD compatibility fine tuning. * Alan Cox : Fixed a bug in connect when interrupted. * Alan Cox : Sorted out a proper draft version of * file descriptor passing hacked up from * Mike Shaver's work. * Marty Leisner : Fixes to fd passing * Nick Nevin : recvmsg bugfix. * Alan Cox : Started proper garbage collector * Heiko EiBfeldt : Missing verify_area check * Alan Cox : Started POSIXisms * Andreas Schwab : Replace inode by dentry for proper * reference counting * Kirk Petersen : Made this a module * Christoph Rohland : Elegant non-blocking accept/connect algorithm. * Lots of bug fixes. * Alexey Kuznetosv : Repaired (I hope) bugs introduces * by above two patches. * Andrea Arcangeli : If possible we block in connect(2) * if the max backlog of the listen socket * is been reached. This won't break * old apps and it will avoid huge amount * of socks hashed (this for unix_gc() * performances reasons). * Security fix that limits the max * number of socks to 2*max_files and * the number of skb queueable in the * dgram receiver. * Artur Skawina : Hash function optimizations * Alexey Kuznetsov : Full scale SMP. Lot of bugs are introduced 8) * Malcolm Beattie : Set peercred for socketpair * Michal Ostrowski : Module initialization cleanup. * Arnaldo C. Melo : Remove MOD_{INC,DEC}_USE_COUNT, * the core infrastructure is doing that * for all net proto families now (2.5.69+) * * * Known differences from reference BSD that was tested: * * [TO FIX] * ECONNREFUSED is not returned from one end of a connected() socket to the * other the moment one end closes. * fstat() doesn't return st_dev=0, and give the blksize as high water mark * and a fake inode identifier (nor the BSD first socket fstat twice bug). * [NOT TO FIX] * accept() returns a path name even if the connecting socket has closed * in the meantime (BSD loses the path and gives up). * accept() returns 0 length path for an unbound connector. BSD returns 16 * and a null first byte in the path (but not for gethost/peername - BSD bug ??) * socketpair(...SOCK_RAW..) doesn't panic the kernel. * BSD af_unix apparently has connect forgetting to block properly. * (need to check this with the POSIX spec in detail) * * Differences from 2.0.0-11-... (ANK) * Bug fixes and improvements. * - client shutdown killed server socket. * - removed all useless cli/sti pairs. * * Semantic changes/extensions. * - generic control message passing. * - SCM_CREDENTIALS control message. * - "Abstract" (not FS based) socket bindings. * Abstract names are sequences of bytes (not zero terminated) * started by 0, so that this name space does not intersect * with BSD names. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include static struct hlist_head unix_socket_table[UNIX_HASH_SIZE + 1]; static DEFINE_SPINLOCK(unix_table_lock); static atomic_t unix_nr_socks = ATOMIC_INIT(0); #define unix_sockets_unbound (&unix_socket_table[UNIX_HASH_SIZE]) #define UNIX_ABSTRACT(sk) (unix_sk(sk)->addr->hash != UNIX_HASH_SIZE) #ifdef CONFIG_SECURITY_NETWORK static void unix_get_secdata(struct scm_cookie *scm, struct sk_buff *skb) { memcpy(UNIXSID(skb), &scm->secid, sizeof(u32)); } static inline void unix_set_secdata(struct scm_cookie *scm, struct sk_buff *skb) { scm->secid = *UNIXSID(skb); } #else static inline void unix_get_secdata(struct scm_cookie *scm, struct sk_buff *skb) { } static inline void unix_set_secdata(struct scm_cookie *scm, struct sk_buff *skb) { } #endif /* CONFIG_SECURITY_NETWORK */ /* * SMP locking strategy: * hash table is protected with spinlock unix_table_lock * each socket state is protected by separate rwlock. */ static inline unsigned unix_hash_fold(__wsum n) { unsigned hash = (__force unsigned)n; hash ^= hash>>16; hash ^= hash>>8; return hash&(UNIX_HASH_SIZE-1); } #define unix_peer(sk) (unix_sk(sk)->peer) static inline int unix_our_peer(struct sock *sk, struct sock *osk) { return unix_peer(osk) == sk; } static inline int unix_may_send(struct sock *sk, struct sock *osk) { return (unix_peer(osk) == NULL || unix_our_peer(sk, osk)); } static inline int unix_recvq_full(struct sock const *sk) { return skb_queue_len(&sk->sk_receive_queue) > sk->sk_max_ack_backlog; } static struct sock *unix_peer_get(struct sock *s) { struct sock *peer; unix_state_lock(s); peer = unix_peer(s); if (peer) sock_hold(peer); unix_state_unlock(s); return peer; } static inline void unix_release_addr(struct unix_address *addr) { if (atomic_dec_and_test(&addr->refcnt)) kfree(addr); } /* * Check unix socket name: * - should be not zero length. * - if started by not zero, should be NULL terminated (FS object) * - if started by zero, it is abstract name. */ static int unix_mkname(struct sockaddr_un * sunaddr, int len, unsigned *hashp) { if (len <= sizeof(short) || len > sizeof(*sunaddr)) return -EINVAL; if (!sunaddr || sunaddr->sun_family != AF_UNIX) return -EINVAL; if (sunaddr->sun_path[0]) { /* * This may look like an off by one error but it is a bit more * subtle. 108 is the longest valid AF_UNIX path for a binding. * sun_path[108] doesnt as such exist. However in kernel space * we are guaranteed that it is a valid memory location in our * kernel address buffer. */ ((char *)sunaddr)[len]=0; len = strlen(sunaddr->sun_path)+1+sizeof(short); return len; } *hashp = unix_hash_fold(csum_partial((char*)sunaddr, len, 0)); return len; } static void __unix_remove_socket(struct sock *sk) { sk_del_node_init(sk); } static void __unix_insert_socket(struct hlist_head *list, struct sock *sk) { WARN_ON(!sk_unhashed(sk)); sk_add_node(sk, list); } static inline void unix_remove_socket(struct sock *sk) { spin_lock(&unix_table_lock); __unix_remove_socket(sk); spin_unlock(&unix_table_lock); } static inline void unix_insert_socket(struct hlist_head *list, struct sock *sk) { spin_lock(&unix_table_lock); __unix_insert_socket(list, sk); spin_unlock(&unix_table_lock); } static struct sock *__unix_find_socket_byname(struct net *net, struct sockaddr_un *sunname, int len, int type, unsigned hash) { struct sock *s; struct hlist_node *node; sk_for_each(s, node, &unix_socket_table[hash ^ type]) { struct unix_sock *u = unix_sk(s); if (!net_eq(sock_net(s), net)) continue; if (u->addr->len == len && !memcmp(u->addr->name, sunname, len)) goto found; } s = NULL; found: return s; } static inline struct sock *unix_find_socket_byname(struct net *net, struct sockaddr_un *sunname, int len, int type, unsigned hash) { struct sock *s; spin_lock(&unix_table_lock); s = __unix_find_socket_byname(net, sunname, len, type, hash); if (s) sock_hold(s); spin_unlock(&unix_table_lock); return s; } static struct sock *unix_find_socket_byinode(struct net *net, struct inode *i) { struct sock *s; struct hlist_node *node; spin_lock(&unix_table_lock); sk_for_each(s, node, &unix_socket_table[i->i_ino & (UNIX_HASH_SIZE - 1)]) { struct dentry *dentry = unix_sk(s)->dentry; if (!net_eq(sock_net(s), net)) continue; if(dentry && dentry->d_inode == i) { sock_hold(s); goto found; } } s = NULL; found: spin_unlock(&unix_table_lock); return s; } static inline int unix_writable(struct sock *sk) { return (atomic_read(&sk->sk_wmem_alloc) << 2) <= sk->sk_sndbuf; } static void unix_write_space(struct sock *sk) { read_lock(&sk->sk_callback_lock); if (unix_writable(sk)) { if (sk->sk_sleep && waitqueue_active(sk->sk_sleep)) wake_up_interruptible_sync(sk->sk_sleep); sk_wake_async(sk, SOCK_WAKE_SPACE, POLL_OUT); } read_unlock(&sk->sk_callback_lock); } /* When dgram socket disconnects (or changes its peer), we clear its receive * queue of packets arrived from previous peer. First, it allows to do * flow control based only on wmem_alloc; second, sk connected to peer * may receive messages only from that peer. */ static void unix_dgram_disconnected(struct sock *sk, struct sock *other) { if (!skb_queue_empty(&sk->sk_receive_queue)) { skb_queue_purge(&sk->sk_receive_queue); wake_up_interruptible_all(&unix_sk(sk)->peer_wait); /* If one link of bidirectional dgram pipe is disconnected, * we signal error. Messages are lost. Do not make this, * when peer was not connected to us. */ if (!sock_flag(other, SOCK_DEAD) && unix_peer(other) == sk) { other->sk_err = ECONNRESET; other->sk_error_report(other); } } } static void unix_sock_destructor(struct sock *sk) { struct unix_sock *u = unix_sk(sk); skb_queue_purge(&sk->sk_receive_queue); WARN_ON(atomic_read(&sk->sk_wmem_alloc)); WARN_ON(!sk_unhashed(sk)); WARN_ON(sk->sk_socket); if (!sock_flag(sk, SOCK_DEAD)) { printk("Attempt to release alive unix socket: %p\n", sk); return; } if (u->addr) unix_release_addr(u->addr); atomic_dec(&unix_nr_socks); #ifdef UNIX_REFCNT_DEBUG printk(KERN_DEBUG "UNIX %p is destroyed, %d are still alive.\n", sk, atomic_read(&unix_nr_socks)); #endif } static int unix_release_sock (struct sock *sk, int embrion) { struct unix_sock *u = unix_sk(sk); struct dentry *dentry; struct vfsmount *mnt; struct sock *skpair; struct sk_buff *skb; int state; unix_remove_socket(sk); /* Clear state */ unix_state_lock(sk); sock_orphan(sk); sk->sk_shutdown = SHUTDOWN_MASK; dentry = u->dentry; u->dentry = NULL; mnt = u->mnt; u->mnt = NULL; state = sk->sk_state; sk->sk_state = TCP_CLOSE; unix_state_unlock(sk); wake_up_interruptible_all(&u->peer_wait); skpair=unix_peer(sk); if (skpair!=NULL) { if (sk->sk_type == SOCK_STREAM || sk->sk_type == SOCK_SEQPACKET) { unix_state_lock(skpair); /* No more writes */ skpair->sk_shutdown = SHUTDOWN_MASK; if (!skb_queue_empty(&sk->sk_receive_queue) || embrion) skpair->sk_err = ECONNRESET; unix_state_unlock(skpair); skpair->sk_state_change(skpair); read_lock(&skpair->sk_callback_lock); sk_wake_async(skpair, SOCK_WAKE_WAITD, POLL_HUP); read_unlock(&skpair->sk_callback_lock); } sock_put(skpair); /* It may now die */ unix_peer(sk) = NULL; } /* Try to flush out this socket. Throw out buffers at least */ while ((skb = skb_dequeue(&sk->sk_receive_queue)) != NULL) { if (state==TCP_LISTEN) unix_release_sock(skb->sk, 1); /* passed fds are erased in the kfree_skb hook */ kfree_skb(skb); } if (dentry) { dput(dentry); mntput(mnt); } sock_put(sk); /* ---- Socket is dead now and most probably destroyed ---- */ /* * Fixme: BSD difference: In BSD all sockets connected to use get * ECONNRESET and we die on the spot. In Linux we behave * like files and pipes do and wait for the last * dereference. * * Can't we simply set sock->err? * * What the above comment does talk about? --ANK(980817) */ if (unix_tot_inflight) unix_gc(); /* Garbage collect fds */ return 0; } static int unix_listen(struct socket *sock, int backlog) { int err; struct sock *sk = sock->sk; struct unix_sock *u = unix_sk(sk); err = -EOPNOTSUPP; if (sock->type!=SOCK_STREAM && sock->type!=SOCK_SEQPACKET) goto out; /* Only stream/seqpacket sockets accept */ err = -EINVAL; if (!u->addr) goto out; /* No listens on an unbound socket */ unix_state_lock(sk); if (sk->sk_state != TCP_CLOSE && sk->sk_state != TCP_LISTEN) goto out_unlock; if (backlog > sk->sk_max_ack_backlog) wake_up_interruptible_all(&u->peer_wait); sk->sk_max_ack_backlog = backlog; sk->sk_state = TCP_LISTEN; /* set credentials so connect can copy them */ sk->sk_peercred.pid = task_tgid_vnr(current); sk->sk_peercred.uid = current->euid; sk->sk_peercred.gid = current->egid; err = 0; out_unlock: unix_state_unlock(sk); out: return err; } static int unix_release(struct socket *); static int unix_bind(struct socket *, struct sockaddr *, int); static int unix_stream_connect(struct socket *, struct sockaddr *, int addr_len, int flags); static int unix_socketpair(struct socket *, struct socket *); static int unix_accept(struct socket *, struct socket *, int); static int unix_getname(struct socket *, struct sockaddr *, int *, int); static unsigned int unix_poll(struct file *, struct socket *, poll_table *); static unsigned int unix_dgram_poll(struct file *, struct socket *, poll_table *); static int unix_ioctl(struct socket *, unsigned int, unsigned long); static int unix_shutdown(struct socket *, int); static int unix_stream_sendmsg(struct kiocb *, struct socket *, struct msghdr *, size_t); static int unix_stream_recvmsg(struct kiocb *, struct socket *, struct msghdr *, size_t, int); static int unix_dgram_sendmsg(struct kiocb *, struct socket *, struct msghdr *, size_t); static int unix_dgram_recvmsg(struct kiocb *, struct socket *, struct msghdr *, size_t, int); static int unix_dgram_connect(struct socket *, struct sockaddr *, int, int); static int unix_seqpacket_sendmsg(struct kiocb *, struct socket *, struct msghdr *, size_t); static const struct proto_ops unix_stream_ops = { .family = PF_UNIX, .owner = THIS_MODULE, .release = unix_release, .bind = unix_bind, .connect = unix_stream_connect, .socketpair = unix_socketpair, .accept = unix_accept, .getname = unix_getname, .poll = unix_poll, .ioctl = unix_ioctl, .listen = unix_listen, .shutdown = unix_shutdown, .setsockopt = sock_no_setsockopt, .getsockopt = sock_no_getsockopt, .sendmsg = unix_stream_sendmsg, .recvmsg = unix_stream_recvmsg, .mmap = sock_no_mmap, .sendpage = sock_no_sendpage, }; static const struct proto_ops unix_dgram_ops = { .family = PF_UNIX, .owner = THIS_MODULE, .release = unix_release, .bind = unix_bind, .connect = unix_dgram_connect, .socketpair = unix_socketpair, .accept = sock_no_accept, .getname = unix_getname, .poll = unix_dgram_poll, .ioctl = unix_ioctl, .listen = sock_no_listen, .shutdown = unix_shutdown, .setsockopt = sock_no_setsockopt, .getsockopt = sock_no_getsockopt, .sendmsg = unix_dgram_sendmsg, .recvmsg = unix_dgram_recvmsg, .mmap = sock_no_mmap, .sendpage = sock_no_sendpage, }; static const struct proto_ops unix_seqpacket_ops = { .family = PF_UNIX, .owner = THIS_MODULE, .release = unix_release, .bind = unix_bind, .connect = unix_stream_connect, .socketpair = unix_socketpair, .accept = unix_accept, .getname = unix_getname, .poll = unix_dgram_poll, .ioctl = unix_ioctl, .listen = unix_listen, .shutdown = unix_shutdown, .setsockopt = sock_no_setsockopt, .getsockopt = sock_no_getsockopt, .sendmsg = unix_seqpacket_sendmsg, .recvmsg = unix_dgram_recvmsg, .mmap = sock_no_mmap, .sendpage = sock_no_sendpage, }; static struct proto unix_proto = { .name = "UNIX", .owner = THIS_MODULE, .obj_size = sizeof(struct unix_sock), }; /* * AF_UNIX sockets do not interact with hardware, hence they * dont trigger interrupts - so it's safe for them to have * bh-unsafe locking for their sk_receive_queue.lock. Split off * this special lock-class by reinitializing the spinlock key: */ static struct lock_class_key af_unix_sk_receive_queue_lock_key; static struct sock * unix_create1(struct net *net, struct socket *sock) { struct sock *sk = NULL; struct unix_sock *u; atomic_inc(&unix_nr_socks); if (atomic_read(&unix_nr_socks) > 2 * get_max_files()) goto out; sk = sk_alloc(net, PF_UNIX, GFP_KERNEL, &unix_proto); if (!sk) goto out; sock_init_data(sock,sk); lockdep_set_class(&sk->sk_receive_queue.lock, &af_unix_sk_receive_queue_lock_key); sk->sk_write_space = unix_write_space; sk->sk_max_ack_backlog = net->unx.sysctl_max_dgram_qlen; sk->sk_destruct = unix_sock_destructor; u = unix_sk(sk); u->dentry = NULL; u->mnt = NULL; spin_lock_init(&u->lock); atomic_long_set(&u->inflight, 0); INIT_LIST_HEAD(&u->link); mutex_init(&u->readlock); /* single task reading lock */ init_waitqueue_head(&u->peer_wait); unix_insert_socket(unix_sockets_unbound, sk); out: if (sk == NULL) atomic_dec(&unix_nr_socks); return sk; } static int unix_create(struct net *net, struct socket *sock, int protocol) { if (protocol && protocol != PF_UNIX) return -EPROTONOSUPPORT; sock->state = SS_UNCONNECTED; switch (sock->type) { case SOCK_STREAM: sock->ops = &unix_stream_ops; break; /* * Believe it or not BSD has AF_UNIX, SOCK_RAW though * nothing uses it. */ case SOCK_RAW: sock->type=SOCK_DGRAM; case SOCK_DGRAM: sock->ops = &unix_dgram_ops; break; case SOCK_SEQPACKET: sock->ops = &unix_seqpacket_ops; break; default: return -ESOCKTNOSUPPORT; } return unix_create1(net, sock) ? 0 : -ENOMEM; } static int unix_release(struct socket *sock) { struct sock *sk = sock->sk; if (!sk) return 0; sock->sk = NULL; return unix_release_sock (sk, 0); } static int unix_autobind(struct socket *sock) { struct sock *sk = sock->sk; struct net *net = sock_net(sk); struct unix_sock *u = unix_sk(sk); static u32 ordernum = 1; struct unix_address * addr; int err; mutex_lock(&u->readlock); err = 0; if (u->addr) goto out; err = -ENOMEM; addr = kzalloc(sizeof(*addr) + sizeof(short) + 16, GFP_KERNEL); if (!addr) goto out; addr->name->sun_family = AF_UNIX; atomic_set(&addr->refcnt, 1); retry: addr->len = sprintf(addr->name->sun_path+1, "%05x", ordernum) + 1 + sizeof(short); addr->hash = unix_hash_fold(csum_partial((void*)addr->name, addr->len, 0)); spin_lock(&unix_table_lock); ordernum = (ordernum+1)&0xFFFFF; if (__unix_find_socket_byname(net, addr->name, addr->len, sock->type, addr->hash)) { spin_unlock(&unix_table_lock); /* Sanity yield. It is unusual case, but yet... */ if (!(ordernum&0xFF)) yield(); goto retry; } addr->hash ^= sk->sk_type; __unix_remove_socket(sk); u->addr = addr; __unix_insert_socket(&unix_socket_table[addr->hash], sk); spin_unlock(&unix_table_lock); err = 0; out: mutex_unlock(&u->readlock); return err; } static struct sock *unix_find_other(struct net *net, struct sockaddr_un *sunname, int len, int type, unsigned hash, int *error) { struct sock *u; struct path path; int err = 0; if (sunname->sun_path[0]) { struct inode *inode; err = kern_path(sunname->sun_path, LOOKUP_FOLLOW, &path); if (err) goto fail; inode = path.dentry->d_inode; err = inode_permission(inode, MAY_WRITE); if (err) goto put_fail; err = -ECONNREFUSED; if (!S_ISSOCK(inode->i_mode)) goto put_fail; u = unix_find_socket_byinode(net, inode); if (!u) goto put_fail; if (u->sk_type == type) touch_atime(path.mnt, path.dentry); path_put(&path); err=-EPROTOTYPE; if (u->sk_type != type) { sock_put(u); goto fail; } } else { err = -ECONNREFUSED; u=unix_find_socket_byname(net, sunname, len, type, hash); if (u) { struct dentry *dentry; dentry = unix_sk(u)->dentry; if (dentry) touch_atime(unix_sk(u)->mnt, dentry); } else goto fail; } return u; put_fail: path_put(&path); fail: *error=err; return NULL; } static int unix_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len) { struct sock *sk = sock->sk; struct net *net = sock_net(sk); struct unix_sock *u = unix_sk(sk); struct sockaddr_un *sunaddr=(struct sockaddr_un *)uaddr; struct dentry * dentry = NULL; struct nameidata nd; int err; unsigned hash; struct unix_address *addr; struct hlist_head *list; err = -EINVAL; if (sunaddr->sun_family != AF_UNIX) goto out; if (addr_len==sizeof(short)) { err = unix_autobind(sock); goto out; } err = unix_mkname(sunaddr, addr_len, &hash); if (err < 0) goto out; addr_len = err; mutex_lock(&u->readlock); err = -EINVAL; if (u->addr) goto out_up; err = -ENOMEM; addr = kmalloc(sizeof(*addr)+addr_len, GFP_KERNEL); if (!addr) goto out_up; memcpy(addr->name, sunaddr, addr_len); addr->len = addr_len; addr->hash = hash ^ sk->sk_type; atomic_set(&addr->refcnt, 1); if (sunaddr->sun_path[0]) { unsigned int mode; err = 0; /* * Get the parent directory, calculate the hash for last * component. */ err = path_lookup(sunaddr->sun_path, LOOKUP_PARENT, &nd); if (err) goto out_mknod_parent; dentry = lookup_create(&nd, 0); err = PTR_ERR(dentry); if (IS_ERR(dentry)) goto out_mknod_unlock; /* * All right, let's create it. */ mode = S_IFSOCK | (SOCK_INODE(sock)->i_mode & ~current->fs->umask); err = mnt_want_write(nd.path.mnt); if (err) goto out_mknod_dput; err = vfs_mknod(nd.path.dentry->d_inode, dentry, mode, 0); mnt_drop_write(nd.path.mnt); if (err) goto out_mknod_dput; mutex_unlock(&nd.path.dentry->d_inode->i_mutex); dput(nd.path.dentry); nd.path.dentry = dentry; addr->hash = UNIX_HASH_SIZE; } spin_lock(&unix_table_lock); if (!sunaddr->sun_path[0]) { err = -EADDRINUSE; if (__unix_find_socket_byname(net, sunaddr, addr_len, sk->sk_type, hash)) { unix_release_addr(addr); goto out_unlock; } list = &unix_socket_table[addr->hash]; } else { list = &unix_socket_table[dentry->d_inode->i_ino & (UNIX_HASH_SIZE-1)]; u->dentry = nd.path.dentry; u->mnt = nd.path.mnt; } err = 0; __unix_remove_socket(sk); u->addr = addr; __unix_insert_socket(list, sk); out_unlock: spin_unlock(&unix_table_lock); out_up: mutex_unlock(&u->readlock); out: return err; out_mknod_dput: dput(dentry); out_mknod_unlock: mutex_unlock(&nd.path.dentry->d_inode->i_mutex); path_put(&nd.path); out_mknod_parent: if (err==-EEXIST) err=-EADDRINUSE; unix_release_addr(addr); goto out_up; } static void unix_state_double_lock(struct sock *sk1, struct sock *sk2) { if (unlikely(sk1 == sk2) || !sk2) { unix_state_lock(sk1); return; } if (sk1 < sk2) { unix_state_lock(sk1); unix_state_lock_nested(sk2); } else { unix_state_lock(sk2); unix_state_lock_nested(sk1); } } static void unix_state_double_unlock(struct sock *sk1, struct sock *sk2) { if (unlikely(sk1 == sk2) || !sk2) { unix_state_unlock(sk1); return; } unix_state_unlock(sk1); unix_state_unlock(sk2); } static int unix_dgram_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags) { struct sock *sk = sock->sk; struct net *net = sock_net(sk); struct sockaddr_un *sunaddr=(struct sockaddr_un*)addr; struct sock *other; unsigned hash; int err; if (addr->sa_family != AF_UNSPEC) { err = unix_mkname(sunaddr, alen, &hash); if (err < 0) goto out; alen = err; if (test_bit(SOCK_PASSCRED, &sock->flags) && !unix_sk(sk)->addr && (err = unix_autobind(sock)) != 0) goto out; restart: other=unix_find_other(net, sunaddr, alen, sock->type, hash, &err); if (!other) goto out; unix_state_double_lock(sk, other); /* Apparently VFS overslept socket death. Retry. */ if (sock_flag(other, SOCK_DEAD)) { unix_state_double_unlock(sk, other); sock_put(other); goto restart; } err = -EPERM; if (!unix_may_send(sk, other)) goto out_unlock; err = security_unix_may_send(sk->sk_socket, other->sk_socket); if (err) goto out_unlock; } else { /* * 1003.1g breaking connected state with AF_UNSPEC */ other = NULL; unix_state_double_lock(sk, other); } /* * If it was connected, reconnect. */ if (unix_peer(sk)) { struct sock *old_peer = unix_peer(sk); unix_peer(sk)=other; unix_state_double_unlock(sk, other); if (other != old_peer) unix_dgram_disconnected(sk, old_peer); sock_put(old_peer); } else { unix_peer(sk)=other; unix_state_double_unlock(sk, other); } return 0; out_unlock: unix_state_double_unlock(sk, other); sock_put(other); out: return err; } static long unix_wait_for_peer(struct sock *other, long timeo) { struct unix_sock *u = unix_sk(other); int sched; DEFINE_WAIT(wait); prepare_to_wait_exclusive(&u->peer_wait, &wait, TASK_INTERRUPTIBLE); sched = !sock_flag(other, SOCK_DEAD) && !(other->sk_shutdown & RCV_SHUTDOWN) && unix_recvq_full(other); unix_state_unlock(other); if (sched) timeo = schedule_timeout(timeo); finish_wait(&u->peer_wait, &wait); return timeo; } static int unix_stream_connect(struct socket *sock, struct sockaddr *uaddr, int addr_len, int flags) { struct sockaddr_un *sunaddr=(struct sockaddr_un *)uaddr; struct sock *sk = sock->sk; struct net *net = sock_net(sk); struct unix_sock *u = unix_sk(sk), *newu, *otheru; struct sock *newsk = NULL; struct sock *other = NULL; struct sk_buff *skb = NULL; unsigned hash; int st; int err; long timeo; err = unix_mkname(sunaddr, addr_len, &hash); if (err < 0) goto out; addr_len = err; if (test_bit(SOCK_PASSCRED, &sock->flags) && !u->addr && (err = unix_autobind(sock)) != 0) goto out; timeo = sock_sndtimeo(sk, flags & O_NONBLOCK); /* First of all allocate resources. If we will make it after state is locked, we will have to recheck all again in any case. */ err = -ENOMEM; /* create new sock for complete connection */ newsk = unix_create1(sock_net(sk), NULL); if (newsk == NULL) goto out; /* Allocate skb for sending to listening sock */ skb = sock_wmalloc(newsk, 1, 0, GFP_KERNEL); if (skb == NULL) goto out; restart: /* Find listening sock. */ other = unix_find_other(net, sunaddr, addr_len, sk->sk_type, hash, &err); if (!other) goto out; /* Latch state of peer */ unix_state_lock(other); /* Apparently VFS overslept socket death. Retry. */ if (sock_flag(other, SOCK_DEAD)) { unix_state_unlock(other); sock_put(other); goto restart; } err = -ECONNREFUSED; if (other->sk_state != TCP_LISTEN) goto out_unlock; if (unix_recvq_full(other)) { err = -EAGAIN; if (!timeo) goto out_unlock; timeo = unix_wait_for_peer(other, timeo); err = sock_intr_errno(timeo); if (signal_pending(current)) goto out; sock_put(other); goto restart; } /* Latch our state. It is tricky place. We need to grab write lock and cannot drop lock on peer. It is dangerous because deadlock is possible. Connect to self case and simultaneous attempt to connect are eliminated by checking socket state. other is TCP_LISTEN, if sk is TCP_LISTEN we check this before attempt to grab lock. Well, and we have to recheck the state after socket locked. */ st = sk->sk_state; switch (st) { case TCP_CLOSE: /* This is ok... continue with connect */ break; case TCP_ESTABLISHED: /* Socket is already connected */ err = -EISCONN; goto out_unlock; default: err = -EINVAL; goto out_unlock; } unix_state_lock_nested(sk); if (sk->sk_state != st) { unix_state_unlock(sk); unix_state_unlock(other); sock_put(other); goto restart; } err = security_unix_stream_connect(sock, other->sk_socket, newsk); if (err) { unix_state_unlock(sk); goto out_unlock; } /* The way is open! Fastly set all the necessary fields... */ sock_hold(sk); unix_peer(newsk) = sk; newsk->sk_state = TCP_ESTABLISHED; newsk->sk_type = sk->sk_type; newsk->sk_peercred.pid = task_tgid_vnr(current); newsk->sk_peercred.uid = current->euid; newsk->sk_peercred.gid = current->egid; newu = unix_sk(newsk); newsk->sk_sleep = &newu->peer_wait; otheru = unix_sk(other); /* copy address information from listening to new sock*/ if (otheru->addr) { atomic_inc(&otheru->addr->refcnt); newu->addr = otheru->addr; } if (otheru->dentry) { newu->dentry = dget(otheru->dentry); newu->mnt = mntget(otheru->mnt); } /* Set credentials */ sk->sk_peercred = other->sk_peercred; sock->state = SS_CONNECTED; sk->sk_state = TCP_ESTABLISHED; sock_hold(newsk); smp_mb__after_atomic_inc(); /* sock_hold() does an atomic_inc() */ unix_peer(sk) = newsk; unix_state_unlock(sk); /* take ten and and send info to listening sock */ spin_lock(&other->sk_receive_queue.lock); __skb_queue_tail(&other->sk_receive_queue, skb); spin_unlock(&other->sk_receive_queue.lock); unix_state_unlock(other); other->sk_data_ready(other, 0); sock_put(other); return 0; out_unlock: if (other) unix_state_unlock(other); out: if (skb) kfree_skb(skb); if (newsk) unix_release_sock(newsk, 0); if (other) sock_put(other); return err; } static int unix_socketpair(struct socket *socka, struct socket *sockb) { struct sock *ska=socka->sk, *skb = sockb->sk; /* Join our sockets back to back */ sock_hold(ska); sock_hold(skb); unix_peer(ska)=skb; unix_peer(skb)=ska; ska->sk_peercred.pid = skb->sk_peercred.pid = task_tgid_vnr(current); ska->sk_peercred.uid = skb->sk_peercred.uid = current->euid; ska->sk_peercred.gid = skb->sk_peercred.gid = current->egid; if (ska->sk_type != SOCK_DGRAM) { ska->sk_state = TCP_ESTABLISHED; skb->sk_state = TCP_ESTABLISHED; socka->state = SS_CONNECTED; sockb->state = SS_CONNECTED; } return 0; } static int unix_accept(struct socket *sock, struct socket *newsock, int flags) { struct sock *sk = sock->sk; struct sock *tsk; struct sk_buff *skb; int err; err = -EOPNOTSUPP; if (sock->type!=SOCK_STREAM && sock->type!=SOCK_SEQPACKET) goto out; err = -EINVAL; if (sk->sk_state != TCP_LISTEN) goto out; /* If socket state is TCP_LISTEN it cannot change (for now...), * so that no locks are necessary. */ skb = skb_recv_datagram(sk, 0, flags&O_NONBLOCK, &err); if (!skb) { /* This means receive shutdown. */ if (err == 0) err = -EINVAL; goto out; } tsk = skb->sk; skb_free_datagram(sk, skb); wake_up_interruptible(&unix_sk(sk)->peer_wait); /* attach accepted sock to socket */ unix_state_lock(tsk); newsock->state = SS_CONNECTED; sock_graft(tsk, newsock); unix_state_unlock(tsk); return 0; out: return err; } static int unix_getname(struct socket *sock, struct sockaddr *uaddr, int *uaddr_len, int peer) { struct sock *sk = sock->sk; struct unix_sock *u; struct sockaddr_un *sunaddr=(struct sockaddr_un *)uaddr; int err = 0; if (peer) { sk = unix_peer_get(sk); err = -ENOTCONN; if (!sk) goto out; err = 0; } else { sock_hold(sk); } u = unix_sk(sk); unix_state_lock(sk); if (!u->addr) { sunaddr->sun_family = AF_UNIX; sunaddr->sun_path[0] = 0; *uaddr_len = sizeof(short); } else { struct unix_address *addr = u->addr; *uaddr_len = addr->len; memcpy(sunaddr, addr->name, *uaddr_len); } unix_state_unlock(sk); sock_put(sk); out: return err; } static void unix_detach_fds(struct scm_cookie *scm, struct sk_buff *skb) { int i; scm->fp = UNIXCB(skb).fp; skb->destructor = sock_wfree; UNIXCB(skb).fp = NULL; for (i=scm->fp->count-1; i>=0; i--) unix_notinflight(scm->fp->fp[i]); } static void unix_destruct_fds(struct sk_buff *skb) { struct scm_cookie scm; memset(&scm, 0, sizeof(scm)); unix_detach_fds(&scm, skb); /* Alas, it calls VFS */ /* So fscking what? fput() had been SMP-safe since the last Summer */ scm_destroy(&scm); sock_wfree(skb); } static int unix_attach_fds(struct scm_cookie *scm, struct sk_buff *skb) { int i; /* * Need to duplicate file references for the sake of garbage * collection. Otherwise a socket in the fps might become a * candidate for GC while the skb is not yet queued. */ UNIXCB(skb).fp = scm_fp_dup(scm->fp); if (!UNIXCB(skb).fp) return -ENOMEM; for (i=scm->fp->count-1; i>=0; i--) unix_inflight(scm->fp->fp[i]); skb->destructor = unix_destruct_fds; return 0; } /* * Send AF_UNIX data. */ static int unix_dgram_sendmsg(struct kiocb *kiocb, struct socket *sock, struct msghdr *msg, size_t len) { struct sock_iocb *siocb = kiocb_to_siocb(kiocb); struct sock *sk = sock->sk; struct net *net = sock_net(sk); struct unix_sock *u = unix_sk(sk); struct sockaddr_un *sunaddr=msg->msg_name; struct sock *other = NULL; int namelen = 0; /* fake GCC */ int err; unsigned hash; struct sk_buff *skb; long timeo; struct scm_cookie tmp_scm; if (NULL == siocb->scm) siocb->scm = &tmp_scm; wait_for_unix_gc(); err = scm_send(sock, msg, siocb->scm); if (err < 0) return err; err = -EOPNOTSUPP; if (msg->msg_flags&MSG_OOB) goto out; if (msg->msg_namelen) { err = unix_mkname(sunaddr, msg->msg_namelen, &hash); if (err < 0) goto out; namelen = err; } else { sunaddr = NULL; err = -ENOTCONN; other = unix_peer_get(sk); if (!other) goto out; } if (test_bit(SOCK_PASSCRED, &sock->flags) && !u->addr && (err = unix_autobind(sock)) != 0) goto out; err = -EMSGSIZE; if (len > sk->sk_sndbuf - 32) goto out; skb = sock_alloc_send_skb(sk, len, msg->msg_flags&MSG_DONTWAIT, &err); if (skb==NULL) goto out; memcpy(UNIXCREDS(skb), &siocb->scm->creds, sizeof(struct ucred)); if (siocb->scm->fp) { err = unix_attach_fds(siocb->scm, skb); if (err) goto out_free; } unix_get_secdata(siocb->scm, skb); skb_reset_transport_header(skb); err = memcpy_fromiovec(skb_put(skb,len), msg->msg_iov, len); if (err) goto out_free; timeo = sock_sndtimeo(sk, msg->msg_flags & MSG_DONTWAIT); restart: if (!other) { err = -ECONNRESET; if (sunaddr == NULL) goto out_free; other = unix_find_other(net, sunaddr, namelen, sk->sk_type, hash, &err); if (other==NULL) goto out_free; } unix_state_lock(other); err = -EPERM; if (!unix_may_send(sk, other)) goto out_unlock; if (sock_flag(other, SOCK_DEAD)) { /* * Check with 1003.1g - what should * datagram error */ unix_state_unlock(other); sock_put(other); err = 0; unix_state_lock(sk); if (unix_peer(sk) == other) { unix_peer(sk)=NULL; unix_state_unlock(sk); unix_dgram_disconnected(sk, other); sock_put(other); err = -ECONNREFUSED; } else { unix_state_unlock(sk); } other = NULL; if (err) goto out_free; goto restart; } err = -EPIPE; if (other->sk_shutdown & RCV_SHUTDOWN) goto out_unlock; if (sk->sk_type != SOCK_SEQPACKET) { err = security_unix_may_send(sk->sk_socket, other->sk_socket); if (err) goto out_unlock; } if (unix_peer(other) != sk && unix_recvq_full(other)) { if (!timeo) { err = -EAGAIN; goto out_unlock; } timeo = unix_wait_for_peer(other, timeo); err = sock_intr_errno(timeo); if (signal_pending(current)) goto out_free; goto restart; } skb_queue_tail(&other->sk_receive_queue, skb); unix_state_unlock(other); other->sk_data_ready(other, len); sock_put(other); scm_destroy(siocb->scm); return len; out_unlock: unix_state_unlock(other); out_free: kfree_skb(skb); out: if (other) sock_put(other); scm_destroy(siocb->scm); return err; } static int unix_stream_sendmsg(struct kiocb *kiocb, struct socket *sock, struct msghdr *msg, size_t len) { struct sock_iocb *siocb = kiocb_to_siocb(kiocb); struct sock *sk = sock->sk; struct sock *other = NULL; struct sockaddr_un *sunaddr=msg->msg_name; int err,size; struct sk_buff *skb; int sent=0; struct scm_cookie tmp_scm; if (NULL == siocb->scm) siocb->scm = &tmp_scm; wait_for_unix_gc(); err = scm_send(sock, msg, siocb->scm); if (err < 0) return err; err = -EOPNOTSUPP; if (msg->msg_flags&MSG_OOB) goto out_err; if (msg->msg_namelen) { err = sk->sk_state == TCP_ESTABLISHED ? -EISCONN : -EOPNOTSUPP; goto out_err; } else { sunaddr = NULL; err = -ENOTCONN; other = unix_peer(sk); if (!other) goto out_err; } if (sk->sk_shutdown & SEND_SHUTDOWN) goto pipe_err; while(sent < len) { /* * Optimisation for the fact that under 0.01% of X * messages typically need breaking up. */ size = len-sent; /* Keep two messages in the pipe so it schedules better */ if (size > ((sk->sk_sndbuf >> 1) - 64)) size = (sk->sk_sndbuf >> 1) - 64; if (size > SKB_MAX_ALLOC) size = SKB_MAX_ALLOC; /* * Grab a buffer */ skb=sock_alloc_send_skb(sk,size,msg->msg_flags&MSG_DONTWAIT, &err); if (skb==NULL) goto out_err; /* * If you pass two values to the sock_alloc_send_skb * it tries to grab the large buffer with GFP_NOFS * (which can fail easily), and if it fails grab the * fallback size buffer which is under a page and will * succeed. [Alan] */ size = min_t(int, size, skb_tailroom(skb)); memcpy(UNIXCREDS(skb), &siocb->scm->creds, sizeof(struct ucred)); if (siocb->scm->fp) { err = unix_attach_fds(siocb->scm, skb); if (err) { kfree_skb(skb); goto out_err; } } if ((err = memcpy_fromiovec(skb_put(skb,size), msg->msg_iov, size)) != 0) { kfree_skb(skb); goto out_err; } unix_state_lock(other); if (sock_flag(other, SOCK_DEAD) || (other->sk_shutdown & RCV_SHUTDOWN)) goto pipe_err_free; skb_queue_tail(&other->sk_receive_queue, skb); unix_state_unlock(other); other->sk_data_ready(other, size); sent+=size; } scm_destroy(siocb->scm); siocb->scm = NULL; return sent; pipe_err_free: unix_state_unlock(other); kfree_skb(skb); pipe_err: if (sent==0 && !(msg->msg_flags&MSG_NOSIGNAL)) send_sig(SIGPIPE,current,0); err = -EPIPE; out_err: scm_destroy(siocb->scm); siocb->scm = NULL; return sent ? : err; } static int unix_seqpacket_sendmsg(struct kiocb *kiocb, struct socket *sock, struct msghdr *msg, size_t len) { int err; struct sock *sk = sock->sk; err = sock_error(sk); if (err) return err; if (sk->sk_state != TCP_ESTABLISHED) return -ENOTCONN; if (msg->msg_namelen) msg->msg_namelen = 0; return unix_dgram_sendmsg(kiocb, sock, msg, len); } static void unix_copy_addr(struct msghdr *msg, struct sock *sk) { struct unix_sock *u = unix_sk(sk); msg->msg_namelen = 0; if (u->addr) { msg->msg_namelen = u->addr->len; memcpy(msg->msg_name, u->addr->name, u->addr->len); } } static int unix_dgram_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, size_t size, int flags) { struct sock_iocb *siocb = kiocb_to_siocb(iocb); struct scm_cookie tmp_scm; struct sock *sk = sock->sk; struct unix_sock *u = unix_sk(sk); int noblock = flags & MSG_DONTWAIT; struct sk_buff *skb; int err; err = -EOPNOTSUPP; if (flags&MSG_OOB) goto out; msg->msg_namelen = 0; mutex_lock(&u->readlock); skb = skb_recv_datagram(sk, flags, noblock, &err); if (!skb) { unix_state_lock(sk); /* Signal EOF on disconnected non-blocking SEQPACKET socket. */ if (sk->sk_type == SOCK_SEQPACKET && err == -EAGAIN && (sk->sk_shutdown & RCV_SHUTDOWN)) err = 0; unix_state_unlock(sk); goto out_unlock; } wake_up_interruptible_sync(&u->peer_wait); if (msg->msg_name) unix_copy_addr(msg, skb->sk); if (size > skb->len) size = skb->len; else if (size < skb->len) msg->msg_flags |= MSG_TRUNC; err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, size); if (err) goto out_free; if (!siocb->scm) { siocb->scm = &tmp_scm; memset(&tmp_scm, 0, sizeof(tmp_scm)); } siocb->scm->creds = *UNIXCREDS(skb); unix_set_secdata(siocb->scm, skb); if (!(flags & MSG_PEEK)) { if (UNIXCB(skb).fp) unix_detach_fds(siocb->scm, skb); } else { /* It is questionable: on PEEK we could: - do not return fds - good, but too simple 8) - return fds, and do not return them on read (old strategy, apparently wrong) - clone fds (I chose it for now, it is the most universal solution) POSIX 1003.1g does not actually define this clearly at all. POSIX 1003.1g doesn't define a lot of things clearly however! */ if (UNIXCB(skb).fp) siocb->scm->fp = scm_fp_dup(UNIXCB(skb).fp); } err = size; scm_recv(sock, msg, siocb->scm, flags); out_free: skb_free_datagram(sk,skb); out_unlock: mutex_unlock(&u->readlock); out: return err; } /* * Sleep until data has arrive. But check for races.. */ static long unix_stream_data_wait(struct sock * sk, long timeo) { DEFINE_WAIT(wait); unix_state_lock(sk); for (;;) { prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE); if (!skb_queue_empty(&sk->sk_receive_queue) || sk->sk_err || (sk->sk_shutdown & RCV_SHUTDOWN) || signal_pending(current) || !timeo) break; set_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags); unix_state_unlock(sk); timeo = schedule_timeout(timeo); unix_state_lock(sk); clear_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags); } finish_wait(sk->sk_sleep, &wait); unix_state_unlock(sk); return timeo; } static int unix_stream_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, size_t size, int flags) { struct sock_iocb *siocb = kiocb_to_siocb(iocb); struct scm_cookie tmp_scm; struct sock *sk = sock->sk; struct unix_sock *u = unix_sk(sk); struct sockaddr_un *sunaddr=msg->msg_name; int copied = 0; int check_creds = 0; int target; int err = 0; long timeo; err = -EINVAL; if (sk->sk_state != TCP_ESTABLISHED) goto out; err = -EOPNOTSUPP; if (flags&MSG_OOB) goto out; target = sock_rcvlowat(sk, flags&MSG_WAITALL, size); timeo = sock_rcvtimeo(sk, flags&MSG_DONTWAIT); msg->msg_namelen = 0; /* Lock the socket to prevent queue disordering * while sleeps in memcpy_tomsg */ if (!siocb->scm) { siocb->scm = &tmp_scm; memset(&tmp_scm, 0, sizeof(tmp_scm)); } mutex_lock(&u->readlock); do { int chunk; struct sk_buff *skb; unix_state_lock(sk); skb = skb_dequeue(&sk->sk_receive_queue); if (skb==NULL) { if (copied >= target) goto unlock; /* * POSIX 1003.1g mandates this order. */ if ((err = sock_error(sk)) != 0) goto unlock; if (sk->sk_shutdown & RCV_SHUTDOWN) goto unlock; unix_state_unlock(sk); err = -EAGAIN; if (!timeo) break; mutex_unlock(&u->readlock); timeo = unix_stream_data_wait(sk, timeo); if (signal_pending(current)) { err = sock_intr_errno(timeo); goto out; } mutex_lock(&u->readlock); continue; unlock: unix_state_unlock(sk); break; } unix_state_unlock(sk); if (check_creds) { /* Never glue messages from different writers */ if (memcmp(UNIXCREDS(skb), &siocb->scm->creds, sizeof(siocb->scm->creds)) != 0) { skb_queue_head(&sk->sk_receive_queue, skb); break; } } else { /* Copy credentials */ siocb->scm->creds = *UNIXCREDS(skb); check_creds = 1; } /* Copy address just once */ if (sunaddr) { unix_copy_addr(msg, skb->sk); sunaddr = NULL; } chunk = min_t(unsigned int, skb->len, size); if (memcpy_toiovec(msg->msg_iov, skb->data, chunk)) { skb_queue_head(&sk->sk_receive_queue, skb); if (copied == 0) copied = -EFAULT; break; } copied += chunk; size -= chunk; /* Mark read part of skb as used */ if (!(flags & MSG_PEEK)) { skb_pull(skb, chunk); if (UNIXCB(skb).fp) unix_detach_fds(siocb->scm, skb); /* put the skb back if we didn't use it up.. */ if (skb->len) { skb_queue_head(&sk->sk_receive_queue, skb); break; } kfree_skb(skb); if (siocb->scm->fp) break; } else { /* It is questionable, see note in unix_dgram_recvmsg. */ if (UNIXCB(skb).fp) siocb->scm->fp = scm_fp_dup(UNIXCB(skb).fp); /* put message back and return */ skb_queue_head(&sk->sk_receive_queue, skb); break; } } while (size); mutex_unlock(&u->readlock); scm_recv(sock, msg, siocb->scm, flags); out: return copied ? : err; } static int unix_shutdown(struct socket *sock, int mode) { struct sock *sk = sock->sk; struct sock *other; mode = (mode+1)&(RCV_SHUTDOWN|SEND_SHUTDOWN); if (mode) { unix_state_lock(sk); sk->sk_shutdown |= mode; other=unix_peer(sk); if (other) sock_hold(other); unix_state_unlock(sk); sk->sk_state_change(sk); if (other && (sk->sk_type == SOCK_STREAM || sk->sk_type == SOCK_SEQPACKET)) { int peer_mode = 0; if (mode&RCV_SHUTDOWN) peer_mode |= SEND_SHUTDOWN; if (mode&SEND_SHUTDOWN) peer_mode |= RCV_SHUTDOWN; unix_state_lock(other); other->sk_shutdown |= peer_mode; unix_state_unlock(other); other->sk_state_change(other); read_lock(&other->sk_callback_lock); if (peer_mode == SHUTDOWN_MASK) sk_wake_async(other, SOCK_WAKE_WAITD, POLL_HUP); else if (peer_mode & RCV_SHUTDOWN) sk_wake_async(other, SOCK_WAKE_WAITD, POLL_IN); read_unlock(&other->sk_callback_lock); } if (other) sock_put(other); } return 0; } static int unix_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) { struct sock *sk = sock->sk; long amount=0; int err; switch(cmd) { case SIOCOUTQ: amount = atomic_read(&sk->sk_wmem_alloc); err = put_user(amount, (int __user *)arg); break; case SIOCINQ: { struct sk_buff *skb; if (sk->sk_state == TCP_LISTEN) { err = -EINVAL; break; } spin_lock(&sk->sk_receive_queue.lock); if (sk->sk_type == SOCK_STREAM || sk->sk_type == SOCK_SEQPACKET) { skb_queue_walk(&sk->sk_receive_queue, skb) amount += skb->len; } else { skb = skb_peek(&sk->sk_receive_queue); if (skb) amount=skb->len; } spin_unlock(&sk->sk_receive_queue.lock); err = put_user(amount, (int __user *)arg); break; } default: err = -ENOIOCTLCMD; break; } return err; } static unsigned int unix_poll(struct file * file, struct socket *sock, poll_table *wait) { struct sock *sk = sock->sk; unsigned int mask; poll_wait(file, sk->sk_sleep, wait); mask = 0; /* exceptional events? */ if (sk->sk_err) mask |= POLLERR; if (sk->sk_shutdown == SHUTDOWN_MASK) mask |= POLLHUP; if (sk->sk_shutdown & RCV_SHUTDOWN) mask |= POLLRDHUP; /* readable? */ if (!skb_queue_empty(&sk->sk_receive_queue) || (sk->sk_shutdown & RCV_SHUTDOWN)) mask |= POLLIN | POLLRDNORM; /* Connection-based need to check for termination and startup */ if ((sk->sk_type == SOCK_STREAM || sk->sk_type == SOCK_SEQPACKET) && sk->sk_state == TCP_CLOSE) mask |= POLLHUP; /* * we set writable also when the other side has shut down the * connection. This prevents stuck sockets. */ if (unix_writable(sk)) mask |= POLLOUT | POLLWRNORM | POLLWRBAND; return mask; } static unsigned int unix_dgram_poll(struct file *file, struct socket *sock, poll_table *wait) { struct sock *sk = sock->sk, *other; unsigned int mask, writable; poll_wait(file, sk->sk_sleep, wait); mask = 0; /* exceptional events? */ if (sk->sk_err || !skb_queue_empty(&sk->sk_error_queue)) mask |= POLLERR; if (sk->sk_shutdown & RCV_SHUTDOWN) mask |= POLLRDHUP; if (sk->sk_shutdown == SHUTDOWN_MASK) mask |= POLLHUP; /* readable? */ if (!skb_queue_empty(&sk->sk_receive_queue) || (sk->sk_shutdown & RCV_SHUTDOWN)) mask |= POLLIN | POLLRDNORM; /* Connection-based need to check for termination and startup */ if (sk->sk_type == SOCK_SEQPACKET) { if (sk->sk_state == TCP_CLOSE) mask |= POLLHUP; /* connection hasn't started yet? */ if (sk->sk_state == TCP_SYN_SENT) return mask; } /* writable? */ writable = unix_writable(sk); if (writable) { other = unix_peer_get(sk); if (other) { if (unix_peer(other) != sk) { poll_wait(file, &unix_sk(other)->peer_wait, wait); if (unix_recvq_full(other)) writable = 0; } sock_put(other); } } if (writable) mask |= POLLOUT | POLLWRNORM | POLLWRBAND; else set_bit(SOCK_ASYNC_NOSPACE, &sk->sk_socket->flags); return mask; } #ifdef CONFIG_PROC_FS static struct sock *first_unix_socket(int *i) { for (*i = 0; *i <= UNIX_HASH_SIZE; (*i)++) { if (!hlist_empty(&unix_socket_table[*i])) return __sk_head(&unix_socket_table[*i]); } return NULL; } static struct sock *next_unix_socket(int *i, struct sock *s) { struct sock *next = sk_next(s); /* More in this chain? */ if (next) return next; /* Look for next non-empty chain. */ for ((*i)++; *i <= UNIX_HASH_SIZE; (*i)++) { if (!hlist_empty(&unix_socket_table[*i])) return __sk_head(&unix_socket_table[*i]); } return NULL; } struct unix_iter_state { struct seq_net_private p; int i; }; static struct sock *unix_seq_idx(struct seq_file *seq, loff_t pos) { struct unix_iter_state *iter = seq->private; loff_t off = 0; struct sock *s; for (s = first_unix_socket(&iter->i); s; s = next_unix_socket(&iter->i, s)) { if (sock_net(s) != seq_file_net(seq)) continue; if (off == pos) return s; ++off; } return NULL; } static void *unix_seq_start(struct seq_file *seq, loff_t *pos) __acquires(unix_table_lock) { spin_lock(&unix_table_lock); return *pos ? unix_seq_idx(seq, *pos - 1) : SEQ_START_TOKEN; } static void *unix_seq_next(struct seq_file *seq, void *v, loff_t *pos) { struct unix_iter_state *iter = seq->private; struct sock *sk = v; ++*pos; if (v == SEQ_START_TOKEN) sk = first_unix_socket(&iter->i); else sk = next_unix_socket(&iter->i, sk); while (sk && (sock_net(sk) != seq_file_net(seq))) sk = next_unix_socket(&iter->i, sk); return sk; } static void unix_seq_stop(struct seq_file *seq, void *v) __releases(unix_table_lock) { spin_unlock(&unix_table_lock); } static int unix_seq_show(struct seq_file *seq, void *v) { if (v == SEQ_START_TOKEN) seq_puts(seq, "Num RefCount Protocol Flags Type St " "Inode Path\n"); else { struct sock *s = v; struct unix_sock *u = unix_sk(s); unix_state_lock(s); seq_printf(seq, "%p: %08X %08X %08X %04X %02X %5lu", s, atomic_read(&s->sk_refcnt), 0, s->sk_state == TCP_LISTEN ? __SO_ACCEPTCON : 0, s->sk_type, s->sk_socket ? (s->sk_state == TCP_ESTABLISHED ? SS_CONNECTED : SS_UNCONNECTED) : (s->sk_state == TCP_ESTABLISHED ? SS_CONNECTING : SS_DISCONNECTING), sock_i_ino(s)); if (u->addr) { int i, len; seq_putc(seq, ' '); i = 0; len = u->addr->len - sizeof(short); if (!UNIX_ABSTRACT(s)) len--; else { seq_putc(seq, '@'); i++; } for ( ; i < len; i++) seq_putc(seq, u->addr->name->sun_path[i]); } unix_state_unlock(s); seq_putc(seq, '\n'); } return 0; } static const struct seq_operations unix_seq_ops = { .start = unix_seq_start, .next = unix_seq_next, .stop = unix_seq_stop, .show = unix_seq_show, }; static int unix_seq_open(struct inode *inode, struct file *file) { return seq_open_net(inode, file, &unix_seq_ops, sizeof(struct unix_iter_state)); } static const struct file_operations unix_seq_fops = { .owner = THIS_MODULE, .open = unix_seq_open, .read = seq_read, .llseek = seq_lseek, .release = seq_release_net, }; #endif static struct net_proto_family unix_family_ops = { .family = PF_UNIX, .create = unix_create, .owner = THIS_MODULE, }; static int unix_net_init(struct net *net) { int error = -ENOMEM; net->unx.sysctl_max_dgram_qlen = 10; if (unix_sysctl_register(net)) goto out; #ifdef CONFIG_PROC_FS if (!proc_net_fops_create(net, "unix", 0, &unix_seq_fops)) { unix_sysctl_unregister(net); goto out; } #endif error = 0; out: return error; } static void unix_net_exit(struct net *net) { unix_sysctl_unregister(net); proc_net_remove(net, "unix"); } static struct pernet_operations unix_net_ops = { .init = unix_net_init, .exit = unix_net_exit, }; static int __init af_unix_init(void) { int rc = -1; struct sk_buff *dummy_skb; BUILD_BUG_ON(sizeof(struct unix_skb_parms) > sizeof(dummy_skb->cb)); rc = proto_register(&unix_proto, 1); if (rc != 0) { printk(KERN_CRIT "%s: Cannot create unix_sock SLAB cache!\n", __func__); goto out; } sock_register(&unix_family_ops); register_pernet_subsys(&unix_net_ops); out: return rc; } static void __exit af_unix_exit(void) { sock_unregister(PF_UNIX); proto_unregister(&unix_proto); unregister_pernet_subsys(&unix_net_ops); } /* Earlier than device_initcall() so that other drivers invoking request_module() don't end up in a loop when modprobe tries to use a UNIX socket. But later than subsys_initcall() because we depend on stuff initialised there */ fs_initcall(af_unix_init); module_exit(af_unix_exit); MODULE_LICENSE("GPL"); MODULE_ALIAS_NETPROTO(PF_UNIX); 92#6V-0N,Vu2-=fz20O{<@VQ4xw|^caC""}\QL{fQ&%W&0it&[]IҨRڅ6ѩ=ܪtf{ okT*(uv4 #Rٵp]~ֵJ3a @nXW/!6#+$"d4E†aD$&,72c4HjR{]=P򪏔0ˠ]us>c#!H{[Qp|$l6ҳx v~TYPJPbpJMУ56Q7biS #d%8QjTߺ_~gx0um@˒w bbTT7{OO8ˆAzvĹނ 1HUc^X$07^g]LF|f;WBaA+'M&}@-BkiG{͂oI}>aD7w x%#-S.sY8/ƛ-Nw[D H7CH̉5܇Ch[} W խ~9)_@ S1mW!Ոp `m6ta6DsiSY#F.,ږ?}R*Xxm@*$EIm":L~ןB蔃I>Yt:">zMq̍z=* Uogl)~o{ NjhV:Kћm6.^1}EadlM>՛l ,EKJ ۛY%E/qJEY? R2sf#Ԯt ]w1֌]ζW iʼ,:Mo5>.zTD9{)c߱cv 5e;`GҍxHk(J¤f}>;vaZ{5E잇 *_Rk5]m,)!!cf`@[_I,m%op LajQ%gmw<.:(RoW`(=R؎MSn fK!) [sNEɅf&QJՆ-7\~ bUnRIu?{G#1>yy,e] 8|[xE}CI!,![aݐ:!ݣz*BV"32&y\5c='ܲj6:64L|ol8}YK7igu[p9x<1y(JKSGSF`* 8-&(@ zҟFY ہ@rrO4իng.ۯw,vYӱXH9ٹP\$ƌ/MxB(IAzq7M`G_F;߃?ˀCY(S J|+H~PnL`^%PxTƍV>Ai?NJ>ھo^aۜaZ~e]o|af t=x$=2/7ڲzkmlr;+d0}fڞO &{BwJ4Zeyߦ)ġQJ5/ yqfb@R]z:7_CI@FصX\D }S7yMntr'(p` B:}is W4WDx )Xa:BsG|ݞ}( Xh~7 bqzR&`UT٬u%O d;:U5U(%lhh2&͠>O}&~,'<=7hN^+8Kx)J(sn rS ܛrHwCIi>bp "bd>[Îz|.ǥʌx-kj ؟--TUJ/k"ɀoZ,E޼ 0Uun+F!/2U{ F/k-<{Jall`rIJ&4&vZM cCɉKSJ `q@WXaYr S2}rz`]nn*; I%t PȊRn\IFώ C8nk]46T<^iS!{u:'.Z,n`dV[%scgl㭥q7dp΍PQIvi2i.ӷѴ:5 KB#;QJ]'S> nk:g6303 7Ba']"'h[vʛlx 92 m/6e-(X!ơ/HpU}.R/ <)wxm [_e|]G_09Q85fKP;;;1N߯b{l#-~D΀,/ e3y݁ nruܡN{;nV>'~b뇬,Vȃϭ{%]2 Wf]x5Jpx - 5taK:F[œҟ_Ӽ_LќxI:vVyQK[s7~}3:ҁٓS?,dq|7͓ X?<))!g6_dr,,X-G׬'q#(v X&"`kIs՞vumtzF֫Ţ4|Yr럼gVg _BrzѧM'ac)7D`],t>wie̺βޜFSLLpfzP ƬR"3p#5;E0o2ǠL8B;IYCe QEŷ髶ۀ Wn>+~@[ϰ4;P0{Ch:R5SW@q$ "ldͲ"`7Yʏ-+^/^6:AJ?cGOोf ӡ;}̎iKunMk:8h2I_g\n>k5ҹ(|IZi]E sL|*m̛SFii!00{Eوژrd JC}ٻļ?r,|1ؠ z6&?!e1@o0TM]Bx[; %!¨.}ʩ[2iVH]ĀlBiWebͿ0\/٥za,nJj+O Tah$yfuO% $&+=x~T4y7귫$XK=fVh[.G#@eWVG-spGB7';Ocf-k@ɑ)Nb{qW[g81T>o;sTӜq)$bQꐌ]K׼ry9}~`Yܷؤ !vctaeuy(FDD( aSi;jgY& 5m*IWO̼7ViB[$L$-S4MTx)LI1FU?W[,vAY.ͱR jVy$_cK)--X$|FKPCbp77~iV6o^h2V0us|Xk T8+@y(WYRNlJt&Y_ fchyt' gg&-m/?ńH 薔f w\wFM7Ժ/sRb C GHQb]]NF;4 úk Y.aqT-t j تR0}̅ IDKHb˅(K G'[[#OSo|My*n򛅳ICi⠥i^Jl_h[]Ro!`e$'4NV_a<ƻ @pեatJ+oL%aLI[l'GIMLHTezpQ¯`O3l\V\ :..*$Z)Ł]O͹ Z}eCnRElSN[ |a(!7zǼ^A3R.~|T> DFĘ܃[//hA+@21Ѻ,P9D_9od1J0cL)@e~&j鮿s% J@;y Ӓi˴vxòdhqQokpggs˛pH@WGa/ҵף(D2ߺD`;j:Mۗqs[jJq&DS_W9D5lZN'!!bEVtC\4y^t=;ŪDB&On ns\t*l T5JF9p ď"<.s4?[w QozH;K xgL?&f-PBf|ҁ(c]2MQ?dvSS*@j4{Eq \>BHk6˞ 0cNilh O4!&əycs DBD` LRsGz*Li3kV]`Jʠ~l{u?I ؙaoxXc B>^a^3_%9T݁[BbL#j?m)wvE.J lο2MaRr[uF#% -؁Ut-q_yDcQ^2Êpn}@9~ jCa/ĝrE^ T=acDmN *e a0Q訐Y-ǧq9d&u|ԃ㠢7ɋRVז]qg;U P/1Z}44!Lw*_T\jX=$Ə53BqU6SG!UeP[8]9y']J@2׆S)^ɟ(n#&}A{9vI8d%B)L0鞮=/h@W rTnqHLǭvGGj>S 0̚\ CHet;(/ߢJm:.caA YҁҺk +UNw߈, yШ=gͤJy\Qdc2gx=v,$D18cwd3Pzx K 愐j k@5f @\5\U.aD H_e0yA*M7X7uc~KZL% 7mѥ+JcW,#j-ώE’.pz,p4$:ۙ@?4irgls~%HO1>-]Z.O<{w .UX{!b`ւ Fś!)[QC+@ߍVkQvDfRLqJkdz _,w7e-V^.ƽ^"GJNcֶz WMNS>P$6r|UuL`@{M5RXeTJ#DeBӇe:V/hly Q}չghb2ӷIC[ o=b8 &d4L(aΎ;G u_\V,a|"w( R⨼EY"ʵzwuO0ر˹Kq8wj~Y 4uI4<+RRɱsmʽlHjv rue4rgFcϖ=/A*ɡʃJH'7=%hYJ!Zfw0fSKz6^SX'۞7@)Zb@=fi[+0pj$Ϣf2j:: srH?/Bv`gPzZ֥#GUۡ\]$0W*ʟ/n"0V-xRf6CT//˅mFT+QFo!gjrdZ! ҋeD_f61 ȢA*Y/Kiە:A_Zn8H9 hlU\ƮkD5 ;o{g`-ӈNx) ֠*02M5F͊e-Kb.%YJj$zbpuDn(rԤ:=X |vx-Z`G1zqP Ԓm< #]_YbVv^;H`YiTv`%pD?m)$q<*u-Zƕdݴib_b3Ĩnh+kY )}Fm260bHjǜUj ;eۆZI֙z2񙫪 ,RN;:=i@l،6xswQckk%w'i5d) %~e0lM&Jޛ038l?H؇vWFwDeq>^^ǍY!UTu] ouWvo99"la?eZD:(*G/ >]~@oV0bXG$ m.o80e攗S}̴SH\C˽Fy+6_ ^\Gxe{>B-p6qDK=D<zT t0|/kwyaC*35oAy{=0G2cw.W&_Ӝ}:yno159dde60-E^Y;+TQ0Ryd\RUSMS7^-Ӳ/TUH1 \JR֡C 8H䅱뎧8K'zDah^ghQ]<l?{UɰƞG5;|7o`">X0,m\$fcy)er Ԩ4O&AkT8ٞ%l(iPYU.;sBfHTM_#-\EgiR;BDi5FH=$hklT^!/Cm_kg8ʃ pI≫l,|zLn^zrNWKOeprRi0;F_sHȔÚPCMV{_Hx/}@)b>3\;nfd|}%[|L }(?ҬE8ǒ15://b|!Hotu_G!4)EM|VyZ dIq#Z{k}"{hp!#rj "I^R5˶F^)5CNFla [$fBiS48E% \ݫ εr$2!cA-EvU8Oo'u} [ R^٢5qE(Ħ]`L"` 4F̀~Ά !?4 Lkj5gS+s:铡 3Ah^w_{>?sW3WBh4T"V->/I_Gx5H&YqeF `H+ʟފ:ڱ{ xɵU!qL+ oJnOVUp|s3YoLB*<EBVoV{$7wLC&|K R8`%uyWTJ+3gnoDz$塭x`7_Nw1J$PlgELյKG&AgsǙ;NmX3s"9QBG#}f9T=\}9Nn0Y]tZmVXʡZ9Ύ\ts6!ʐ/dCym}Q<'H)*qm0j[lHˍ&/7n ?H@3w$bOL8Xz!x\w%2CR͑T* Re!Ne5͕zd;bA&2U 1.CwᢤؐdO.ݙ~a;+qzJQ S-)NʪeW*^@ ڕU/tfsE#+S^[KijUyp?XʴLs1a\VCdu95dSA)%Enw'4nRѦ7*0ݓ8D\U1%"1BKb1=mh<=SzJn]IɐTI#:Gw~nݓSbGԸ`'%8> m8U /|s*o9fyk6La=ܩ%rL?4\\7lkwM,lEIo:y{?D*)QWO~RxMxmykʴ-XajKR$Ju=S&f5?4JyfF$=S8McؐLd`X T<0;>17t(>wO+UYo8'{'6á۝NumJrCGHPl>um[Z Y.2ԎT:HB3dl1@KsF*{u¹o`mHLͷ3&6 Q%Ԓ?ރHR9;&fs3_Ne*$K3I5ԛw#ܱ j9GAFAceH -4 O_.C;b<=4P)jL*X"=WB{01 VIvh-mgn:CcCʘe25rBxb C:& s-=QK9xC-OŝU6q*UEmRu聪5Wv B3(UhPhWB#55$#]B \[) f,"EV`LĐCD-DhA6#r/!b˜akFZ`ǭMXBt\:=}7˺^dktR5yEלwtOBDQm@= Fpȕ[XG; Za_pWgy.F+rV|Jtȿ$*ʊ(/4P\b|V™JSYV1bFw?.]ʉcZJ7a$Fܷ̠b{PO_ v+ɚLb 8-1p΃M|*nn̸P+cB5@Q<(4%$4Fq/p| ,b /23㆓cԖ"6r=4m ͝-=] wWh*8rDr#+ @|Zqx#(8?ekPMQڝm%½'=Dx#%\rSpCi sG5Mlcf)v*i]2Hi!Hηu4;:g>iKwg|zc҃Ϸ Qsh vcfXVP̀<'Jw<)cO'K!@J_44i?&E]P_=exOܴB  c zÑ֤vda:Y@G4+>~ Th:aOޞy02a\5u;#sο Q" ~^F:}f'b`^Y kᝪϏqvLv{zxD T;ӛO 1=^o'$0g B֛?N׺vr#-o!F)ڬz\d'n+E)f̓J:bpGdAKZ緛iN0m ?&bGfJ8)eYW3[IYXM0vqZx<VB ?yr؃`*!"9|ӕzQS,-=<<6WDjfi}n$n+ˍC>I#$6ys`̦yͷ(3G4(zito6s ws_ E4;"^':}*%zY z!ax!@ukcNƨo@dkOR&wmCn ~Ղ7b6:$ơ!ξH\FL93\eT4f]SC)`L М~#IHPq# \_  Eԡ6&SI,kZsQMV)AZ5Q@5L6f}_m+ ƈoS|e| -w2dCT8)/3\7oDC~D!8xdz)LPXT!Tk0f:ruS\ŪPJts:ؗŋqWa[*`α i[R.?s@!NLvh,`{=FA2>L~*Xiwh˷ǩ0RB95>rL}qˮy@T!0H;λ>qXވl9:TTnht-EAtZmi=:ˈR5}(N$k'B@g hU.u&,r^n,<(-ƃ]:^W5b1+L∇|&әXd4xKwCClF:}-a#pUBX2g0bZ"lѠ5e_)o@?H BL#~Z\~#~t-xmB%Qs \,eAV'@U'L%it_ިC5a#XhU\zqHG/@Xğ$U:G*zG >-1#8OEeh}f>LNDX~bH<6UMfR#O Π '7O;L q Nױ/X ģٶҧuBv K'-} "wpJ/~upj'J<3.e`cgxs.3J٨T Fy #=9ᕹ;u*0QsBa=c_jP{H#P&aBۋ3,׮4,eeUXCq'q78]zG7fJ^*u)ki5^OKOy4 ȥZE=,F#f6Q89HrE,]zpr`MC|Y;=E걉.f XD` 軿Mq-ZV u&j( i]IYU1.*CǃSpQ 97jiL&(Z`侤~o?%T" ܛ]W1qK} l6ZhK*$`safR5xV_ }x48Sgel8P_"}Iv7+6}2di}i-߂jC.C1 |w1mhqNLеL'%M{!%k6X,jr cX51Uס aK熒z3(EGS&CЎ,xs7,E %yZ%b:Dg K2i rq`҅=:Ţf,9ăP>Ex_u4>d" MO[ʭ/XƑxY#>k3jb OtWenG_r|G/0q/KǫN޿^b̯VMC˦ܜinb3]K`{?)[sw  K m;qR7mgȷ6(ʁ\ <XBdm8j0cF<קbdk 'wnin i*sǣ 2F'ftō)uk7fOkJ&J@;Ɂ,,F4 MH땱@CH^zӗ{}NݢB6I7F̋U $/Nʿ2~&o3wNUoTA o \$O'Qco2^s|,ׁZbCqkK_ҝ%,:n+ltڰw{|g|yAОE r ]KۯsbRm9ā N$+`$}BY҅δ&iۯM g]1ՀI 82Y^ڵWrcցK*Ơ ̺0s=cP!*:xf2UXE;܇&Pn 70p7LI%=(o#}ۯ%/}4ꦎm|T}&Wp5!hf!#} sǻ(7?L2UO~^Л3\ uSIc)p[޲:>$RUK~đ:̪12VW9#` (ſ9gKcTX6x*{k~_X*Ф_OAN9u0eW>&Rހewj45тδ#>} b_ b|z!EЏFy>#V,V$"/GEb5{秱. Z1= 'kU\ C{8Oh>UD}2*@}v͗nTq[%&/Z/-s`;!J6X?bmW:wޜ @7,i4֟!kf }i.U8/1&sN[9s -Mf[O [:7x٨DA6޸< ڻ›г}`ytbM`YFh#Ex^ޮzzu B x 1D!F+b?Sb0< c!E^Ӹ)m/g#S!hݾ, ޑwEs*c5z?2s]]i('D)zJQ|F\y@G'a.W FNCTQ>o:1$0sZ1qfΗ%D|?;h/؜n rnXMAUr<1Ǧ\Lm>U׼jNi(YZgf'/3ŹULJyw&/jjw_f0VTY#iQnayP1yޞbwLJL/~~dsH)D$剓1 .c@|<تP+!Z/@ߐ( ؃䪻8Deo ׫! O>TF H߬v1ߒPAО0͈i0+t6ED|COZ?6fU6{MP9y)dO&+ n:","+)U0bXB2T$꼡a( AwѠLxaxLWYN}Ayl,.P$_uzar%[ /3FLޭ{71014JOc"8бW uBS7^i7vuABFMkC``F 9l H[&abOAD:8{d$ LUpIaJ:n}?'i9E_gFض)pDӈtulC@@!le Alf:NV-kbXv^ DHcN73|NIi/<6(]E7 ~DR##üx~ H񧕙k;=|:ǛA!K%\|:t4M aWXb!>E #zllm1m@~h,]{ UGM[a kmV|낎ij"ivbqDr$mXes嬈oQ o<)m,f7YIk]=khgFG\/7t6 KMظ5B!![i)^Rj3/F*#TɥxƫkM"Hr&??Jхe+n3gH#cԺwhcHPOt>TrsjSCKtf8?Bw`pj_EpЄHdl8jyF[kfZIR}̶J yHH$m۱ y<1#v/K` n;PzFD1Ro{՝jca Z!Bwy#cCdrRf?nA ٤bE _ޓjf񮬱XYXF^`G܊(P9\E%]$t-uY&RTXdYW'saW,Qd*,ZF$zgQI4o`YQqc"w"&/ˊ6.I0gRޯƎǬ$YdkJ%+@vdA6`=pK} *zH$nEbe)m]e(/]k! l#gMX%IlS 9s+P #Q-cg IAS_|L4@x8Y =e>B;\d\q:ރXY mTs/H톿6fP>)bF1'}ťYl Mݍ.pL2 `g8~5lx(WOA7_'qR±=$M_=H)Ȼ;WOJA*3 B7F!}E+8`|TEz[7^&%] u<˩g^><*VbuJGܷ!T|_-N#{!@`G'p\yfUUC "TwHYd5nJ'LYu:LgaE߷"."G30Cib0l(8p[U^Ǹ܌Y:|2Ul?4Lҁc!/p%b^'~@,sb7'&KƍbY7FS(YqsJg lbv10qxCQA[ETYl{qm[tiDw_uaj7r'M4O~4d#Gƅ1evRH^. 9b2VAfM/MAwFLH~t6bpbކO+T<8XY WlwBf;>;"l4dv 5j$G= ·+.*f g![A$ I #b>7,jmqDī+tTƔGfGr+h"ǁ.Q!G~.>l'݋OL2&ajrPDb6}a xBί>!fxvK8Tpf㤁P2c +7#ON]Gₐ^k䳭gM?ALj ژDYYBqI!͓G >}s I|^-4zN3(8U jȚL6̕K*r#ϻ]fu-w0EU.UAZ%.Ab9*]tUޣ;\̞SvafMma{wy^cgp+R0h3l;\C/~-hA0@jb[Edڨ`:yVB'^m@f%pmuXHך0[TsAW0.?(H4r̬+.x, رwYk=dyj FTZC hjJ9l>(3g7me\O\$\ujlS@OQL(u0|=ZA~\5HCU 6!?ʉcϹVm5,Z$jh{]s6b.=L4R ʴNN4tҬ \3 pdᖁ?JcB<ՐɗFo}dB`ra#@ѽX!XƓ= I SX}fKk="n[f㧻IU?! QЬ}qƢ6}hu3 P?-{ Qo#d[$HE_#Q7}-ޑQSwecux@pZ6nb%"i&S Zq,׵]qADx3Afr^Iwvp.v`)~Tb[&BJT+2(ƭ=!)+OV VOzk$‰qqyi+}ģڠ:MՎ4.ԸgOR7[=ك`ŮQ{Qիv^7>@/ ow Be׊Xzة `W+8SI@tKkn}={^\uH>Q 3R0,xH&B4( dr<~wພxą lix0w(IF 2$2uaV,еM[|x;YɊ>3)y& L֗[a.'d'KX3oiM%@={L'tl#/1n) Kq*3o4]@ M!F"{4]ŷx?{RH2wo52S?>Hk6縅7LŃkjPGnZP׸"P-VjęDƍPGcTs!$nmC>ᕝih3kQcB& ^ Fn6>5HHTTB,@GWy,D2֪=P j?ov/0ͼOB3$p:#K Z3.}^`mS4*as\<3Wԥ: i.}k]@cA.J)6b u0Jfa_wUםᕪ֡W!ፅ-6ʠ e6g̣gЩMsŅ:F{%x@C1eQЋ-? نj)Fa{1M;H=k~}E/$qi >Mc>`ZS7XjFE/z3gѦTv/Ĭ,Ꮉ&Qx|4ɍ?= u5e&}9.xEEMKtPxqu!۩Xeb G"G{LO&)<!)W39`V_SԲqdZcrhVRt0 ;pUȤp@ʔA\\?: ˺hAWmG鶒Y~_>!.̇W1066nDq*,bPPHrQ'ȅEVGW_~7[Ә? j 6Ě1[m"A|I>DzT3իjϏdfC"Dx"thRMz2LJ{p#Q76G e4)UzU{g;ҟ|9% &[@!e|7W"tf${عyʜ2_lUk\,&/``7 c{0FԜjyD6c Z1'R2(8S3:G_S/t~ =,( JyyXD@3Z{rh.)nw$`u-@ёk4>?e)4=F9?:lnT}ꤤs(ƄVO$tFK%V"& Hy*'5!2u"s;FZІy['$KG^x>_A1~5/qmֻt7qswsc| $x!t9 FGg3'C ׊~id@6jh̛6j$qI,;J lނћ Ed.2;B,xϋvVf*d!pPU=R&9)d_Cy )o iR\N.\Je"\% ٖ"k]- l<0P[CET>6I=`vJt-ED3Jcmd7h"d1\[<, h!Mi;HŶ0n+2pa82>ߘ{OLOQ hz~"AGz&L>h_G0eNYtU^iޯQ<1V&l x > %}N-_1Cv|K?HTt ss&p^"yxGFS嫏 Gm# d~tJOyح'GB?RDj@_GjvKq:ZSs'!VoZOqd4/.)NpCP"}ߎH*J0IJz0oDHjcN7}k7|p\.%mx]~; ;/:U-ۂ<"Sի,K5b KXNMnܷQߠGֈ 1٥^n 2d꿌/;vMma{F"H'}8"=S@9[oGMHԼEʻ\ ʵag_ $trgG=7Hg  ^^2wV5Ow@ 鍤F܅Q6Vw(_b}PA2ehuW @10 ;$xKЅytx&)Qí-3Y?0VM4zlM/068:4cVo35S%Zԧ #U_>ijؼR"!tiҲ-YfgMjqۆ*Ek20k&ލakH+PJHUPi8V bHP0T .q1g3O~&MOٌ䷢Aa+Տq@N?`zR)uYGOkbLbw\nmʋJ|* TU,rQ*v^{uػ rfC5XO%`qZ*e cՄ!V7[|tNվ$eX-s*"l`5O\ίV؇}RCwDŽTW` Ҿ ǯXFWpѨc:SIlә\'6/&zc6*'(uݴa$2n^X Tk䉎 il"]Sig~Є:8h Ⱥ/yRj8t,d7^3}: 3Cx:.TxyfoIm1&/y Y7||*R<:pBXH}6RU+& -|x.-[p1e'Y3A\/w{`s' 8 _Q!гOʓ2Uv !9h`ݪrb:~Y|}%˯ke[ :R4G&㫷u5.7=L== c|\+s?`?x˩ Z"-‘#`oLק~*%=cCV-։{&aNo>-<'Up‰eU%ed#RjWKBtnӜbu<򝾑$aϲr͈ 33)1OocN}х#!"kpunMb0Vvзc5saKY>p^| \WX"BEW(\d_8d; M.NmbĎpDY{gllDS:XwL"q}`O; qDr[sފz|"js C(W*x z5d/ft)k$oScmd)"0Mߚh"MLEo7 6[iXW kfN32 5k?(VZXT"bSLsؑ1JW_ThoJDWV]*yjSRQ!^2oRc'ra)@/ImZ=E<}U)F 4;1 CTl}*mkZV^:NhGD%LaZ3S*Gً.z~L} { ]83cI~J;"Ca`Wq( e-,),鯱[hImZ( ~t$l{*iűe06h ;#- 厭6Z.)9w@bK'ڤk 6jdꜾnwC5Cu[V$Ir=w\5f܋!¹|zUE}JwyY`Ztк1B_=6?-_+q>mUOD6ei0hmc]o4ga[c[述Ps{Qqf"`Da X/̗LmQB lv 1.tuNcpy(3D5n֌Tu fg_\4N:t/f<r-`cLU;ЅtH f*uЧw|`yQlF4Lq`:}%`/%@U&{Ba3M@:6B6vPnHxeZro;M>˓4nkzq@8jvhZT^<n7|~}*-t7W.OH'-Y_z>F%~>/nXOOf>(+-0u&plepvcҁ i=su=ǰ  դiee:߷ ӊQ75p|}J}8澝R3ё }C6'0stoa}_Ia2I^Wd@ d4 p'ۏV%kh6cm|GT! (jO3D7«& cgJl 9U,Q|#k݃xaD $وykM*^>;%{*C*@MAr/wO;,z*OuF5(#PriC~@N c9[WU)da{-$ݳOJ@cRG!:\2ʘ(:A7~tJKe*هpڇT@iQI9S8KԴ2ƜWGc7-Pg3Uz ȑv-0(JM* U4ox)o [łyߡ>`XF(2Vaך~^}9CY(~)kj7FV7hS"W3rlxqL}b{}p@X |0yL?cy)Ƀt65h+huhbIـV.DfDw.>nPQ@0T;8Ӎ8,Ð۵K'"ִ"MMC&))VŽ`5[zm!Z\ɍ{vǽBQ,uJK%qhe=Dpo2# qI?OU]2Ojw `[G ah *ػn`7CuI[/4b͙y92\[AG+J :Y[x)A%t! vMs#Q~`c{nRo k0/43*z$)I!ÃpL'v e T%byW}@_ռr i?l$^4-$-j<7)Wb*zXhmjSM-X(su:9%$ga@IlgƉ͠jF͵ܩ_ڰlAg?pRgom)r7}wV4^.$jHfڴ!8bǯ 8pԹ"˿K#/P2YF >~) }?xcsҮ٪9]0."*{Σ^%oU1T[֕f/2K*:ޠ8D)E#^zt%c8p',#6D N"ǣȶ >{nߝCCƱ&LS LVV-eC(BKLj7!g 8dO9mmh+r.q4f\ !ԣ;"abuSi97MޜuI# G>&AF%"7#43кE1m'^;u%{weXn[Ou`1 klU+v۰҃8"ӏ,67$o&%{,4&4cڞyhz3C(QMzEɧ f@S2v ՕDZׄ;L̖bF.Qȫ#>?8`JqA8B>!ЈH~H3+ 9率U߬$(S+:' Nc \pDNL^>t_ʱUXj7?)[(Gfm*ӁB> 35d|ukLUe^Ńp0F6 ā}ᐈ9O=R\,Z/qX*wL2+LUD} tϧ-^u,k?p5]Cnț2kJRۢ<wV|`g׭A&.9e$IBO['-A.C|/&SS C /Ax0Sw9`/S<<|['4º\{?!_I] N6.M,Hdh2-L!ns((ֲZ\cBV 'IrM<&Rpn+p5&q!QnO ޮ[#q2:`Z38Mo5zP{w lrQFd 7/;S'iXBRvl(ZPw|Js?GpP%f 5 1ntP$k3q*5Zw~hR?RYN-4=oaSoc{-)U;)s "ڎ 41MD@I!K~ 7yoyihJºЇF#KJUͰo%BFv*UCWM0BOCk4n{ZSGLtd3vp}n8F] Д4F8@Tr0psF$/d[T_^70l s v7Rt%uA&FZ5k/|NXjѸئrVXx,]B'r Sm~d2ԪixK mN<vk=ήM%K`"j҅w6+6HU8S[4 x4 R] {3U4ЮL=_ ^>OxҡC^' pn[?3P0}\ZF]YFEpE) ݽa8i ;6 zefy1@97޶ ]J00kT2~LpgV/0~ĘtB PB6rɨy)\t0bw\$>A+W.p`d /4H%RxClN-9.{62fŧL[zw.2&`b0,{DmPSrceix7)is@qAL^Uv)M.kgM(:ș~*gچtٗVghTt %露DfN&vۂI Тq{' BײBe8zǎ$)it7zd xuޓd tE' YFex"ԠЀFR3jsEkf_(Ne ѯ @ڒ *UnվS>l~󚞺yrӋ;@QO?҂5Sutyih SZ -^>8}rB2 <3B?&{$122`9w ^$,1ؐ"&DYj@7ʼ[$2 [F=biP㹪K[i9z8Za /ZAy r3}ಣMTxAS#+`MRI4}Zчm%l}EQn ,GH62BH_MyE}+ ~ZP<D6"-ilL0P<<#=JɱNQ%(grs~JՓ{H $/vj>Z?0ӆ3ooF"]E\i,iAGΞ Vcc|l/ö٨ŪuY$`h-@|H9[rrZDp1r 9??v>axjG9XQY CE{Xn1+FG\a⏺:^ +O砳ΕTQP}rC!YOͦ֕BCNV^|N~|yދ2KL.eSJֽC->jdW9-J&PCɳ Λ؞ zՂ@bx*[7p-7N*C5g"zqQ4 =+>S]/ ,E.URG@u+me4#?k9r2UT-! -ّ=&5|m!;^plK:o;Tc&eKomVMZ݄HC9sO/]Bq@Uōjn {@E*Ԟ"|o2Yg0HVuc }?הT@1*XXuY.e\W& SO.(.(?X?gnj*%4a$•:_?m<E-LYĐzqw/٪0cʡ\K hoQ?+mAGBfbQ`[bHl2:Ң(H`{1Ζ3kt nyv r"[k{i{ƓC~i=睇a86iY/&,yNR'U6g> ^ȌlvDwX]Q YR '^\ůTmPtr&Vl%n#7}D *']éBVhN)J )S(56a|۹>(Z!ۑ- D?Y~]R8g }m@߻.4S;K Z.!17ht5h@AHHT1 8, FvXHۭӚGR-6Jv&̞l(J ]tʤ;(v*0 |yto vᖤh2W(ōl=gtH7c{M& @-%N <eǡ*tD]VF]M滯=ZKǢ?lz6vž"Յ|S %/50MlB?DQfnZ=/ LΏȾVyA+EX/d9'U>(6,)qTᔻ WK]ROB1zeę F궐~ϲ2& $5xaVXc";pXɱԝDxP>EQ12dԦkFku5$$W^Dx^{]7hT2/?(Y/]Q:w״ uK<\tyy*HEM [ :%O<':_R|43N?:4xJvj?bm/&M1oX;$yx*2}L-\kPlTƬFUcW+Wa5dI0-2kLL"s:Ly(uډí8|$S)'tO_ icp\*&y Lg_s=?.H"h3e* [lGՁQO4$.'TQ&Vin _+& :ҸSjéH3|(&7_}04; *zO_ޕ\0JhioW'iÂr3Xj +yTjd_)=ý `E3U_K#2&賚D@t-FRK Z~68/(~uHOTKd "BG'KR"gPYc3oAP6ޛl %v FoNh C?65ϝz]njeq*'t2Ya) Ԏ-gv* %!*)jv!* 7]LSL1^%i`VwUSlhITf=RZs)fFC93%QhNI!<Ʋ+fF8_x756ǘ-eM[*혻l?1MeLMUIe_5{foP;`]OҖ^<@8<TtFaj5rO[(Gw@o!g iJïLg87Bޅ[VӠiT/nR$0[S$zc4 V1 x al*@>1[Я2NRj{[\#NJ [HDݵƝ@}eEǥVlAsDƞ 1[,nNLuI4U`bJǖQ+HsD,!WG89co3#Ӏ[2Zw^ORWX;GmL-\=7=pn#7@,鄧 Ma1_Pxk&Bһ1þU,#llo"HrI)jZ5R=6(/"lbE5bT2 vbGI\\­>ZJרe3+;ƲɤjN%l7{CfA~$,%hR&\N1?Z='\[Lp-#ѥp;#41=O]ߥCZh's^˕U9z s@2 gJOQj6~>r/q7.\8}"N&[ϊ< fNe{ ߊQ<HzjoʱKYΝR@|qKΪC, %@XkK׺3#~Kw&l(i:T b]D~T5-Juo'Źjt{b:y2ػۻ@!G2'gʇ_͵Zro{i~m/Fs 3sqVk`RhQvM`ک݁VIN̓QC`ͤ3K!yB 7p,D,6`rM<Rx980##d@C)!=m(0s~ZBkzi ^DAH;X#"xx=}Xg-!"[}:}ԲRqHLiUe `͑UsУ~۬Q¦̒tq0}"ec*uunvUMυXzUTyy-gARZUi%irq'7GQ4ȏgv(YTnT~Hu[*q׃^${QTd@e/O\ ĚL,· qlS+j]CT*pZ`Ё1i >C;%`cΏ<\@(n \;ehK@J̫Tk?"< "Gx/EY!͓f\POʕ[1AZ,k{MFK?Oʲ ~6k,?&2eT3e?C5NYx&,~y HyY陖95!̳`)䉱 FNj^[ԖV&!7S{⢳!fNsIkt#W#dP8K9w:mӂ3~h6\xd^.WE ӖF`}NYܻ-tp5+)ϟ$IAiL0!]]U}&Fu@,=hڠ)􄯜4NA저V_ @,8d3=썱ѥ8֡lH_vˆIwgjT `~71PҰ E}AS3U+),W\=m! i =-Wl-  3n=m;G/ syN)rsԜ:Ba")1ΓNrs/s43΍MdW+(>:z/c_8Nxjm-`@.f-r/8~DEmO7JW"_DdoJA,ԈOԵ_=#/8FڴQY?q0o=|V47sYm˼ .vgăEX8z. *(UAUB/lsS/ Ձrbxx¨CmAķ-UoIjY[O%n ʔΪ_͊%QoF8~[W7:rE?͸Xr߿z9T\8WIr{~52 !>'۽1<ԮXQ\T9W7\ml{hD0CܫZù %'-hi-໪(P#st;FGXDw4u[bYX!į0. جs $^4BJ^Iq0&YI,ͭx%,S+Qo(@:1LӀffݮP :.~,[l{~*Z6sQz[}q2?{m;ZMKG(FV2E1۾+p)#!vĚH{ k+} (lM nO;1Jy|?BNCN雩έ< ޛ_Sri1 &i:dUGs 3Xt[/;%[Ԛ$Kgvb~^}b ,DPM`4p@v;gx@!Ȅ7+Ɵ&U,k agM:qAG{A4*wIT7c'{≂m#bٟKo`#)C"ȿ)<WH9>1h/J֟) nwVcrT4nm};[3o.¦* j'y" jXOzH$&4(sx,nΫ] F7_Kbm%h"#fG`籯?S:2>CGN4=C+|jḶ eMJ7Y :I_D7 2sP%z4U}FR A($:%oP R>l23{la{p"(̀sղ-y˂\2v|l68Ӹ'}sKHU90.,\=~0IWY!#Ÿi絇lx,/"|C}Ջ HvǕ}`^e9ZHf gQ6g@A,ZƗ]oI{PU&O2%5u(YrxR:jskcg@&*F,vmfo_t`JTex4g %^qf6{wr6i?.QgG'$cT'%u_Z0;KK}EvO n+QZQ]fv׳T+_[Qo+ː6WS$BjQ\Mm-c??sJ'C9 cQ{FYB$ 뉞Z$ ws w rP{_^L`bd\[$+}ºhEֲgNDcyocp'S$2IB +CD5Zv[-.&C"'IRPn>}hDj0p&*$SOwhVo@.`&cG݊rۦ o[[yQFMZji5gjޏtgJnKARjm~ؙճjF\oå;(Լl-{BKoVeYSX\uC+,(OJ5HܯlͲ>c9(@ E0N9dsvYc0kZ0 3Wxat "R lNF:}n/c >R6I*#s5+^C~ x'Bc0D'WllKӧ"C+u/Yh~cf/ 8SV&0FEаEQyN+-#$X.l)vF,'nBcQE6;FDޘx46TMYW1߅_[y78qA%5nР'ܩV/ 1+ lf5U#.EE,|NR`0J)1rİLHD"1яXrT%X`GtUzfl4ŞUYRx*sïpx؛\bA%"&w_q13lZU6d>>CIeYz!dwW'Ze VR 鵅FzzY h`' v"@{S-97$xp+dN%C토Wnyvkc^/H6޽F!ʖsI8p$D97?qǽ2zw :?B 2^A W K>>[k7qO:QF9bg2]# SV^]Ujѭz1["rZ|0];d^dWbJsC*[&_]N?$*\Ukahos]E ̘BwaqPF'x>[_-}HS~Na_iՒ}W$ci`S х-À)z]P>Tmi?}B&0k!mz +I0 EV`w))lW9itXU9aGCڧjoM8pR0C:"NwE2s^kwAyS>p.Cr 3g^HAŮ}.BhIԃՓWw17}OfAWLrkش/1] V^_\?PjBTgK*`lr:QX[ cnB/\$$y  CU@r'Cf'M0SoF:SԜXsg%FuQAwCedK_j`eg&-SSmKJ?1R!Bv >8p%%JtNy|F&6")ϏÝoD\w 4%qjy@&}/b*gb\0}W*}P9:H} Pd fQO!$աZ ks w@uRدIǵJ-~l)0%$+̆!Aյt彂W#TD]Y'<1t =L^K щJQYn'a g[)5 :$=>,ncn`zmr~P\ *{dTmi\'-fI mM=MX~XQDOaeU B`zvC0vcc:zԔ%} U- Q_/=9m_n~q5jg0êNK࿏lN5#u$ŵKY^~r:%>gGcע4`+ V{hPaޚN"=H !amMvu; oǂQ?Ҹ1"kjꀽT }g}'*!# c)9.pβ3 0H.-b/ t50vo.a *`&R9#0=^^aYY ]* (R>Pu?ogGkU7hN4.!*EN@[vm\S2Dz d#wuxJP !'I3m@,@\@S~ ( [du,zdW?`*}F]m5-g7+8vOE gwt~& ÍEX|K\Sg-b_aA-k!N5Z3[ʇt)7d[%zJf9=8#РS`Dn+0}aQ5i@ި,*~a(#B`pCcj/Q&^8@&ɧeMp%aL9}\Ԙ䆻]F+2kѾjry֬N eNjkVNnUw,6gJѳ$*!r+;090\$<~c%c9S{F ȒNzj );P7EVL#cCetQo/ *&6߈DGCjW&Opֲn!SZ3xVٛ|/- r0. יcl j,]zG<2G'W]<iqqE{2S>u+9|wGہ`ī}_bCW+AH 5av $l8;DwBdH ,6T늍X`?ݦkIy~^RsiŴ$3x`W\112xc3"*w6Kf @ߍ簍R!Wzxˡ("*Yf ?38徢hv1xF"U#_y/zGb3zѸ&_MtJ!S@mCַ9Hdi4zڐv  2k9F7yOd(@x+VjWwِ9{x쥋嗯xrҹC?5AYk #sr9q BߵмA٢FG4F)}m4q1IFJ\--"e(sy&p3æ4!ޝ£uc\l8Ն,̈́س76#WQHd̤\+d*N+o|B"tx.#eșXѡht4 >jY.t8wh_Qvv4 Z5a=o] I <jVԘk~I|U+)8Fՙ{YS>W%5/)]xjQ177񒓅NzS}ǨPʪ)?sp[r9K- 3 l[nX6~/bTh9\ :6_9ʚ42cɿ؈#.XI9cYnj[­M> (y^ i=p]VlP Je2UbP~sD2$ V&>*t h\^)O&!%U:CCpxu7;*N܏:6-e}VRo]Y(`_}gWp&6 h|L-i7SwXvH%Vl#@-#q S߽*kBJHkT8E3 s)E} DvfzRN^֍-S$[#Ve8o^mTT-!6+^>Acf) } dliNS՘Bx90_`l>m"".>f<3" ?Fr"8PؙY, HڽQ:e`5K]UQ.uƦ]SI}Jtf ",!6=BG2p8kQLW ~$>:']pcw\'AU&a Ht v e uh[;ǜ2ٴ*2ϭ3Ae58 iI(3pQ)D]鎮 , ˠG:dٓ@i-[<~>Q93Wch4E:&&Rm@8IJz8X`]t ؒr"EeIJ쯡Nmtw;&ǰ24ٟ7GwOf[4EAj% o;rBhϕ.g̣qUj}P@Tc s&->UA'DfaJT NfRY\Ѱ#'e2})tKݹ։`#32q ee ='}< uP!QxLO5O-|Yr^S%pIX]iy4?pE|K !`tEU7ы;^cE3(:go(Wmg^4۾'mY㋎D 9dzl)S%2}k^|J0k% Bz%mX)1B䨋R χIraJe,i{\MZ%M*o6ÞJY,["iЇtez̺U+g3t 妢p۫<8=7ٙr4˗HAIt&Z:? >¶MBDC rS%ÜfImkTg] CRFi=&^rFb+׶Gl= O۶A,%m|j>,z//3MH FOf3a0>- 1: H~ ?< 讪jԢaslW]~afBMRX+XYNb3Id5%ըI'@:4ZthL )4:J6N+\&7μ:h6?tC 4vHj[yTv!HĠx%v'žjCDD*z@4>-s!ཥ}2 ZR7͈/`?)Zo^h'9D?!&mR1FD !he%ọfՓpR4@ǝBM, l-f2$lxN{huK5Iq5Z{ȦƴIl3ߔVsmk3OO , "C$"M\i]S8OIh.P3^0M(eD}.^Ziu1 }̿QGԿBz%jf~g (PGqhVBsz.V HgoIyuZ-fn[ VMdOw!lޙźeLmgtMsXF1H pPӅ Ӕ#f31z̼wb&g/׏$B =LwUH`c7QYՓeI5fCzj)~ݹWJ\)^ pkA#@TZU|>ʞ}P*HxIQn<`ܨq}0xI@cwF_@Q9BiA4`AjqrԿ3y 6'CP?@z(/Uw"?-%Pdpri`DY7{#z:A+iaֽ,Z:7ʧˊ|U*O5wJuy܂qp9 2HMG3)hx2? {})ϼxA w X`ڴVdL>V'q6o Xic ʗXCvһi.OJB_1O[LuT8c^ IR&V6|0$O VU'vo׊^bM.) ]=eIw B Yz{n.=RfYXn(YѦo6Hr~8~Ծ >|.#{W-|kc$<4LB(.%q#=0FsӠCB Eo.ڒ37mmOԅe;1g⥾VtcbDHXaHGtV[dK=|m}s/ WQR1`;Tg?:C}i|9X ^+*BP4WK>'qcy%ʎ lz1erVeuA>'_oF-`nbjfELٕozeBNܜ_xr@X9<<42K@7 EiH[dRojt,1XNV9c Oj*e<ݢ53Ҥ%o>щ8xiuEKB{6䪂 Kr$#z]L@N]Ӥie}rH\pMʪJLM?::&>e0RμSbH10.1T#ҜZ/N@ /_/GCCb݌Ŕ +='ⅵr+\exePvGO7Pa |92fQ_(e5fL |G ].Vf(ge]G_8NVu#"zNŝlIM. iR1!ݯUb2(N* 賃 o_-=asOQIqOVsWYeѴJGntILn,V4.C@b5hJizSwp ZdQhe@!Rxxa.Mn&©v]֢5 g8kEoa=d9KLoEW d"pt!GCt?#ߖCws)Ɔ(tv+Vb*ѻ6n!|u,ll̜zW7Q?2ZE= i9Nc;V RKott{ٰ>"lُ ʗ8OpFm ,Auk$_O %k[b{ CV:@ڌ`NƮx,=E+GeQ}iol3iXkwz4`ȧugv5$ux&4!|k2h }NC5Ɔ79DWPCC@lմo@t[LꞽǵEIgWS}obmid4c/42\fXgIV;NQ p)A_+1uI3-H䃜`=T-$}a\ kd\0D4^Fx! (ۊLjR8wj8#ͱ+$Ǻ8q<;BCx䫠į7 d>+$ϤQB۱+ZF%%[n6\tN CFO Wlo^xִ)$$^=p(O/#H䀑 /Ё1,LBf-<Ѓ ]Q4\:4fb-m,X_zРs{3if໡H˽^i)RҘЦV~/=Qg2qs/oh~&-B-gmj9(+./f\yN#E R#i{j@`-@D= q!-[']~lH)6چȠmԉJ` G^5,xѴ͊_h'I~˕H X6^:xu=]ĝcblҥ˓ g).=\4 %)^>.\]Jj?k.W^7f?/ѢkA?81KPN1ܬo#`Z VяgZȸ*i|omضu`.x[vNYE*L!.dYG|C R,|uNsK~!n"AeagI.SΨKE̤T(ߖ*~c(8BqJ߂JhCP'wEL 5MXxX?h]H/l/a5խ-` $fLSOqnvAeYu pAB*g$=]g m}N1"(&n3HRUmCګ[}Y|_+ -2r^(Y_ OzEHWS|1h2}88ۍ1m3~l 39LkY*߄^_mB/'Tݶxٯ@3x2v0Csk/ّu֤$qzzZvrY%lPEr,?iЮ mO!c@{j滁sw"iKQRRXҩGcnU!;* *vVƙ=s^أǍ g*Wn]UQO  P"ЫA,iL]P+@ۊv$տnӳӔh*~9KxagmJX"4q95ERku HBV~ H.6q5͡&Xݣ~)R aSHH HF<3hH\LT|Tuqk 0{ 8':o3-@,GQ\nDv8=r Kw'"g睻-2Λӹ~d*+`PJ a.a @|) EEh1Nڿ[%8|31-߉6"q>uv]SduLLhێ?ncI4I] oI]p(7$R3 3@ gY =\LNOd$VT7F3lv>L,]qBFt }@^S\ś*>d㏦?%|s+fp|2aAc?*3;.IY!ߏ}u#%B軲~:\"7s(q=EMϕR&1%:5-₾dAYDء#qa{qq]6,߼+6雗 c -N Si[k)$e`;'rq)@ÏB&A<&6@(my]v=`\S`189R$Bؖ+חnMYR^{#,VOZ~4#)AoSB_ܒӃTqIfb)q8YCiӽӲ o%dH3wS`^h2A}< ZrkudGT=0.>]9P:שn?ΥI@WUG @MY@g%k$/g0IӾj5Rւ/jy.'YV̪EC0CysݍKwz[wX,HTKpo,IL5F$sWغ3a-QefL6!q(Yx%~fv HEv:BRYL_R^Oo֦U 7@,T 1=LGyO(UE`Fܿ'`!*wȸu" # WUi '1D^ t%ߝ^1k}"7y,6ާ(}+L OJHIs+,z40)8mwUϥR*VDwWg]FZYXmwmrҦaqa{ĿjFF5=$(KZ_xfQ[*Jrvo:uw3aZ޾1Iei zjdN> pS951 [}wIF"h4( Q Y{Rra`4'̅LthƠǧzb4zte[zN#9FT֢{G(v{7]E ;a!5'qp7~Kv,T""$YZIA߹,C㵡Kq#ZZky~PGw.3{vCIn WndND4K?%YR1d0ejwY!n Y[3bc?)*1.')J ٝ)+8is5)eҗkNb#?êυK$86zbVezlrb Ve)cXQG)-N`Ud-?0UHJ_!:Ui<;TΜ1=( o\t9ڳ^ҋK=فKK*!l_C2\[ 9g ܫ`<+6+nzJnӹ;~T6>bG̶*)Ӄ G}C 1/+0]TaeZ1p:z&l:N5/z2-)!uа ͌__{y\OLr"hO ;ix]?ꢉzAg~N^?(dEf5$6?e^*<"4"=4b q^a<0({,u5~"F\-D8o׽`G ي9ɚP:'ṕ&3> jIo0hcF!?7Q/NP9W=(^,:JRBZy?3GrD4TtnJ[4|eYg(΃DZN6A&= S?lȲ톷Tk\ tDi+XfRR5}^ ,Ͻ@@Y\5T\ߦC ;)81$BmA/m OmUL;rF}Qzm3 f–:ԛbpq}eӬO ||8BZ-͐UzL[OjsfSwp~)C')LP>,KAv,}KNjuqNw#s?~Ӵc`oPL)~ R1!|,Ti~_Uo"gQ.lTI*g [A(4"LY6QCrCzHa-Q`Z.G.BQ:Ti'AsjώqgB!xT%zT<:}xy;P>:=~'χ6Rsvg-C$Xu\g\ɠBB r?aIÜ4.%R*cqe.b38A?%q .XF@65- oBD㷙/L+is+K>V\X;xlq#Cn̢0 dyW^yM~i R[D|8|=~lNHgw{!y$MzST!D@Sʓ=f+=Ap(1Xڱq9ʼnyAD:Ǜ| "Jn}C;B=;v\+jr.{~BǨ"|tunnnHw.-9`ӯCt<{Zww; |^-*Xkv# $?),%.W#=0*m?2 [2ZZ@W#0p*M&< ZdP4c]u8^İd< WaW44ӣ)ܐ5>5Gd4^{gkgɹ ;@FL͋ۺ+KWDtO+`v`. 'GXF%g֪VE­Os^zD bn5"8*XN**J`+%/BJ&u9"ݴE=A{jhƺ=-^W~Xg-γl_Dɍ }$"zju%vΐ!оE0x:5uۛ|xjUE9AkW__ޞ [ .u̚aZ?ӽùm.+sS;G|Ss?"_lA*H1F9][\7v!BT S=F0cWw$<ݚ1Uߜv61&:LWx[u[і FE1>UYt静然!Zw(xkRښ sPWrm$;Ug $}F&AgG @P`gP2W8+UYnAF昭p%ZW9j_>/a*-`loOʽ^hB&3%UhZNi+ׂ9MLLtzDSmuΌQ8"wL#z'&86zLԮFG߾-[.@ym.=**q4zc;h}@[h;S--Tu(0עlhfŔ,q{6|hFEZex[㥺|^՟mM lXw $㙶2˓9s_ hCX3GTL_ʱXHCċ34iTQTu2l߀4M[!ߞN0 ôaoXTx::۝u jEe'0EI?2gQ)s*X ٺ0w=s%g + =P&Ӆ(t\70"ܒ~D"o cKJfngKxm"jQTeͼ[(Z44p ᦤ*+X_cAe aC`J(%ҁ-˫yDALOwDűmZ9ܚH$ZPKK|]c[iJ6,#"3zP&TH2Y\cGNb.`x3QUʡpZ^sj4[.C5uUNr)+H;I@Wueå)8epG ]NZ_:#X r'ײ:/~BRo x"쓝;s7ݦO5[\81917=ގx5q`w4io(N1-pƼ{J ؞l-huDT* n7G++w94JlHM($7{usOZ1vu\ DkɏFfxrS@BmErZه_i ,*y:+k9FNӚ3{"8]u*q̠ZYYۭGdN@@>~S籾-s8a%]F됩AZ̬gqNϚ ȱR5u fP5pN\fѱ5-Xw)M<>XYJs&Kj/2+A xϜ4J'q/dc|<%ڪ5_hPŗM8{PT,}ڜ-no ݯJ CŧG&4##ĂC 6뷄#+"gtX0_ցqADz$fh?R\6.&]>R&UHaq%MP~yKaOzVF`U3P(D9o4 ~rP0Oycυ&[I=c+hJ$Rhʼ6"?1]K ;K ht7[_#V?Ӷu=ƚwn EhF6!v3xׅM<!dyn5/O)ix9ل>3^V+ЕߺV.>ٟ+2kQ^X 6B񟷉p̈z(Q?)$&fD!毗:ya׻K^P`*H=gaw̼kb_rr鵞%eNc!6~|lNRƟL*ɦ|v{9lgqx 2\&s'd;"8 <Y X-@.NLsJWy%D %_k ni(<ϫϔzA0aڻD|>6.xTvXE(&Z `pž;, {Z69h_FfrxlU&'2>gs/プ9Hq98{Y."=˯CIBKK_-oM,Q!̚#խQtوgr81=OY^!zɢ3!kD*%2,vil+ W~OptGet\tfLY:r8s:{"Wh'% M v8.[D4%h4L4<͚6RYehKT؅Hp !v?g>kT V8S'hkRoQrB~q "zŚt1|,:nƟ8׋\mmjWdi6!\Bw9~6s>b'|i0ɯ|"L( n$51#Tf u! DH~#q$E*3^=X"# 7=`&w{G}fp4}HDm[ɀL#KX< e$E9<;種`o]HtuR&#~$1Jtݪ/{Iz)H| ;m8ͺ>I5–Nw9:C-ZvbScT WkjJMX8l}Yc?)Y^4<">S7s*YoJ*yM3EltBKXA3**79mbI9|\`9{g-[9SeGȳy٥ôP`rQz=gt~6*!0pOat1$ 17U*Z 0V!ޠJu٤B_h$/Zh]o]*ctQΰnqsMs僼,7}m3>·Iիc(}\NVJ\ze68./A:'y-m!OIKWB+Y\Cg"̓iX2>W?y7Œ44みC>NBmj[(HdlHF%DͭI;3V#(TזIhHep^ܨ Qy3XkX-ҟ`™}Ɣ g>iZ~M],%ZZ  CiRI%ycG)*CX\Q Fy?ʼM6ǝ?5M? vSvӎߥ Nٞ澮%+\-SQJ'XV=PoB砒Bbv"欭ӿ0iZkTvoA ̏WV윏It劓\o?美c~* _[_bb=Å+BrqfZrNz4%tV11~]=a[%Ewo{Ҭ|Yel;H٧O\.{u<:Kp THy b'-l+FF˟e @6l%vzZ':S]Q"}BʕZemG(* c{b=P~*+ )PgzvS .{L}'WC\`Uz5.="bKJ?ֆI \V=aH,O(#CXMU_|#zaј+qNG|khuX$spqGfJ0@DC.ޕ2TgF7o5%D`oC Y K70C{fd;4B:H{tl|JT;J/Ι\{]Er].bd^jHt_2nFПo=AN@( FC͠usy7yhٵӠ3,7׽ge׮Ev,F69G5a̓ tԂ$u04A^$h|JbYgHZ[T%ţAZE5@fF20'5J&J5 i %6IG4?OܜrHűC}umN&[6{Qatݥ-v :ۃi5~ځVO}6!X:`͠3eX]~?H{}n@4Db{]bkeŹx ZGεe}M$)WTnXnt)!Kky-+|& G/!L01޸?ɳK/wV.k)5{1ك@<(O6cJ|?P,YQzCLMI۠\\ZR..eoAL ؜!0Ťdfz0aNպ^ \KjDU)1Z'{bp o2ѧ,og/i(amO|Y W懿m0|B\w -ؿYu&8P8{%h!*fde{$hN:k1K# AT'r}$ k@2n_Wlrj̯2z?x5j;: Bw]*j-/`3KAlbu3%27ev1%:yRC^f}]1+7_5Tk(uhV, HJ"|J뢠zcMh̓ u%xG{lkd+XXeIXb UfanMF6_8,"N=Rў Ne( 0DO<%O¶H/A6Ȭ#hy@<(s5e< <9!ZS{m)5Ϥ9핢O;dqjpM 3quaD-V33s?E1q,gZ$ʥ"ƟWپ _o>4yKr١ 7,C70QҪnpTϗC')Ĩm# T(BQ za¬p_ )d\GrML6(޾?E{)Ʊ9Fke$4J MXV\oZt/~u{U~PhҸ_v*.FٍI|N.nyD8DL9IN]f~Pt30Ӈzǧ4BnNR$5V>DJ;Y;:bw$PLYP^܋c Ѿ$cL706,Gi:5Zmy!'FZ(yy"*.2]pfO @N9ʐ+7R6  $vL[`y+"Lf0MI4xB6•1_bB}-UQܓxSBi\yu85n̨O ZVrDͤ/\̺_P\d=pEa&~,(5QbD{ pp5Q_s"M$[Σ5&n9Z'k96uPLĬ;c0#Ӽ guK?Aa QnIycY)a) iWufLSuf&g@s ڑ#Ik_N[?Q3$2`-\Z})L0bWNVȣ_S{Aި2k7BB*9Ey6 ė#;ܜߛLyr ؒzw+.k8jsȭE| YgJBK,7;,3o2-J,<@JmWWrxȯS!V5nHg_CId oUc"3FY$X' .dκ_ϒ⌳]WV`܂`3tGa vp xױ Iv֢cQߔ ScOt݉c]ɢTjզdhN3A/u}5 ŠM#/ m<3+"v©繖HoT71mVބ~VvPc|Q++5;mLpl`6)> i)ɛk:KJ3AGnqU硔G3? e ,sAjfJn(rj485,·8_I}*{h9PT #YAC!6NH#2%i.fYԞ,5TNDϷHi2Q¾~BtꧢxU&eb'!5H (x ϠEè+5$FqAчzpMAL9;X:[w`+{f-aXhH'cޕK5.AwL& S>@|ә@GPd#M>1T`{'g"/RY ,ÖJ\gz~wq[">7קsQ|qJc}l$sAr2 tt Rx|2P-$at~U>{, u I}H}r|eǜ*t0QES~-aE yo'^_nRdGÍPCzoHO02L9LQպ^F mq k1ٳH8a-pփɚBhzԯ ޥc#]>Ud+w2ٶSGUmdu~Ȓ,zmvNR\hW.1n'6Ghٹ~(+/" ʠ&5eRZ,)'tU>XAz]+Bnk{BwQؠ"}g=ڌzRbxh,h5}~yqTM)v@+ʓ=#y;T[T!W kLu\PuѼ2;f,&B3S"F_,u35Xmkb$yP'Ӯ74NP%kDhQoyֱKP{`rqMoAfHNJbbr,`8U&KR+rVV5D*!=.7JJ(}jN3 ۞2ʯtYJ}H!o1g<(\VpFU䩳RԜӋڗ4S$ז#R _M&Ǩ&̓N@()`lW!`Y0}=~ԗݺڛ~'c,.4gȓqFՌ|cj1} z;ߤN6q$PSeR~\:7Hp1J0@I8b}1t@L=HG{J게lt/O9jʼ:-j8 ࿎JO6paSp=pӼ dH{){+tp: qիn4(#@c3ZыZRC{pvn|$zIʼݚurt]nPRΙ&W,s-p%]K)FR,I#%DZU f*z~*t`F{w<+0EeΛ+~KUT؛6/^X !@[Kp?vǞ?tω߈׋_%Y\{Wr|>2Oj]@hF$u!74oWM7iFk*z`g;IOXCt@ <8ƿώF(T5',9݀"Nj)%GD'?nm >СZKÛpݤd .Ć9lV$]"%i۳Icc,Jd{#E;hW&4Pў2CS `/,#?>ƪUF_>IdË- b} `_N1Vَd/s. iI1A4=*eVpH'XHIf5,MEz8D} Եf0Eh3RڪP^hI74`f%͊) 80FGn,p{A4O(zt굑_ _x=(51-ٵ!ftx = O)0UNΫ WKN5)b=_g/8I{˰c_aă_̨aȰ|k~j" 1 7Up ~؆,g |X26?˂J-!ȑUi@T1 y;aX Te~[ a"-g=S*4Sنׂ4]}e&E_ 狏sXNmAH} R#mQy3RE]>-띵TQ3gV!zSp=Q]hOγz4IJZL+wZ$Mn0[V~k.~e2AꌥxK܈}UkFhbWN,'*/k2x~d=e lɼ%#'c\NtsElI"GAMVܴ*Mfs^xO-{ w1[Im:y8eD%AWP: ?6Îd8N+y%'oOsEsitEp`ƢI5F ~)h֪u0RFm@4X|z{P4Arޤ]9>v8쏈yC2DXzF{Yt>0'?<oPۗH߾\ªt|*2R1><|G@{8q!9Fj|@+G H Bx XЌ.ѵY%7:P$7ӕK,څ%nw#sG2eV .6Z]I~?UG$+О,qviLӾqMdSuv0 B6dt+|g,Z|>fLLzÊ)i#@sFmٙV9*3%(nYOME{)%٧u=GH"10(3,eO&9.+,p**_"= ݞ ZDѨ |~iyZ >{3V!&ks||/ʴqsyA+}GB/~T',yNoݥ$߱*Ӂ X[# q]t:X9]uO0>"R<4hXSSd'Ǣ`9͢#ï`'5rYCxWёM[1c< blrr`,2!< H6*dms5RZ } ?,DH*B‚71-&Qz 19[޼<iTS>shtl&[aoi6O"L-n 5fk|0{;MNu+vi$`u&eޘj4$T K` k[ Gq1?a ,BOVXTqhD3ƘmxU"*wnRBO]@ak:`ETjѵkU)`>>Lƺ .0H9- W,j=7'#$Wb1#="g^[1ڶi5U qx5L3#!|ѝ _n˜--։pMTֈbE[=ދSAliQc)hL=6M{J ѡ2E `~8C:[e6jYqC.7I`v~KF~М֖<`|X5u}*2Vف:$j|eXfn敔w 7p4BV߯R P30ӳBNYmߋ/=}vn(QJFwNPR"ʀ׮86.I/TwZ\FEr4S2ghxM2y.={Ft_4 .C($+6~NɳzR,o.ߌp~<_`-x;!^-d/R FL9(7Y5R?SVTzLJ zւwDd`4\R.Fa[zˣd^ 'ç6Ў|tP _`ײh` ҈҂g\ql E<7>7e([4 b~PT ͗hEor2DNIhl\}=T|J=@_m O؊EZv>M@5`(apׅd-Ċ#&w iHDg9E\ߛTqASy:=mHez}\J((]ќ^⦞߈B׼a7Lvu<6$]ES< /"F[gy+\\nm q͜ʦ D^,6pHN'D :'B<<0fBz/2$i2 #G̳{݅sJ+/j(ZHf}6jrsCcw76^ TN 7+V-x, 1Oρ|bҍ[m:lLub҇X]^Kxt pBVbACsPL`lȮw.̎Z!ݬQY!כM*o)0ٟfދKճ'iRWp0!fkk?  ʇ h}85ְ S8mZ |7d,,Om:UYT4`ș†x 4"K5P > DYj7'2!|My߃5H#Em7Mqe[NJBO ܰ/A ˑ丅9e>L]FC =/7!}[0 ]I_YMPP/E{p;/+G:B"ͤ'a]14M/X~.| 4zȸ{?0lVBwYALUnpjl88޴ 4joE6 Sˡ,@[)NuI vՌz~JF#O]WEW )XI*L:α%b3sdNp-F`gj?_Q v$*u# S&e[ذ&zr$d9_[jPFJl64g(Yx j]挰@nz<ܽs2fdLB{r(BKR߹Wm)hHOFc\Q?3 X:S i ,COa,JF6N>!kA iLC>xCAIʒ&VW]V㓧opԋ)zf@Wa}6p F^ tfAB 㡻B۴6_IOѣFY~ɳ"AV/nu57/ #M0+K+!ϱ߻7jBvJz ӟss1 zBq=rwϗؾηvGߵ+ ԴkxC ڝ#Q%tTUu`2^N'>em-(V;>c7BZрj "!p@Z¢0 B;X6cJx`olYտ\]cޤ&.̟6lU).&y9V{@z5[ʞH+fbX3R7u>Ot!VZ36XzdOB=%zH$b2b"-2ݔ$ $2G)4V07ݷ MjդR BHEm%qc~X#J*ɂWJ6< `EK[gpG 6虝/*Dnv U7.byH p.6)Bu3܁Y5]DzPR[/c*D_a0h6TIZ} D<7b&PJ`q$xyc~C+O(V,ItxےA_TvWs&2@ ՚}1Rf S ]~!1T)7M9ʨ)EpERӈiމ8b&Fg % %Κ̆e QoaB*~$7t@O^oSQ{&0Hz4s8~foxS07d6TQ|-C)#w*%4ϡ;wr5%!ea)SLϐ2.HBNaC;q\7AUd$y|@bC9fDRrIT'KVJ ~?9z'@7$`7ʡ w׭{ eD yZLYR;S#0ol#bܬse\k$pӽ,լ ˢ[AȐO }Bp0WHL2t#& Ƈ+ya% UNl zmo`]ֽgL~ L:HlZdya$<0܇|,' ΢k"{oeD1{IgZB8 OݦI7и$Sa6ѯ,ڼc7mc$&s.6!s(Qʾ O%T!o*둃Z"|CybA5|_^ E؞I*+)ktPl̊[FUXx1ԕM셴絯 yl2 @U?Ь-Ցhi-qگj_Nnwr$nt1N<{ FIIF$t7)fK# Y2yMaS9{8f#y ;a, ZaA$y>cBC"1|>fiZmQu\,*M>fW=0{Qc<.rF}qyH"!=HȔ3TTmaǡɒ&YuG VJ%ʇ$Ud;PJ!DMuÒ JZRacfMbyz>䤆 ]b1ۦBQv799~[|@М{'2R%/s[R;s9&?d’~Q祩;ۋ ! '&V dٌꏣl)`f 섵9gkU_ ikl%"|'X7kwnKуz/>gx_X&l Շ(zmTASDSkF&uH|༝,琖A%xҊ6 {y xuD~DV$W<{?^#FP$KPMrO}OC*i O >ȾJ'pZ~&̳Mr:q&G٨`: OqoHib𫓄b(i!ބ9o՛+(A^HH.~En:&v+ddP~OU+|Ƹ֐>m HM!cסh9:_ꡉDe%jW%Q5a%$T'٭Fڎ ێ<4)Vrf(psC-?ddP ;8URi)m0lF9'%ՊbUˉ5T1WLd Crȉtv$#uG:+oy*8"&2Ac.X"'Wx$ÿ^lq٥v0?3i)0vv? A/Za'^-DpTld1(]K+!+VP6%V'j6󆄱f@&Er3ǨUr$(,(5U0p.AKG* 70-CǗ GY^ rkIbʼn-5y4uZ)<4W ;Ȟi_{#duy vbĩ$Au Z%TiӔW}X 2)'ed B#Ґzi;tu  ($s K ;pN=~gю)!u.|[c7[D?ALJۂ{B~} $2ƥfW=YI2";#igIfr3$}#ڹr /c@RS&ӰzO~tBKuQ Y9gtΎjf3Z &B;D~ F(Ƴx`sjT$Rgy/ VAB֨:@d]dtWc/KC#4.aiH7ܮDc2lB3 -W"VSڦJ[ǖ"_ -vfU3O/6GVO';MvFs;&J Ü0|I/AVT9y…r̲@kn%n 0NǸz21m}M-0GGα^/ߜxg_ZI&Ni{7B-a⃸4FVҁƂKw5-1n$_񋒎vFJK"A᳚ =o0 Vi#\eW@BsH|uE l"{w1=ޯHf ؓSpӛƴ3Exhv?6YVWdḩxR8nZ ݫc|H+Q A8%A邬$cAh"pCZ6F20| J_ڮB%zp9"mc͇Jr8+"';e?N j""!*a-|NŰאp 4z=hC6MNZsd+P3ii{?W]!2fԇډFq;C 7@ 8usm#Lu%ӭ qoOVڑIh,mxTy)Ɖ˔aI`0ܶ4Gt5:CTt5v;*\,(3tq6 LjAŸ,ɢ fo Wg~@ (15BH4T8}o,XYf:Kb5G?QAS{HZ#/@nQcn.-I yM+ЧݓNdRzV8QoWNw̾ZWyM,&ezfr.!.+wm%YA9@1MrxlBd5 9&ԡSy®onvJ#B0})H\"֠Ƌ&YNzw.jQaҁ>$K}\'˴g* 3I+1|W܊g D+ gWC~Z0B.8Nz_K~BR!`@IK]* D\)cGs*pECi)v^q&/oCɻZ˗tkk1]h5^9qE_- RkMCyeRQ"[ )Jz2/uCEwG@NFa{X/Š3w‚;| L"ߍ:=;=!Øxq i̺&Ͱb׽bIFŜZT6%ժe)D#nl^i_ ,L3z2ުd.決wk6/?m`5۲+`LSZLvy .+{KNYe{pn}B ن0k{eSNr+jJa-+L.-qu`M`@vs~kldalҊ $Z{2X]- ^(?meЏ!2lɇ]H#1ւlb~- V fL5> M '֡>Un{ %ak}cEat}@*cM\n*es`βE.]!LCflI<^-zf'%u'Ȯ=W<':`YT֪bM~/"7-`@DQ;) ']TIC׵9;QMN`+%1X|PSbs<#/-;5:_?&sFW7~,!^] 9XVTa鈇8:맨:Օ*wُNA+h6k(*p- `2Z>P`DP,Fv =KLzqc]W,t=y̘e}s(y X?\n`|Jo`V5Z6 fA ֖`JHL3BR!fxpBrI2-*Sc;guʒdU6*LINM@xÀxz+qb` IQ%ukgj"YXgCӁZ2e*G t/<  -! Jo+ˮj%goo͒ eҤK! @Ѽo[2þ]AM(kW-=mCZ;꓾%i0c`q@PT{Ӛrމғ(( c?|X=}Aޠ.]v.~7"H@wd?:CM#a c,Nr ? 4ڢ8o& & l>G3]ӵؕ~֔uG>k{7vlrw yWCndIxZbY>줵>x)~00\@ I.</$cp"XnMT2-@ Pí ri3FsG=}gu.~4" 5JܫսtTU{q]$[lW$`:!1g SVcxq6!H"P$?][c-VJrjGnsiM98,~.YK)T0k =Qڈ2~vİ4XH5zJsh{9L-l&pm.h*ioW~c].-cm0u3WUgui'O;Yq8w½B^nO <+(,vJL(Әᠾ'n-RwW<%]Tn4$B`̡S,U֟/J((#Z䆺MI^;cJ* F1VqmfSP:]E.Y/<T$j]Q4vMD5L&{x+3lL~4}~4JzVVJޫ{.|b T-( 2O9FiX!T|vJR­}©**NJ⽡BZtsDV׿OW&W= 0L-Ղ7hЮ~6]J,bhz8z 4٢2wR;ۊKB{$ٳ͘-dF8mO֍S{WޚƲ(pdXzVP׳z/Y]qU(ف Ol~ϤŕBp >&dXS"NHD'tR!-y/P'x%3˻ZhP1O UXNo>h(c)X=nxV{H9rJ8U+ D.9ғ*r4nV6oXSQ籯@Xh֌N`9cͫcm˕4<N[Nҹ!j3Sq]t\Mkq2'\;2;\n,Tٿzs>|8ZI !Ø{Ϙ W,P&̯4:08"&I1|8$ggb)svhS\Ig{oxs@^! Q5 fN0/Q>ZȓCT"5Cº.D4ㆱpdzx;qKi7fb\:7*'4YӤ+ݖ3Tj`[ytQH7gw'\H".,uYMD8oWqx׸6v[3m6vYp^BqWA1C7z^rdQl1Y6gee)b2U --9$=5/e5E^< O&ϼ~~ܡ,[?v]"NTOg붣Z'թX{i;X) iV_m8̛{5V@ r!^r <q5O7p]l~__1r.YzkEV1C\4t@F/>F7fX5$f6_t~m8*q6̙*͢1nT+!׍yh!ezE Me#!!$| Nj/13NS-VQl5dKPFk{/`IIZcj 8bޭquɞbwW@۰v?껻w"n0whf/;-?'\^ 37MWZ#j#8koq9 mPJj䥿]4H*-i@iqqF3{ޠtO.+L6i4g[Pb_. DZ \%>U6;c91'?'HwWj:i3]qYũt+ha{ .M7"4k0 #dv+9PE*ZWw +*) 9,bvs/U^)zeO`/Oz}tG;f'QX(7] po{o|Z|x QM"`(CQ}OשR$h!yOwymwl"o2!K3_"3~g϶*'H(!4 ky:_cԖ3Uḿm0B:qzXŽ96DlG=gC6g1<*MnQQS8F|ji7[/kaZ?։{Wv<m&yotZV(QxAF$P3:_h/I9̀Cj\opd=vtSELt{M n?E\`A)73ZH/O( Odߊ_ ${G!@|K Q맬eٱ)뷆t';򦳅~<&BTfBJ^Y`j>AH SimuPQIq2F^Qj1nt˨7N+ʾ  ?t 7Fp&]# S}nۨb sf#B=ϽI݁5>Bc%嵷CخuEşV3UgG(fvHF-Cr0/,l!aA8ݜ||~  fTg %$2hnIUGLږˏ7slzh{1.6'ZM` {/G4~3XIMX 6Hl< 2| ޭs>2;)$n۽Gjm X:*It D_Jf^W2mnx#L8L2?j]c]~c2nY47Uzw ҫcݲx ɮ쌂I[9P'X_sF޾ET8RisRO5ot(ok)YebHJsV;7ֹlS,OL[4s`@l]-Rc)iŢ$k!KWP-k=8v)\e)1_{_֓ ͈*8hX[,QAwՃĴ]ԝ H5u&D`Ѿt $ w|[zzg1?l_}&K '>c`aFݯuDQ Xn1ri2W2&V}~/T񏪮5ZXD/Qe_fVa!Zݘjw6wĢN̲952/pf;>dnf8mXI ܀6/cPԡRA ]aq|I\ydJ> @Zc@qY?PgVoD/jy%i >#/={!̖ȱ]LK5\|m4<ݭ,h2d]̛r(lگÙ'b$3o jj 5NoUҬօ|lwxR0p5lN_:cJ?]V;+=adXVB_u C [ΰۂ*Ѹ[;X!sE^1! L$UgWB0*6*;v H+t2Jyݴ޾1~'Q3< _SLͤF9\u_uHoץ߷VL\xk@A^r+u I;6L͈U@~41mYxW_ePs9lXqIȤvszJ`$ c\ASTUꕦyMyT{M_O _2 5=A%;Ҝic-YռeSOF6m WY(>N "BVf&"YIc?f9'֔?A݉2TgYRؒÈ%zPNtk_=;moxcC<x{!C=Вi4A:,`siy^Qm$b)`NY̿ +n/AZ/JP"yD$=iX_+2F|CpeL6\D$CF<`A}aJrIs3mr#"Ec}܎2ZEI}NS`R+u]PAD 3ʢS`R:=Pk%!H;/nՀ旭úɔQ{Щ1j Qh祻R4B2( "g !rs-t`QI×"(k<^޽ԻukTRF3 k1|,5R\G^N%qOɾ¬t<zF+棫2oq|2I\.c*j5]GRS:Ã妬i)!K _8U,(%_ygLNl9DiomK޹o"^ BxQpˡ!WkRDesWQa32|yଶeR(˜IE~uWl#l;n?"Ϭ/HI*:guʦh!k('lZ:/2 :td̎X9*.  #MEtbtP[iOz_S- FVX-(]rg-MxSA]>ex30m=2\t! |^k >O5+QVӖqEFwivO>85HgTw+2tCVpZAK4\F?RC;bNFI372?h31Rwun8AifS2VX "C2Ax݀zj_!4,Hi1;,nGY|=3fYtZ{ M$#ZF, $SEaQjb"v_X=u#w"V^l0[zPѠf0pŦM\PmXCBoZȋ/;dl_K[ ZoVxUɻ{aK磟ye QA`RZK3Gjvͼ<ke.1 F@tz"e#(LEn者{g5} R`-GH&Ϳh/s%o|4j.˕;)94߼Ed6;F|rt!JaiX,`XUz.T;|<2dA fu121њŘl^&-6KJ\Y{WWS+dxnY;P{֐@Jlk`pj|;j$+!AhV9-(꽅RΉ=A D:~ndUAkϪ6!'ng}ϰjc=v){dW@Ì J`׌( rMޕծW"OCë-5rĹ|t֧͢h*B/nAjEvVO2&X6,T6ޠ[Jd&r-̭b|9 T~.YMޟ `_dZI` h3sF-SC듖I{G~è}Tp8GJRK8cGӠ%/oƵKnh$+amhA#ƃB: hXt =z~R~VKQFoQ}mP3 r̂6%11>n1Km=_r0ğpUCPSU~;p0lȘ;(r9n#dzu Vq7M7l;;jLnEݭjYpk!U)S r*ID$7)KW,vhIdAm1Z]S@"J!I/}C6`K(r?(C\8"޴c-0ƟU[6K =Q=ȶMճX6[druܝ}L>^GT.Qk dbdpjLAT< nƂ\C3;A| !0`-'Cu&cɼD[iܗiPTĬ+  i8O=D>uY@ @Nnf6iղd;;gcL '2xu 1)5;Cu$+Ɉ_#I+mQ ca:f,r,gvEp昇.F߈rx Q=׼ [^`NTlIWڝ +NsUU%kF5&R?vٝr2jı8zc z xi<{t3fR18Jh`̗״(Rʂ&]#!zL'GwwG'% X #b\bG\nG-dƖ=0n') nG=03~VY%F8NBNW>yY.+q3If!}ag/ 9BF˘b+Y8 Sl_V8S^!ݝ,~?ή#WFK[ԔP}ms x*lOU܏2j~Qo3<;+ &drż$-@rcvo<f!+&vCK<~Z9ji[N] 7X [B(E?,suWvzt{u=qP(X%ebye'Y+Z5zM{ax5:a|7XKr-ak' SRQdV$ٟh ٹHK2PqRK 1a PGf4k$ބ8&u"@v&sb~umnZbW4̃ƶ[O6Mᗤ~0!pg^zNd__W6rv<h+Tj,v&v!$n-C?[貤-]g!ͽA`]L_v M3ěΦ؟A {k:%u}JO# 3ѰIZ”_|Zzh0d|Y޺wwIS<СrYkx;:' C_[Q͹ΛĪ)ܳ9>MèGCig{26Tl=FeFX>PI$$Fu\oC5k0Yof.8 kfʾr2D^jاqsl 0[7w{ Z6?2}\6 o'O/Lޝ#?4np$}+p`RbgxpPVɍS՘Qht  [otb97L3A(|q gD68^݊N;!8KqucU ,/Rɬ> [>3J;fGH\]syĻ(Pk_yDuKanJE8Tx%@~ CT敎M-0nd&̨fuH:[`bYotfP"OW6[{~ņf/QR!̩ %t%+'-tXRspNW[Uw9RȪ Jf>΂e#t.tI~4{'̧'q@VPV]=k< Zx̀%A-|No;Mh8/MUxSrJ?{lLS 0YnKPZ:G|$j1=9+.™H(L__o1:(~h?iqsf|OFuNNM[wZ/=%\ܖ|~tC Y|~ U$zYyy(Ǩǫ<,n2@?oAF@K0'h㔄$>.>2%GZ'ͼD[͸@! 1Sx,Uk0}|/;}IJմ# t$ ŃpɟiFqH6&<va U eS Jl&"xd6tpl0wp)ĒXidY@uhS2G4!BzU)ҭ@= & 8\5pWƮn*H/5Cۓf-Фv07g .y`sp6g7seDZ%,v}h\)@jMvD"W\ Le 0ǂsu#tt*k +4D> =k#,P;B09("G¿ 8FQjxNUSUV 2ѵGX#&/KfFt`PȧaqRB} p 3\l`¸GU1ޮ* @(VְqW.+ţ*ths#QBm>/`I)5:] 0`Zڎ fHLk/ݳdy2Hz4H%v̨Yn#En2p\Q<0wW:Mq+{y(_=YbeZF憀1?,SZq\ٝF2$&=<#~j ۺYsHt_%AYsCqa9i[#?A,%ر@{ ljc7y#Mc.d͂@]7 &;C]GRci!U"\ ^G=KpmkSt*Gߘ1m+JdzmgH,vnV4=y@Q}dt:C&5R&S06),QGu)^AR>X{cn^d5Ի#M}oPdϨ G&hq[wF2IaF: _J( kHsȡ=8u2|yDD&y:ډӉKxr07kRC-T{ Bbp BO/grA-;^-MI*Lq~ðFC?X^r|ǽ -I 䋕W4/Xd%hFR﫴? o?*ʁPu KbaM5YB prJ}SeKкH(i #ˆ 9~Vi?l5dCtڷqs !ǒ*ق _u=ܕFk5-z$it$W3";Y,c`TF[G Hi=M߾*nٷt'asr"Ϲ/ NVm]Zy\B㌇֔s۫< |^՚ю*^|T9/4Cvl%)M;.$Uuis*'l7rbmEL!C_ThHV?pK?;ca,>>iAs\vy=|ᲞϩsFKwE вVԕeEPg;r/w _U%8+x66і& eX,#c`<1)e`xWz Nj[\1$bd7[;O%W`8.:"$ĚP~b}esH7Ȃ DZo0AĂh6OA| ú60DGAr~QHUIdO 49{[@CV,A0E wڇPF]z(P7,w ZBp{ xS .Zwz\lѤE j3:,kC-akR/_ِW!wC-_*J8~r"cOi* hЍi!x E4a4cx\ c-ϊ66ڸw#ۏl 2?{v~y3UJ7~x.2s nrf7B˓d.~ಙZ3j6a,6,٭1C.7@zXn^_,1?Y*oݷ^Q|̳r]v$8U'tg0 6CdkߣkX'*UD %&YvY}L"ҎըMWKv>M1Ii0P$W2yZv1Iz8q/e~ kWEr$d4X?iB|9?D*cTYÉYyd,"+4F{Wx'5{~,;}zLz×Up l{ef]-Kզ|2&uHI "f#Tau+;!ja^*o1 ֚”tu%eoO.-ϰ GICzY /*C^Arb/HUh!_Do;qg[OWzhue<ي4+\JÁGS>*VȈQ|vB臌 `zt!3ztھ* 3pИG9#Vs3?4+%lW*b[Qe .yu>P9l@"\)oy wĸ%E[vfζX涵3&Q`a&|& yԳLf[(I0x!Hqbr#_Kg7t`1mxPAsˑ(@?92I! Me1N3c3*j?]ͦvJqAUH{enHS!FM`TSӇp1 8* *=jUT% Y^u3HwҒBMj ' ߃纆lXPѥ]$͐\e_P8l$r$~uv<*)t`C|@aϠ  qHw룚ݬ yܹX) VVJD'DK {F' Kov*:$+z(GCF+|j _IC0T:[Da y|=N:Vޅ!o;̬">z{u6}w^6ӂI&)_zqWq_ᴁFMP X*P3u#H*Lcդ2T،S3׉[vWCv|go9]*9PT#%mv}P[SΈ*`.p"d\8'%琾 J҈޺^Q r,4%cX f.~ ze #C.5NuUd)X>ܘK6'Vhi#[l+eVFѺʒRd9J&0,ĀLQ^T7:of>-k{-.Շ5?SVE<%gJX9Yyfw'݆P 9%X*4EoA`!qySCfAn2\'e0 3 V4[̝-=jRO]."]'T0Jه]k5C~ѫ:k,ЊE˖(H򁺻oGSlA Z>~xkxr:9uT^C͵(QGP?g(=?q됴R&3@$asݼ^۞qxA*R1ݔ)A ~*?C#1fdvFBj̾yZpa8j,ڔK/P"&ۃQC. /CN_]0Bj_*[2@R[(Ӹ !pfv$&ۥʾ1. Y4Wk8d:zvZ-S(E3xf}$;[fuՊƲϜe,iP+D,y G$E5OLynf1}|jф6ʤNH}ޯ2;|n鋨/)'·&/(jweurݦ}UW94qz#Mk3ol.)Y/sg7DFU3T~ SK4c-C1}xIޕWX#M{`E|WYZDzBshSӠaS:VxIVyљ]ۘ~LP4\A`)`Υ1!rQ {zځT+6:՘.,Ә?)uСs9 /FcQ*j_Avà[Lͯ@\ItsÄ~tD5ƍѲ G^>}JwHݷ t,'t6e ƘT;`P-sa)ifluQ2ycAkT';˚V40AfG`39 JA7=E8%F́Eb;'i!V!g-x7 =83T%Rdt$:6׌1I-lDjP7xOR1#Iv~!H>Yߢc5_Je]%=~sW&BIMŽA#Oٱ!<_Rзg#Cꪝ(9H*$=`8L皢`P#& hV#EՒ%7@SލP {#"Qs/d.~Q]⧥.m%. 2^C)~6uzSw|T7~wY;N>t7"0K SelpkXQWH +@A}<ּFTKhz ͞lNGZ]>:^ I]|3shNم@phQrE)D &]A{w*Xaa(g/ȗ !QBFKIC ?Oxe^i! gZlo7h9`O  W^L+Mm,;}g8U(8=B}Cob'n{%eUxϐ7?b|P|%]N]aKcn?'e>h GmPdjm73p[Bg Vc33}?vo5ܕ3*ڶ[MPx %YLc4 nZK3W1qoo1el,\MSr[=$amM'0ij@>b뜧vMF x-h;//O%ړإI߅$v%5O|ӡw >|,+U5K,=:pO|.t|XphA5Y5?;#Q1Gn_&Ztix.-ߡ\i3fAa  ܼsԦ].X..ENZD| q6rnr vE7rpÞyճVb~| p$c yHpDn1EŎ8[ZF/!*p qoowLiO<0`+lG95[ZaMRj7Ƿ@̷55b |.ڴD|:^S]VkYI"P s+$Z;+ogudҏHյosN`g_frX@cť-& Ekh(;ը5YY)Q6dS%E͜ˍqb 8moNr_VrWgMd5q/7yoC~}na217ʔ a2K$~ _WUjo(aKw\|CeßP.jNRAVsg$jvuy(SMN?ぶ(h١?xO̼݉vr"w7hڥ&y4cbTҞ,qMd:/?{h1fDFzj'CZ7g 0O$] VK7f6NEQw8˘UՕBsH^ Om譿 e^~ś)nrLJ ]@ty/{Ʌ!nL K4_$hp=үz$PVMs}[TmPn 86YVmrQ=IH"Τ1izV6ْVēu/\ sFxSؿ!jByTcs9{i2:%0=sB3O%O@Y٫񦰥J(_gyoοH{lʏ|57p?$V;?.x3vd,^Tu{ZVIuFmnLE(QΣxMpzK5KXӉaahzu$0s|q}c7E{8z} gefy""H5F)cq⸞1q7\~+0Ad>c,#B&oq `[r}ҽF:+6 ~jw"OE6_D OII3qhF9pɖxg.A5}R<C q\أ r-g}҄|5V$҇5#&X;x-cCVc`9)>Xftg^@2w3,Gx69{B&˘FmRN\Xx-YZ/?FlaFPypxA5h5,@b;?7$٨]*V\I1> J 梜ҘF_xM,qRHd\lu+6`j fs vi6/\zf= NWJp㔔ܷt^Q Z.o\!$I*i%&9+3e4LIᆶ 9 W _'%-vAДYR`Gx;i@ i'lVy Iw:O^ULCXƝFQt/|"\ :Dn+'f2 /X[~!8*kl; ;"IݴTG~V4% JβGuvgh'n ,[$ I gj~' /#̿uM,]mzZMw̽ &ȣѭcEx t xUzdUPd-ژso-K&5 I]NWeuhwL6<a ڼɦBi}6uׇ$3 T-e}n I8x$yTfS0ٿc.KD#SI_X=]xpZi9>\ZѵX`ΐN#ޢ]f;D!Ckԭkwyi)6ThG+>dMTEkA&M6GN*ǚпHRJgT4=>-_hO_{F5, ܏Jω06Ҵ콺^N;G$t]_2RӀigԬsJ6/)%]fw.*n 4愻*"&W{V/JϦqF4?ήXl(LjRmRQuD7d9Dǵ>Q.-ڭ=kw0&sg߸bY7 yo 4N{[2}O)l s|x9dBԑ'Ev u'sLȂom_WHX2x uNla"jE ?ӚИ a/ณZJҽ{qNބsQ+o'2ʧ#{` M ÅuZĥd>\dd[?Re=es> N>bTT!+QʎI|KPX"~>T?;6z971(ɋl[G&|K|P|fgNjL#Dߗgr܊je]/סյtcXeN@gʼn&?(M.N 'ĘunA*{ɀOj{dJH"4OK`8RcL-f{ a !3٫l,zZ6QBL,?ӿgcsȊs]͕3]-빛6MXBX\,}ƒt!3jV5ˮdmψ[/`;F66;R/| 7mv_cv}&o|WfImsiSbȹ ;} HYdf|auH8ۮF/Jk Zs_uENڟ-o7P,$doʨkA@W?"N*O`3E2F ѴQv7 a}Pf"=0G.q8Vc)]3E˘R [6)=fO( 43O;1<%BLAQa9L*OʄӿE{OHw|Zp1:kǶ%{$j?/MފղYMXhDT}}Z=Q+;ηVH!EWԹoe#ݦ%h-IXI4۝uOQ3S>d8dSm[Av5b&23!"mpX?W"NJc__ʑsyp7?NncI!Z!FlH-Q%: ?E++z w0QbhRG9,+і-><ʺwȉ;YǓ _ک\n6+R33R :aneq"᪫;Xv,܁s$!&WptpH_S~j zTѶ1)P1KPFH2&e!Pc,W}/C &U2$_t&#+j\E\ Jdl:*|ٜb^pgSE&'4+E⸤W;F9?G0$48i9Wd(ùTzniAWԕt*xdk&(=)ioɻ+=GoC9w/ 08PL;낅 Xeܩit5Ry 2-ҕa%KDtBM9h7N|,7(}Jd+U:ou|.w|Nn-@jw-EjD؛$rQGz) !~EEXA:ii?J+0eI)0TR~㲰J1:oȏv-ٲ z#Ĺ3%/e~EƑ7"w,d`v 6RԺ 2i&O*%\BNZ\p3'-/[ݕtɋpVuQ^G)`*ܶ*P+% $ ĘTŵ|L7m5r^,"TRuVg0D֥77}1gK WPV0Up&_z If[90JN.Wx}xF(x"|BơأRnr )e<p_m]Jm>2тU+şx ܢ/1;vv3OV"@)X~|x~y}I^X8PH o>bN0䂍_@ =ߙeypӻEno2wI%&s\?&`902`JzmhaiNY4`r !Ѧzιu=\ž9]"FY760O`*8qg<,pTJ1*Q8IvyN r1%b7)n/>MSay/~<ӉAc$aL7DQo(1v5%s^8]5ͬ哯I v^\d,{%AU ¦̮@ +;d޾-B,JQ"0$4mcP# OEyW~8+I2;>Fk;mbծu}AEyRQMJY2̍ýX;ȅfzs5Es'"un&(W7p("Gjԟ32X.ɘmPhIk nrb .(R> .x X]X<_<N`Ĉl^6z*Ah~iw4T6[A2T$g7F^.>gch{PlpR%1I@R}޼@KH>ZS?S~tWfI m,1]L2C86Ic>XEv,*}$"|`|XD{B*;/ dsv7,^xqL֎`ᗒ/wIGGdĴ:H|Usܖp bbs¤\<֝8d^];c3"OI% w(s ڠU5ɐt%h!{[I0){8F)=ݽ+*Y= Qf9I?ok6rƬM*Xx1wzJ#*F<ʤY.i`^t4c ս 괪C,5Cp@q̷N@Ki{B3#E|!cA+̤{;d.%eK6􉩆>AY P%G쐰V=L|ڠ=u?w&lr ġRPcFt2bGՔf8_]d Tz v!4$K"UJO{M!<.a]aqUMo,8o9[`=gxio|nE?(o}xeP_Vy!pK  ҅gxEx;ao7DbU1!\ݽr[@Z3TcV5%R:iyFR^B$6sNj%^P`C){G";Bʺ?vyMk6;#P))F|e|)3IB*Hg:,jzzDA;d36?;HiNlkÁT;2xG+H uĜ7]jE$؉YI\M:/Qt֍\V+&=21cto(D4Mo~@d̆AL[6<Pat DA&{fC E$6қo-|@Zm1tUY(Ʃ,BpC^DO pqߑm-P[pً{K·#FgKT߰\<Ym6vEi0&O[6P.j;@N@P(ݭT(ډsΙg8Hh6 {Bk1Waw {~=zh2f%CrIma?C">i> 0|<{6PW1Յ7$Re zd) R%*>pz^3uPӞ $M@Gu1 Ι6Nva墱~縒"xv3 V?mIo5o^:Ղ ۆtz VMkGX]5JZZr\fƀ"HADB뮱nbUHƞ2}lG\@Ԁ*$ˢLj9cz&36kBWk9o9\xV?c9bB ]7sj3kY^5moy2 7˝mU%D_>~wMڃTU z}G7~]5yD@8@A3qbN-p0hH]/-Ʋzx vip牧jLW{6J (-OR"H8wt,T5G#2tx`S:sy@sXOoVp_*I+H-wM=D;i qgq)gχ{v`@/WY ͜O$Ø QHKrf[L7Z³%K  <ІRD"NJ>MT 53LT5DXgD<߫&"P-v~ C]<3JF J??)17O°:3!*C.Ug6׫WԂo6v@,ҁ?4eGQFRWe=~V]ȝ=ՇzO( c"'!YA9eAM.nлוjH7ڇaɢƲXǗ37[Ud7}s60J rlXsҘ%Ӧ1}#rYIK ~\ ڊKa2Oc[KyTO9Rsl=4!Ol@'vBgb9B@P1;W2+_IΡvHzDS+;8"{Lگř'"j{Cj"g9A8(,~r`:N}]zٵtX[9twrc}ނSC[ # } H@¬:~Ы _"cPM` >9d=Ə^Y~` [r -`Ӱ614ŤO6Ecl1yUZ)d5ϟbrW=Lt}F7 HA}X0]gTJoO,ӫ +8+UiMdm-|͇{ rY*P=k襒F^,}X8gnk)Scx_/ћrXF,L)^H7&尡#'sJztӰ1v$cczkl܂"HV8mɒC{mb{hIx)ʪ-&-n)`f=0L fW?C3q"([%EMcngXw'Á\{.@FF3>3茮& Mgoo&]6o:∟QZl^aYx^bYbM'-M}TȻj*Ee!q'H69/$y;0n)`ASDG8̕]<3$Be.[y\u~`Oha#*V4qw+5I'[,%ywh\s'i~Kz{cPnU=%@`7>sO kKffTSjEV;.SR'J`(Cq 0ֽo|*"~b=\<Z7°DR뚝  }ǖo튽.mښʇWjgwAŒff; C<C- R{1ؔM5VYGOԮ Ŝ檣aVkL^{"DA=ilUlmuj Ybb_u*P;~YT\Ѫkץ0~,k3'en)h(g P H0D/LP:~0_AKnt>bm(`ZrHB1X{ [B |'ua89(2u}>x'KhR^Ks3CMY4YmgNM4(bK$XFw2A9dj9OWC冬8_XhW 0U0< *K眝Y}?5G[:}J Z#F[d=Ѭ/> 8#Փ`%ENVyĝ1h~.v"\uѹvUl,Ex,W|5]f~cP7_g &y0U0..k+95*HvN:bKp7;M%Q v }^ÆֺC.w 0꫘KO6:zD.Ei>F0OۯMR=Y#@7}5E9 wk >:72~YwWrY#A ]B׺DzXJ.85{1V5biRly+穢2M*]]9;3O =0G!TofAVX)\?CD@@ȑWi~:6XT i:wqu3!` nVe^o͹3y~LY6ʺlgYTk_׆]kfCB_s)Ɍ;$k> F}ּ]ď 4@y!9#Ȋ;Z=k;#^>2Lʧ+J>~~ɡCd]NR/`M")D  7j |0^`19m!pDRc걔zY|:S$¯ 9!Dk<3eWa ClL m+-JӦ+*+[#e[:8K1aqd+iLu)A&Ǥ;tm qC5hH3c~X~ɚ?&Ct, =eaXu.l,g]tIL}^'}X^02?ߠEWm9wYi6fezbtΒ"۽D?NI98UhF_-+:nOwm/T""{IKgK6WvaAwIXiԎ6$.bKnaLʎ 4h;|& ɫ?b %i>a:EB>9DӅFR05{MII i@Sj`K[BkwW!\?Q8jއ4{4{R]%?cE= ig [,CCKc#A`E8}!Kb9JWX7,X9&V-,;ni޲4Ui[[`AtR XapvMkQ;6E; rl$ME]bvO߆=49$C٬~6h33jm^S/pU:&7[R]b@k't b/W[_k\z u1q mֻfثf.djj Kԃ')4P6o_􄒥1^E`ɞG8^*PB\y|3/Ap&ˬMs#B cNO}0M͖|0 .fS8qF'{:|4-js Ox@KV{Y34NY!ϊq$^$u=Y%c2.Lp>eBчqDQk$l*R'fBy;t!fQ#;$Tٷ~ 1^9 ,t 7%,љ\Zwy41ۋq*1MC&L?RU*qs&X; ~|v~{gB7ۥ=+ _i}h7x+>P&!: ט,ЉDŽ8JPhVPh ' d-t])@v0b %°iqSdnG5O<EŰtERޯYibMwX|`myP|;ZHrN@">R3=e@d>`BNaY9qҡh*ۦqry-r iR0 9ny(g1{xd3uOjmpj,~ъ" n4z