Merge branch 'master' into xwidget

This commit is contained in:
Joakim Verona 2015-02-01 00:37:46 +01:00
commit 69815dfe37
95 changed files with 3219 additions and 1875 deletions

View file

@ -1,12 +1,31 @@
2015-01-28 Paul Eggert <eggert@cs.ucla.edu>
Merge from gnulib and try to repair bad merge
This attempts to repair problems introduced by the bad merge
5491fd1098d27b3ba3db054076b9ab60fb3558dc. The easiest way for me
to fix the badly-merged gnulib files was to run
'admin/merge-gnulib', so I did that, which also imported the
following changes:
* build-aux/update-copyright, m4/gnulib.m4:
Update from gnulib, incorporating:
2015-01-15 time: port to MinGW32 3.21
2015-01-15 update-copyright: apply to self
2015-01-11 update-copyright: recognize groff's \(co marker
2015-01-28 Eli Zaretskii <eliz@gnu.org>
* configure.ac (HAVE_W32): Abort with error message if
--without-toolkit-scroll-bars was specified. See
http://lists.gnu.org/archive/html/emacs-devel/2015-01/msg00525.html
for the details.
2015-01-27 Paul Eggert <eggert@cs.ucla.edu>
Port autogen.sh hook creation to Apple Git
Port autogen.sh hook creation to private templates
* autogen.sh: Do not assume that the hook samples exist.
This ports to git version 1.9.3 (Apple Git-50).
For some reason Apple decided to populate the git hooks directory
in a different way from the way that standard Git does it.
The downside is that patch applications won't be checked on Apple,
but that's better than autogen.sh failing.
This ports to developers who override templatedir in their Git
configuration. The downside is that patch applications won't be
checked, but that's better than autogen.sh failing.
Problem reported by Sam Steingold in:
http://lists.gnu.org/archive/html/emacs-devel/2015-01/msg00898.html

View file

@ -1,3 +1,7 @@
2015-01-28 Glenn Morris <rgm@gnu.org>
* update_autogen (commit): Prepend "# " to commit message.
2015-01-24 Paul Eggert <eggert@cs.ucla.edu>
Fix a couple of AM_V_GEN bugs

View file

@ -228,7 +228,7 @@ commit ()
echo "Committing..."
$vcs commit -m "Auto-commit of $type files." "$@" || return $?
$vcs commit -m "# Auto-commit of $type files." "$@" || return $?
[ "$vcs" = "git" ] && {
$vcs push || return $?

View file

@ -3,7 +3,7 @@ eval '(exit $?0)' && eval 'exec perl -wS -0777 -pi "$0" ${1+"$@"}'
if 0;
# Update an FSF copyright year list to include the current year.
my $VERSION = '2013-01-03.09:41'; # UTC
my $VERSION = '2015-01-15.20:53'; # UTC
# Copyright (C) 2009-2015 Free Software Foundation, Inc.
#
@ -124,7 +124,7 @@ use strict;
use warnings;
my $copyright_re = 'Copyright';
my $circle_c_re = '(?:\([cC]\)|@copyright{}|&copy;)';
my $circle_c_re = '(?:\([cC]\)|@copyright{}|\\\\\(co|&copy;)';
my $holder = $ENV{UPDATE_COPYRIGHT_HOLDER};
$holder ||= 'Free Software Foundation, Inc.';
my $prefix_max = 5;

View file

@ -1940,6 +1940,9 @@ CM_OBJ="cm.o"
XARGS_LIMIT=
if test "${HAVE_W32}" = "yes"; then
AC_DEFINE(HAVE_NTGUI, 1, [Define to use native MS Windows GUI.])
if test "$with_toolkit_scroll_bars" = "no"; then
AC_MSG_ERROR([Non-toolkit scroll bars are not implemented for w32 build.])
fi
AC_CHECK_TOOL(WINDRES, [windres],
[AC_MSG_ERROR([No resource compiler found.])])
W32_OBJ="w32fns.o w32menu.o w32reg.o w32font.o w32term.o"

View file

@ -1,3 +1,15 @@
2015-01-28 Eli Zaretskii <eliz@gnu.org>
* cmdargs.texi (Action Arguments): Clarify into which buffer
'--insert' inserts. (Bug#19694)
* programs.texi (Custom C Indent): Fix a typo. (Bug#19647)
2015-01-27 Ivan Shmakov <ivan@siamics.net>
* files.texi (File Archives): Document "I" for tar-new-entry.
(Bug#19274)
2014-12-31 Paul Eggert <eggert@cs.ucla.edu>
Less 'make' chatter for Emacs doc

View file

@ -165,9 +165,12 @@ Evaluate Lisp expression @var{expression}.
@item --insert=@var{file}
@opindex --insert
@cindex insert file contents, command-line argument
Insert the contents of @var{file} into the @file{*scratch*} buffer
(@pxref{Lisp Interaction}). This is like what @kbd{M-x insert-file}
does (@pxref{Misc File Ops}).
Insert the contents of @var{file} into the buffer that is current when
this command-line argument is processed. Usually, this is the
@file{*scratch*} buffer (@pxref{Lisp Interaction}), but if arguments
earlier on the command line visit files or switch buffers, that might
be a different buffer. The effect of this command-line argument is
like what @kbd{M-x insert-file} does (@pxref{Misc File Ops}).
@item --kill
@opindex --kill

View file

@ -1689,6 +1689,13 @@ likewise. @kbd{v} extracts a file into a buffer in View mode
another window, so you could edit the file and operate on the archive
simultaneously.
The @kbd{I} key adds a new (regular) file to the archive. The file
is initially empty, but can readily be edited using the commands
above. The command inserts the new file before the current one, so
that using it on the topmost line of the Tar buffer makes the new file
the first one in the archive, and using it at the end of the buffer
makes it the last one.
@kbd{d} marks a file for deletion when you later use @kbd{x}, and
@kbd{u} unmarks a file, as in Dired. @kbd{C} copies a file from the
archive to disk and @kbd{R} renames a file within the archive.

View file

@ -546,7 +546,7 @@ your selected @dfn{style} with the syntactic construct and adds this
onto the indentation of the @dfn{anchor statement}.
@table @kbd
@item C-c . @key{RET} @var{style} @key{RET}
@item C-c . @var{style} @key{RET}
Select a predefined style @var{style} (@code{c-set-style}).
@end table

View file

@ -1,3 +1,26 @@
2015-01-28 Eli Zaretskii <eliz@gnu.org>
* searching.texi (Regexp Search): Add a cross-reference to "Syntax
of Regexps". (Bug#19668)
2015-01-28 Daniel Koning <dk@danielkoning.com> (tiny change)
* commands.texi (Drag Events, Motion Events, Event Examples)
(Accessing Mouse): Describe actual range of values that mouse
position objects can have.
2015-01-28 Eli Zaretskii <eliz@gnu.org>
* display.texi (Manipulating Buttons): Explain more about the
'action' property. (Bug#19628)
* text.texi (Clickable Text): Improve indexing. (Bug#19629)
* variables.texi (Creating Buffer-Local): Improve indexing. (Bug#19608)
* frames.texi (Display Feature Testing): Make the description of
x-server-version and x-server-vendor less X-specific. (Bug#19502)
2015-01-15 Eli Zaretskii <eliz@gnu.org>
* streams.texi (Input Functions): Document 'set-binary-mode'.

View file

@ -1489,8 +1489,10 @@ prefix @samp{drag-}. For example, dragging the mouse with button 2
held down generates a @code{drag-mouse-2} event. The second and third
elements of the event give the starting and ending position of the
drag, as mouse position lists (@pxref{Click Events}). You can access
the second element of any mouse event in the same way, with no need to
distinguish drag events from others.
the second element of any mouse event in the same way. However, the
drag event may end outside the boundaries of the frame that was
initially selected. In that case, the third element's position list
contains that frame in place of a window.
The @samp{drag-} prefix follows the modifier key prefixes such as
@samp{C-} and @samp{M-}.
@ -1635,7 +1637,10 @@ represented by lists that look like this:
@noindent
@var{position} is a mouse position list (@pxref{Click Events}),
specifying the current position of the mouse cursor.
specifying the current position of the mouse cursor. As with the
end-position of a drag event, this position list may represent a
location outside the boundaries of the initially selected frame, in
which case the list contains that frame in place of a window.
The special form @code{track-mouse} enables generation of motion
events within its body. Outside of @code{track-mouse} forms, Emacs
@ -1850,6 +1855,14 @@ into another window. That produces a pair of events like these:
-453816))
@end smallexample
The frame with input focus might not take up the entire screen, and
the user might move the mouse outside the scope of the frame. Inside
the @code{track-mouse} special form, that produces an event like this:
@smallexample
(mouse-movement (#<frame *ielm* 0x102849a30> nil (563 . 205) 532301936))
@end smallexample
To handle a SIGUSR1 signal, define an interactive function, and
bind it to the @code{signal usr1} event sequence:
@ -2014,7 +2027,9 @@ Events}); and @code{nil} otherwise.
various parts of it:
@defun posn-window position
Return the window that @var{position} is in.
Return the window that @var{position} is in. If @var{position}
represents a location outside the frame where the event was initiated,
return that frame instead.
@end defun
@defun posn-area position

View file

@ -5735,10 +5735,12 @@ Set @var{button}'s @var{prop} property to @var{val}.
@end defun
@defun button-activate button &optional use-mouse-action
Call @var{button}'s @code{action} property (i.e., invoke it). If
@var{use-mouse-action} is non-@code{nil}, try to invoke the button's
@code{mouse-action} property instead of @code{action}; if the button
has no @code{mouse-action} property, use @code{action} as normal.
Call @var{button}'s @code{action} property (i.e., invoke the function
that is the value of that property, passing it the single argument
@var{button}). If @var{use-mouse-action} is non-@code{nil}, try to
invoke the button's @code{mouse-action} property instead of
@code{action}; if the button has no @code{mouse-action} property, use
@code{action} as normal.
@end defun
@defun button-label button

View file

@ -2782,20 +2782,26 @@ colors).
This function returns the number of color cells the screen supports.
@end defun
These functions obtain additional information specifically
about X displays.
These functions obtain additional information about the window
system in use where Emacs shows the specified @var{display}. (Their
names begin with @code{x-} for historical reasons.)
@defun x-server-version &optional display
This function returns the list of version numbers of the X server
running the display. The value is a list of three integers: the major
and minor version numbers of the X protocol, and the
distributor-specific release number of the X server software itself.
This function returns the list of version numbers of the GUI window
system running on @var{display}, such as the X server on GNU and Unix
systems. The value is a list of three integers: the major and minor
version numbers of the protocol, and the distributor-specific release
number of the window system software itself. On GNU and Unix systems,
these are normally the version of the X protocol and the
distributor-specific release number of the X server software. On
MS-Windows, this is the version of the Windows OS.
@end defun
@defun x-server-vendor &optional display
This function returns the ``vendor'' that provided the X server
software (as a string). Really this means whoever distributes the X
server.
This function returns the ``vendor'' that provided the window system
software (as a string). On GNU and Unix systems this really means
whoever distributes the X server. On MS-Windows this is the vendor ID
string of the Windows OS (Microsoft).
When the developers of X labeled software distributors as
``vendors'', they showed their false assumption that no system could

View file

@ -988,10 +988,11 @@ list of characters @var{chars}.
@cindex searching for regexp
In GNU Emacs, you can search for the next match for a regular
expression either incrementally or not. For incremental search
commands, see @ref{Regexp Search, , Regular Expression Search, emacs,
The GNU Emacs Manual}. Here we describe only the search functions
useful in programs. The principal one is @code{re-search-forward}.
expression (@pxref{Syntax of Regexps}) either incrementally or not.
For incremental search commands, see @ref{Regexp Search, , Regular
Expression Search, emacs, The GNU Emacs Manual}. Here we describe
only the search functions useful in programs. The principal one is
@code{re-search-forward}.
These search functions convert the regular expression to multibyte if
the buffer is multibyte; they convert the regular expression to unibyte

View file

@ -3731,6 +3731,7 @@ clicks on the link quickly without moving the mouse. This behavior is
controlled by the user option @code{mouse-1-click-follows-link}.
@xref{Mouse References,,, emacs, The GNU Emacs Manual}.
@cindex follow-link (text or overlay property)
To set up the link so that it obeys
@code{mouse-1-click-follows-link}, you must either (1) apply a
@code{follow-link} text or overlay property to the link text, or (2)

View file

@ -1403,6 +1403,7 @@ buffer-local variable interactively, just as it is useful to create
buffer-local variables interactively.
@end deffn
@cindex local variables, killed by major mode
@defun kill-all-local-variables
This function eliminates all the buffer-local variable bindings of the
current buffer except for variables marked as ``permanent'' and local

View file

@ -8,7 +8,7 @@
@copying
This file documents the GNU Emacs Web Wowser (EWW) package.
Copyright @copyright{} 2014-2015 Free Software Foundation, Inc.
Copyright @copyright{} 2014--2015 Free Software Foundation, Inc.
@quotation
Permission is granted to copy, distribute and/or modify this document

View file

@ -15,7 +15,7 @@
This file describes how to use Info, the menu-driven GNU
documentation system.
Copyright @copyright{} 1989, 1992, 1996--2014 Free Software Foundation, Inc.
Copyright @copyright{} 1989, 1992, 1996--2015 Free Software Foundation, Inc.
@quotation
Permission is granted to copy, distribute and/or modify this document

View file

@ -1,3 +1,18 @@
2015-01-29 Francesc Rocher <francesc.rocher@gmail.com>
* images/splash.svg, images/splash.png:
* images/splash.pbm, images/splash.xpm, images/README:
Splash images refurbished.
2015-01-28 Eli Zaretskii <eliz@gnu.org>
* tutorials/TUTORIAL.he: Use u+05f4 HEBREW PUNCTUATION GERSHAYIM
instead of u+0022 QUOTATION MARK in Hebrew acronyms.
2015-01-27 Ivan Shmakov <ivan@siamics.net>
* NEWS: Mention the new tar-new-entry command. (Bug#19274)
2015-01-27 Thomas Fitzsimmons <fitzsim@fitzsim.org>
* NEWS: Document EUDC improvements.

View file

@ -527,6 +527,10 @@ to avoid interfering with the kill ring.
allow overriding the regular expression that recognizes the ldapsearch
command line's password prompt.
+++
** tar-mode: new `tar-new-entry' command, allowing for new members to
be added to the archive.
** Obsolete packages
---

View file

@ -25,12 +25,12 @@ File: mh-logo.xpm
Author: Satyaki Das
Copyright (C) 2003-2015 Free Software Foundation, Inc.
Files: splash.pbm, splash.xpm, gnus.pbm
Files: gnus.pbm
Author: Luis Fernandes <elf@ee.ryerson.ca>
Copyright (C) 2001-2015 Free Software Foundation, Inc.
Files: splash.png, splash.svg
Author: Francesc Rocher <rocher@member.fsf.org>
Files: splash.png, splash.svg, splash.pbm, splash.xpm
Author: Francesc Rocher <francesc.rocher@gmail.com>
Copyright (C) 2008-2015 Free Software Foundation, Inc.
Files: checked.xpm, unchecked.xpm

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 25 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View file

@ -1,249 +1,370 @@
/* XPM */
/* Gnu Emacs Logo
*
* Copyright (C) 2001-2015 Free Software Foundation, Inc.
*
* Author: Luis Fernandes <elf@ee.ryerson.ca>
*
* This file is part of GNU Emacs.
*
* GNU Emacs 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 3 of the License, or
* (at your option) any later version.
*
* GNU Emacs is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
*/
static char *splash[] = {
/* width height num_colors chars_per_pixel */
" 270 217 4 1",
/* colors */
". c None",
"# c #c64e3b",
"a c #000000",
"c c #2076c1",
/* columns rows colors chars-per-pixel */
"333 233 131 2 ",
" c #C64E3B",
". c #C7513E",
"X c #BD5144",
"o c #B3534D",
"O c #A95656",
"+ c #A65759",
"@ c #A1585E",
"# c #8F5D6F",
"$ c #9C5A63",
"% c #935C6B",
"& c #8A5F73",
"* c #A15F67",
"= c #83607A",
"- c #926172",
"; c #C14F40",
": c #C75340",
"> c #C85643",
", c #C95846",
"< c #C3594B",
"1 c #CB5C4B",
"2 c #CC604F",
"3 c #CD6453",
"4 c #CE6857",
"5 c #CF6959",
"6 c #D06E5E",
"7 c #D16F60",
"8 c #CF7062",
"9 c #D27364",
"0 c #D37768",
"q c #D47A6C",
"w c #D67E71",
"e c #D78275",
"r c #D88477",
"t c #D88679",
"y c #D98A7D",
"u c #3C74BD",
"i c #5F6A9C",
"p c #766486",
"a c #7B6382",
"s c #6A6792",
"d c #626999",
"f c #4E6FAC",
"g c #566DA5",
"h c #5A6EA3",
"j c #5574AE",
"k c #4372B6",
"l c #4971B1",
"z c #4077BE",
"x c #4279BF",
"c c #457AC0",
"v c #497DC1",
"b c #4E81C3",
"n c #5384C5",
"m c #5A89C7",
"M c #5D8CC8",
"N c #6B8CC1",
"B c #618EC9",
"V c #6592CB",
"C c #6B95CD",
"Z c #6F98CE",
"A c #719ACF",
"S c #759DD0",
"D c #789FD1",
"F c #7CA2D3",
"G c #DB8E82",
"H c #DC9185",
"J c #DD958A",
"K c #DE998E",
"L c #DF9C92",
"P c #E09F94",
"I c #E0A096",
"U c #E2A59B",
"Y c #E3A99F",
"T c #E4ACA4",
"R c #E6B0A7",
"E c #E7B3AB",
"W c #E8B7AE",
"Q c #E8B7B0",
"! c #E9BBB4",
"~ c #EBBFB8",
"^ c #ECC3BC",
"/ c #81A5D5",
"( c #89A6D1",
") c #86A9D6",
"_ c #89ABD7",
"` c #8DAED8",
"' c #90AFD9",
"] c #8FB0D9",
"[ c #9DB4D7",
"{ c #93B2DB",
"} c #99B6DC",
"| c #9DB9DE",
" . c #A1BCDF",
".. c #A4BEE0",
"X. c #A6C0E1",
"o. c #ABC3E3",
"O. c #B0C7E4",
"+. c #B5CAE6",
"@. c #B9CDE7",
"#. c #BBCEE8",
"$. c #BED0E9",
"%. c #DBD0D8",
"&. c #EDC7C1",
"*. c #EECAC4",
"=. c #EFCEC8",
"-. c #F0CFCA",
";. c #F0D2CD",
":. c #F2D6D1",
">. c #F3DAD5",
",. c #F4DEDA",
"<. c #F6E2DE",
"1. c #C4D5EB",
"2. c #CCDAEE",
"3. c #D0DEEF",
"4. c #D3DFF0",
"5. c #D5E1F1",
"6. c #DBE5F3",
"7. c #DFE8F4",
"8. c #EDE5E8",
"9. c #F7E5E2",
"0. c #F8E9E6",
"q. c #F9EDEB",
"w. c #FAF0EE",
"e. c #E4ECF6",
"r. c #E9EFF7",
"t. c #ECF2F9",
"y. c #FCF4F3",
"u. c #FDF8F7",
"i. c #F2F6FB",
"p. c #F6F9FC",
"a. c #FFFFFF",
/* pixels */
"..............................................................................................................................................................................................................................................................................",
"..................................................................########..........................................................................................................................................................########..................................",
".................................................................##########.......................................................................................................................................................############................................",
"................................................................#############.......................########....................................................................................................................################..............................",
"..............................................................#################...................#############................................................................................................................###################............................",
".............................................................###################.................################.............................................................................................................#####################...........................",
"............................................................#####################..............###################...........................................................................................................######################...........................",
"...........................................................#######################...........#######################.........................................................................................................#######################..........................",
"..........................................................#########################.........##########################......................................................................................................#########################.........................",
".........................................................###########################.......############################....................................................................................................##########################.........................",
".........................................................############################.....###############################.................................................................................................############################........................",
"........................................................##############################...a################################................................................................................................############################........................",
".......................................................################################.a##################################..............................................................................................##############################.......................",
"......................................................#################################aa###################################.............................................................................................##############################.......................",
".....................................................########################################################################...........................................................................................################################......................",
"....................................................##########################################################################.........................................................................................a################################......................",
"......................#............................###########aaa##############################################################.......................................................................................a#################################......................",
".....................##...........................###########aaaaaa#############################################################......................................................................................a######aaaaaa#####################......................",
".....................###.........................##########aaaaaaaaaa############################################################....................................................................................a######aaaaaaaaaa##################......................",
".....................###........................##########...aaaaaaaaaa###########################################################...................................................................................a#####aaaaaaaaaaaaa################......................",
".................a..#####......................##########......aaaaaaaaa#######################aaaaaaa############################..................................................................................a#####aaaaaaaaaaaaaaaa##############......................",
".................aa.#####.....................##########........aaaaaaaaa####################aaaaaaaaaaa###########################.................................................................................a#####aaaaaaaaaaaaaaaa##############......................",
"................aaa.#####....................##########..........aaaaaaaaa#################aaaaaaaaaaaaaaa##########################...............................................................................a######aaaaaaaaaaaaaaaaa#############......................",
"................aaa#######..................##########............aaaaaaaaa###############aaaaaaaaaaaaaaaaaa#########################..............................................................................a#####.........aaaaaaaaaa############......................",
"................aaa########...............###########...............aaaaaaaa############aa........aaaaaaaaaaaa########################.......................................................................#....a######............aaaaaaa############......................",
"...............aaa##########............############.................aaaaaaaa###########.............aaaaaaaaaaa#######################......................................................................#....a######.............aaaaaaa###########......................",
"...............aaa############........#############...................aaaaaaaa#########................aaaaaaaaaa#######################.................................#..................................##...aa#####...............aaaaaa###########......................",
"...............aa##############.....##############.....................aaaaaaaa########..................aaaaaaaaa#######################...............................##..................................##...a######...............aaaaaa###########......................",
"..............aaa#################################......................aaaaaaa#######....................aaaaaaaaa#######################.............................###...............................a.###..aa######................aaaaa###########......................",
"..............aa#################################........................aaaaaaa######.....................aaaaaaaaa#######################..........................a.###..............................aa.##...aa#####..................aaaa###########......................",
".............aaa################################..........................aaaaaa#####.......................aaaaaaaaa#######################........................aa####..............................aa###...aa#####..................aaaa###########......................",
".............aaa###############################...........................aaaaaaa####.........................aaaaaaaa######################........................a####..............................aaa###..aaa####....................aaa##########.......................",
"............aaa###############################.............................aaaaaa###...........................aaaaaaaa#######################.....................aa####..............................aa###...aaaa##.....................aaa##########.......................",
"............aaaa#############################...............................##aaa.#.............................aaaaaaaa########################..................aa####..............................aaa###...aaaaaa.....................aaa##########.......................",
"...........aaaaa############################...............................###aaa................................aaaaaaaa########################.................a#####..............................aa###...aaaaaa......................aaa##########.......................",
"...........aaaaaa##########################...............................###aaa..................................aaaaaaaa#########################..............######..............................aa####...aaaaaa......................aaa#########........................",
"...........aaaaaaa#######################................................####aaa...................................aaaaaaaa##########################..........########..............................a####....aaaaa.......................aaa#########........................",
"............aaaaaa######################................................a###..a.....................................aaaaaaaa###########################......##########.........#...................a#####....aaaa........................aaa#########........................",
"............aaaaaaa####################................................a###..........................................aaaaaaaa#########################################.........##...................#####.......a.........................aaa#########........................",
".............aaaaaaa##################................................a####...........................................aaaaaaaa########################################.........###.................######.................................aaa#########........................",
"..............aaaaaaa###############.................................a####.............................................aaaaaaaa######################################.........#####..............#######..................................aaa########.........................",
"...............aaaaaaa############a.................................aa###...............................................aaaaaaa######################################......a..######...........########...................................aaa########.........................",
"...............aaaaaaaaa#######aaa.................................aa####................................................aaaaaaa####################################.......aa########.......###########...................................aaa########.........................",
"................aaaaaaaaaaaaaaaaa..................................aa###..................................................aaaaaaa###################################.......aa#########################....................................aaa########.........................",
".................aaaaaaaaaaaaaa...................................aa###....................................................aaaaaaa#################################.......aa##########################....................................aaa########.........................",
"..................aaaaaaaaaaaa...................................aa####....................................................aaaaaaaa################################.......aa#########################.....................................aaa#######..........................",
"....................aaaaaaa.....................................aa####......................................................aaaaaaaa##############################.......aa##########################.....................................aaa#######..........................",
"................................................................aa###........................................................aaaaaaaa###########################.........aa#########################......................................aaa#######..........................",
"...............................................................aa###..........................................................aaaaaaaa#########################.........aa#########################.......................................aaa#######..........................",
"..............................................................aa###............................................................aaaaaaaa#######################..........aa#########################.......................................aaa######...........................",
".............................................................aaa###...........................................##................aaaaaaaa#####################..........aa#########################........................................aa#######...........................",
".............................................................aa###...........................................#####...............aaaaaaaaa##################..........aaa########################.........................................aa#######...........................",
"............................................................aa###...........................................#######...............aaaaaaaaaa##############a...........aaa#######################..........................................aa#######...........................",
"...........................................................aa####...........................................########...............aaaaaaaaaaa##########aa...........aaa#######################...........................................aa######............................",
"..........................................................aa####...........................................##########...............aaaaaaaaaaaaaaaaaaaaa............aaaa####################.............................................aa######............................",
"..........................................................aa###..........................................a###########.................aaaaaaaaaaaaaaaaaa............aaaaa###################..............................................aa######............................",
".........................................................aa###..........................................aa#############..................aaaaaaaaaaaa...............aaaaaa#################...............................................a#######............................",
"........................................................aa###..........................................aa##############.............................................aaaaaaa##############a...............................................aa######.............................",
"........................................................aa###...................................##.....a################............................................aaaaaaaa###########aa................................................aa######.............................",
".......................................................aa###...................................###....aa################.............................................aaaaaaaaa######aaa..................................................aa######.............................",
".......................................................aa##...................................####...aa##################.............................................aaaaaaaaaaaaaaaa...................................................aa#####..............................",
"......................................................aa###..................................####...aa###################..............................................aaaaaaaaaaaaaa...................................................aaa#####..............................",
".....................................................aa###..................................####....aa####################..............................................aaaaaaaaaaa.....................................................aa######..............................",
"....................................................aaa##..................................#####...aa#####################................................................aaaaaa........................................................aa#####...............................",
"....................................................aa###.................................#####....aa######################.............................................................................................................aa#####...............................",
"...................................................aa###.................................######...aaa######################.............................................................................................................a######...............................",
"..................................................aa####................................######....aaaaa####################............................................................................................................aa######...............................",
"..................................................aa###...............................########...aaaaaaa###################............................................................................................................aa#####................................",
".................................................aa####..............................########....aaaaaaaaa#################............................................................................................................aa#####................................",
".................................................aa###..............................#########....aaaaaaaaa#################............................................................................................................aa#####................................",
"................................................aa###..............................#########.......aaaaaaaa################............................................................................................................aa####.................................",
"...............................................aaa###............................##########.........aaaaaaaa###############............................................................................................................aa####.................................",
"...............................................aa###............................##########............aaaaaaa###############..........................................................................................................aaa####.................................",
"..............................................aaa###...........................##########..............aaaaaa###############..........................................................................................................aaa####.................................",
".............................................aaa####.........................##########.................aaaaaa##############..........................................................................................................aa#####.................................",
".............................................aaa###.........................#########...................aaaaaa##############.........................................................................................................aaa####..................................",
"............................................aaa####.......................##########.....................aaaaaa#############.........................................................................................................aa#####..................................",
"............................................aa#####......................##########......................aaaaaa#############.........................................................................................................aa#####..................................",
"...........................................aaa#####.....................##########........................aaaaaa############........................................................................................................aaa####...................................",
"...........................................aa######...................###########.........................aaaaaa###########.........................................................................................................aaa####...................................",
"..........................................aaa#######................###########............................aaaaaa##########.........................................................................................................aa####....................................",
"..........................................aa#########..............###########.............................aaaaaa##########.........................................................................................................aa####....................................",
".........................................aaa##########...........############...............................aaaaa##########........................................................................................................aaa####....................................",
".........................................aa#################################................................aaaaaa#########........................................................................................................aa####.....................................",
"........................................aaa################################..................................aaaaa#########........................................................................................................aa####.....................................",
"........................................aa################################...................................aaaaa#########........................................................................................................aa###......................................",
".......................................aaa###############################.....................................aaaa#########.......................................................................................................aaa###......................................",
".......................................aaa##############################......................................aaaa#########.......................................................................................................aaa###......................................",
"......................................aaa#############################........................................aaaa#########.......................................................................................................aa###.......................................",
"......................................aaa############################.........................................aaaa#########......................................................................................................aaa###.......................................",
"......................................aaa##########################............................cccc...........aaaa########.......................................................................................................aaa###.......................................",
".....................................aaaa########################aa........................cccccccccc.........aaaa########.......................................................................................................aa###........................................",
".....................................aaaa########################a.....................ccccccccccccccc........aaaa########.......................................................................................................aa###........................................",
".....................................aaaa######################aa...................cccccccccccccccccc........aaaa########......................................................................................................aaa###........................................",
".....................................aaaa#####################a...................cccccccccccccccccccc........aaaa#######.......................................................................................................aaa##.........................................",
".....................................aaaaa##################aa.................ccccccccccccccccccccccc........aaaa#######.......................................................................................................aa###.........................................",
".....................................aaaaaa##############aaa................cccccccccccccccccccccccccaaa......aaaa#######..................................................................#...................................aaa###.........................................",
".....................................aaaaaaa###########aaa................cccccccccccccccccccccccccccaaaa.....aaaa######...................................................................#...................................aa####.........................................",
".....................................aaaaaaaaa######aaaaa................cccccccccccccccccccccccccccaaaaa.....aaaa######..................................................................##...................................aa###..........................................",
"......................................aaaaaaaaaaaaaaaaa................ccccccccccccccccaaaaccccccccaaaaa......aaaa#####...................................................................##..................................aaa###..........................................",
".......................................aaaaaaaaaaaaaa.................cccccccccccccccaaaaaacccccccaaaaaa......aaaa#####................................................................a.###..................................aa####..........................................",
"........................................aaaaaaaaaaa.................ccccccccccccccaaaaaaaaaccccccaaaaaa.......aaaa####.................................................................a.###..................................aa####..........................................",
".........................................aaaaaaaa.................ccccccccccccaaaaaaaaaaaaccccccaaaaaaa.......aaaa####................................................................aa####.................................aaa###...........................................",
"................................................................cccccccccccaaaaaaaaaaaaaaacccccaaaaaaa........aaaa###................................................................aaa###..................................aa####...........................................",
"..............................................................cccccccccccaaaaaaaaaaaaa....ccccaaaaaaa.........aaaa#..................................................................aa####..................................aa####...........................................",
".............................................................ccccccccccaaaaaaaaaaa.......cccaaaaaaaa..........aaaa..................................................................aa####..................................aa####............................................",
"...........................................................ccccccccccaaaaaaaaaa.........ccc.aaaaaaa...........aaa...........aaa.....................................................aa####..................................aa####............................................",
"..........................................................cccccccccaaaaaaaaa..........cccc..aaaaaa............aa............aaa.....................................................a####...................................aa####............................................",
".........................................................cccccccccaaaaaaaa...........cccc..aaaaaa.............a............aaa##...................................................aa####...................................aa####............................................",
"........................................................ccccccccaaaaaaaa............ccc...aaaaaa...........................aaa##..................................................aa####...................................aa####.............................................",
"......................................................cccccccccaaaaaaa............cccc...aaaaaa...........................aaa##...................................................aa####...................................aa####.............................................",
".....................................................ccccccccaaaaaaaa............ccc....aaaaaa............................aa###..................................................aa####....................................aa####.............................................",
"....................................................ccccccccaaaaaaa............ccc.....aaaaaa............................aaa###..................................................aa####....................................aa####.............................................",
"..................................................ccccccccaaaaaaa.............cc.....aaaaaa..............................aa###..................................................aa####.....................................aa###..............................................",
".................................................cccccccaaaaaaa..............cc.....aaaaaa..............................aaa###..................................................aa####....................................aa####..............................................",
"................................................cccccccaaaaaaa.....................aaaaaa...............................aa###..................................................aa####.....................................aa####..............................................",
"...............................................ccccccaaaaaaa.....................aaaaaa................................aaa###..................................................aa####.....................................aa####..............................................",
"..............................................ccccccaaaaaaa.....................aaaaa.................................aaa####.................................................aa####......................................aa###...............................................",
".............................................ccccccaaaaaa.....................aaaaa...................................aaa###.................................................aaa####.....................................aa####...............................................",
"...........................................ccccccaaaaaaa.....................aaaa....................................aaa####.................................................aa####......................................aa####...............................................",
"..........................................ccccccaaaaaa..............................................................aaa####.................................................aaa####......................................aa####...............................................",
".........................................ccccccaaaaa...............................................................aaa#####.................................................aa####......................................aaa###................................................",
"........................................ccccccaaaaa................................................................aaa#####................................................aa####.......................................aa####................................................",
".......................................ccccccaaaaa................................................................aaa######................................................aa####.......................................aa####................................................",
"......................................ccccccaaaaa................................................................aaa######................................................aa####........................................aa###.................................................",
".....................................ccccccaaaaa.................................................................aaa#####.................................................aa####........................................a####.................................................",
"....................................ccccccaaaaa.................................................................aaa######................................................aa####........................................aa####.................................................",
"...................................ccccccaaaaa.................................................................aaa######.................................................aa####........................................aa####.................................................",
"..................................ccccccaaaaa..........................c.......................................aaa######................................................aa####.........................................aa####.................................................",
".................................ccccccaaaaa.......................ccccc......................................aaa######................................................aa#####........................................aa#####.................................................",
"................................cccccccaaaa......................cccccc......................................aaa######.................................................aa####.........................................aa#####.................................................",
"...............................ccccccccaaa.....................ccccccc......................................aaaa######................................................aa#####.........................................aa#####.................................................",
"..............................cccccccccaaa...................cccccccc...a...................................aaa######................................................aaa####.........................................aaa####..................................................",
".............................ccccccccccca..................ccccccccc..aaa..................................aaa######.................................................aa#####.........................................aaa####..................................................",
"............................ccccccccccccc................ccccccccccaaaaa..................................aaa#######................................................aa#####..........................................aa#####..................................................",
"............................cccccccccccccc.............cccccccccccaaaaa...................................aaa######....................................##...........aa#####..........................................aa#####..................................................",
"...........................ccccccccccccccccccccccccccccccccccccccaaaaa...................................aaa#######...................................####.........aa#####..........................................aaa#####..................................................",
"..........................ccccccccccccccccccccccccccccccccccccccaaaaa...................................aaa#######...................................######.......a######...........................................aaa####...................................................",
"..........................cccccccccccccccccccccccccccccccccccccaaaaa...................................aaa#######..................................a.######......a#######...........................................aa#####...................................................",
".........................cccccccccccccccccccccccccccccccccccccaaaaa....................................aaa#######..................................a########....########............................................aa#####...................................................",
".........................cccccccccccccccccccccccccccccccccccaaaaaa....................................aaa#######..................................a#####################...........................................aaa#####...................................................",
".........................ccccccccccccccccccccccccccccccccccaaaaaa....................................aaa#######..................................a#####################............................................aaa#####...................................................",
".........................ccccccccccccccccccccccccccccccccaaaaaaa.....................................aaa#######..................................a#####################............................................aaa####....................................................",
".........................cccccccccccccccccccccccccccccaaaaaaaaa.....................................aaa#######..................................a#####################.............................................aaa####....................................................",
"..........................ccccccccccccccccccccccccccaaaaaaaaaa.....................................aaa########.................................aa####################..............................................aa#####....................................................",
"..........................acccccccccccccccccccccccaaaaaaaaaa......................................aaa########.................................aa#####################..............................................aa#####....................................................",
"..........................aaacccccccccccccccccccaaaaaaaaaa........................................aaa#######.................................aa#####################..............................................aaa#####....................................................",
"..........................aaaaacccccccccccccccaaaaaaaaa..........................................aaa#######..................................aa####################...............................................aaa####.....................................................",
"...........................aaaaaaaacccccccccaaaaaaaaaa..........................................aaa########.................................aa#####################...............................................aaa####.....................................................",
"...........................aaaaaaacccccccccaaaaaaaa.............................................aa########.................................aaa####################................cc..............................aaa####.....................................................",
".............................aaaaccccccccaaaaaaaa..............................................aaa########.................................aa#####################..............cccc..............................aaa####..............ccccccc...............cccccccccc.......",
"...............................accccccccaaaaaaa...............................................aaa########.................................aaa####################.............ccccc...............................aa#####...........ccccccccc.............cccccccccccc........",
"..............................ccccccccaaaaaaaa..............................ccccc............aaa#########................ccccccc..........aa####################............cccccc...............................aaa#####........cccccccccc.............cccccccccc............",
".............................cccccccaaaaaaaa..............................ccccccc...........aaa########c...............cccccccccc........aa######aaa###########..........ccccccc..aa.............................aaa####.......cccccccccc..aaaaaa.....cccccccc....aaaaaaa.....",
"............................cccccccaaaaaaa..............................cccccccc...........aaaa########cc............cccccccccccc........aa######aaa##########.........ccccccc..aaaa.............................aaa####.....cccccccccc.aaaaaaaa....cccccccc..aaaaaaaaaa......",
"...........................cccccccaaaaaaa..............................ccccccccc...........aaa#######cccc...........ccccccccccccc.......aa######aaaaa########........ccccccc..aaaaa...cc.........................aaa####...ccccccccc..aaaaaaaa....cccccccc..aaaaaaaaaa........",
"..........................cccccccaaaaaa..............................ccccccccccaaa........aaa########cccc.........cccccccccccccca.......aa#####aaaaaaa######........ccccccc.aaaaa....cc..........................aaa####.ccccccccc.aaaaaaaaa....cccccccccaaaaaaaaaa...........",
".........................ccccccaaaaaa..............................ccccccccccccaaa.......aaaa#######ccccc.......cccccccccccccccca......aa######.aaaaaaa####.......ccccccc.aaaaa....cccc..........................aaa####ccccccc.aaaaaaaaaa....cccccccccaaaaaaaaa..............",
"........................ccccccaaaaaa..............................ccccccccccccaaa.......aaaa########ccccaa.....cccccccccccccccccaa.....aa#####..aaaaaaaaaa......ccccccccaaaaaa....cccc...........................aaa##ccccccccaaaaaaaaaa....cccccccccaaaaaaaa.................",
".......................ccccccaaaaaa..............................cccccccccccccaaa.......aaa########cccccaa....cccccccccccccccccaaa....aa#####....aaaaaaaa.....cccccccccaaaaa....ccccc............................aaa#ccccccccaaaaaaaaa.....cccccccccaaaaaaa...................",
"......................ccccccaaaaa...............................cccccccccccccaaaa......aaa########ccccccaa...ccccccccccccccccccaa....aaa#####.....aaaaaa.....ccccccccaaaaaa....cccccc.aaa........................aaacccccccaaaaaaaaa.....ccccccccccaaaaaa.....................",
".....................ccccccaaaaa..............................ccccccccccccccaaaa......aaaa########ccccccaa.cccccccccccccccccccaaa....aa#####...............ccccccccaaaaaa....cccccccaaaa.........................aaccccccaaaaaaaaa.....ccccccccccccaaaa.......................",
"....................ccccccaaaaa..............................cccccccccccccccaaa......aaaa########ccccccaa.ccccccccccccccccccccaaa...aaa####...............cccccccaaaaaa.....ccccccccaaa..........................acccccccaaaaaaa......ccccccccccccccca........................",
"...................ccccccaaaaa..............................cccccccccccccccaaaa...ccaaaa########cccccccaacccccccaacccccccccccaaa....aa#####..............cccccccaaaaa......ccccccccaaa..........................ccccccccaaaaaa.......ccccccccccccccccccccccccccccccccccc......",
"..................ccccccaaaaa.............................cccccccacccccccccaaa...ccaaaa########cccccccaaccccccaaaacccccccccccaaa...aaa#####............cccccccaaaaaa......cccccccccaaa.........................ccccccccaaaaa.........ccccccccccccccccccccccccccccccccccccc....",
".................ccccccaaaaa.............................cccccccaaccccccccaaaa..cccaaa#########cccccccacccccaaaaaaccccccccccaaa....aa#####............cccccccaaaaa.......cccccccccaaa.........................ccccccccaaaaa..........cccccccccccccccccccccccccccccccccccccc...",
"................ccccccaaaaa.............................cccccccaaccccccccaaaa..cccaaaa########cccccccccccccaaaaaaaccccccccccaaa....aa#####..........ccccccccaaaaa.......ccccccccccaaa........................ccccccccaaaaa.............aaaaaaaaaaaaaa.......cccccccccccccccc..",
"...............ccccccaaaaa.............................ccccccaaaaccccccccaaa..ccccaaa########cccccccccccccaaaaaaaacccccccccaaa....aa#####..........ccccccccaaaaa.......cccccccccccaa........................cccccccccaaaa.............aaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccc..",
"..............ccccccaaaaa............................cccccccaaaaacccccccaaa..ccccaaa#########ccccccccccccaaaaaa..ccccccccccaaa....aa#####.........ccccccccaaaaa.......cccccccccccaaa.......................cccccccccaaaa..............aaaaaaaaaaaaaaaaaaaaaaaaaaaaccccccccccc.",
".............ccccccaaaaa............................ccccccaaaaaaccccccccaa.cccccaaa########cccccccccccccaaaaa....ccccccccccaa....aa#####........cccccccccaaaaa........cccccccccccaaa......................cccccccccaaaa................aaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc.",
"............cccccccaaaa............................ccccccaaaaaaccccccccaaacccccaaaa########ccccccccccccaaaaa....cccccccccccaa....aa#####.......cccccccccaaaaa........ccccccccccccaa......................ccccccccccaaa......................................aaaaaaacccccccccca",
"...........cccccccaaaa............................ccccccaaaaaa.cccccccaaacccccaaaa########ccccccccccccaaaaa.....ccccccccccca....aaa####......ccccccccccaaaaa.........ccccccccccccaa.....................cccccccccccaa..........................................aaaacccccccccca",
"..........cccccccaaaa............................ccccccaaaaaa.ccccccccaaccccccaaa########cccccccccccccaaaa.....cccccccccccca....aaa####.....cccccccccccaaaa.........cccccccccccccaa....................cccccccccccaaa............................................aacccccccccca",
"..........cccccccaaa............................ccccccaaaaa..ccccccccaaacccccaaaa########ccccccccccccaaaa......cccccccccccca...aaa####.....cccccccccccaaaa..........cccccccccccccaa...................ccccccccccccaa..............................................acccccccccca",
".........cccccccaaaa...........................ccccccaaaaa...cccccccaaacccccaaaa########ccccccccccccaaaaa.....ccccccccccccc....aaa###.....cccccccccccaaaa..........ccccccccccccccaa..................cccccccccccccaa..............................................acccccccccca",
".........cccccccaaa..........................cccccccaaaaa...ccccccccaccccccaaaa########.cccccccccccaaaaa......ccccccccccccc....aaa###....ccccccccccccaaa...........ccccccccccccccaa.................ccccccccccccccaa..............................................acccccccccca",
"........ccccccccaa..........................cccccccaaaa.....cccccccaccccccaaaaa########cccccccccccaaaaa......cccccccccccccc...aaa####..cccc.ccccccccaaaa...........ccccccccccccccaa................cccccccccccccccca..............................................ccccccccccaa",
"........cccccccaaa.........................ccccccaaaaa.....cccccccaccccccaaaaa########ccccccccccccaaaa.......cccccccccccccc...aaa###.ccccc.ccccccccaaaa...........cccccccccccccccca..............cccccccccccccccccca..............................................ccccccccccaa",
".......ccccccccaa........................cccccccaaaaa.....ccccccccccccccaaaaa########.cccccccccccaaaa.......cccccccccccccccccaaaa##ccccc..cccccccccaaa............ccccccccccccccccc...........cccccccccccccccccccccc.................c............................cccccccccaaa",
".......ccccccccaa.......................ccccccaaaaa......cccccccccccccaaaaaa########.cccccccccccaaaa........cccccccccccccccccaaa###cccc...cccccccccaaa............cccccccccccccccccc.......cccccc..cccccccccccccccccc...............cc...........................cccccccccaaa.",
"......ccccccccca.......................ccccccaaaaa.......ccccccccccccaaaaaa########..ccccccccccaaaaa........cccccccccccccccccaaa###ccc..aacccccccccaa.............cccccccccccccccccccccccccccccc...cccccccccccccccccccc..........cccc...........................ccccccccaaaaa.",
"......ccccccccca.....................cccccccaaaaa........cccccccccccaaaaaaa########..cccccccccaaaaa.........cccccccccccccccccaaa##cc..aacccccccccccaa..ccc........cccccccccccccccccccccccccccc....cccccccccccccccccccccccccccccccc.............................ccccccccaaaaa..",
".....cccccccccca....................cccccccaaaaa........cccccccccccaaaaaaa########..cccccccccaaaaa..........ccccccccccccccccaaa###c.aaaaccccccccccccccccc.........cccccccccccccccccccccccccc....aaccccccccccccccccccccccccccccccc...........c.................ccccccccaaaaa...",
".....cccccccccca..................ccccccccaaaa..........ccccccccccaaaaaaaa########..ccccccccaaaaa...........ccccccccccccccccaaa###aaaaaaccccccccccccccc...........ccccccccccccccccccccccccc...aaaaccccccccccccccccccccccccccccc.......aaccccc................cccccccaaaaaa....",
"....cccccccccccc.................ccccccccaaaa..........ccccccccccaaaaaaaa########..ccccccccaaaaa............ccccccccccccccccaaa##aaaaaaccccccccccccccc............ccccccccccccccccccccccc..aaaaaa..cccccccccccccccccccccccccc...aaaaaacccccc...............cccccccaaaaaaa.....",
"....ccccccccccccc.............cccccccccaaaaa..........ccccccccccaaaaaaaa########..ccccccccaaaaa.............cccccccccccccccaaaa##aaaaaccccccccccccca....aaa.......ccccccccccccccccccccaaaaaaaaa....ccccccccccccccccccccaaaaaaaaaaaaccccccccccc..........ccccccccaaaaaaa.......",
"...cccccccccccccccc.......ccccccccccccaaaa............cccccccccaaaaaaaaa########..cccccccaaaaa..............cccccccccccccccaaa##aaaa.ccccccccccccccaaaaaaa........cccccccccccccccccccaaaaaaaa......acccccccccccccccccaaaaaaaaaaaaaccccccccccccccccccccccccccccaaaaaaaa........",
"...ccccccccccccccccccccccccccccccccccaaaa............cccccccccaaaaaaaaa########...ccccccaaaaa...............cccccccccccccccaaaaaaaa..ccccccccccccaaaaaaa...........ccccccccccccccccaaaaaaaaa.......aaccccccccccccaaaaaaaaaaaaaaa..ccccccccccccccccccccccccc.aaaaaaaa..........",
"..cccccccccccccccccccccccccccccccccaaaaa.............ccccccccaaaaa.aaa########...ccccccaaaaa.................ccccccccccccaaaaaaaa....cccccccccccaaaaaa.............acccccccccccccaaaaaaaaa..........aaaaaaaaaaaaaaaaaaaaaaaaa..........aacccccccccccccccc.aaaaaaaa............",
"..ccccccccccccccccccccccccccccccccaaaaa.............ccccccccaaaaa.aaa########....cccccaaaaa..................ccccccccccaaaaaaaaa.....cccccccccaaaaaaa..............aaacccccccccaaaaaaaaa............aaaaaaaaaaaaaaaaaaaaaaa..........aaaaaaaacccccccccaaaaaaaaaa..............",
"..cccccccccccccccccccccccccccccccaaaa...............cccccccaaaaa.aaaa#######....cccccaaaaa...................aaccccccaaaaaaaaaa......cccccccaaaaaaaa...............aaaaaaaaaaaaaaaaaaa..............aaaaaaaaaaaaaaaaaaa............aaaaaaaaaaaaaaaaaaaaaaaaaaa................",
"..ccccccccccccccccccccccccccccccaaaa...............cccccccaaaaa..aaa########...cccccaaaaa....................aaaaaaaaaaaaaaaa........ccccccaaaaaaa.................aaaaaaaaaaaaaaaaa.................aaaaaaaaaaaaaa................aaa.....aaaaaaaaaaaaaaaa...................",
"..ccccccccccccccccccccccccccccaaaaa...............cccccccaaaaa..aaa########.....cccaaaaa......................aaaaaaaaaaaaa...........aaaaaaaaaaa...................aaaaaaaaaaaaaa.....................aaaaaaa................................aaaaaaaaa.......................",
"..ccccccccccccccccccccccccccaaaaa.................ccccccaaaaa...aaa#######........aaaa........................aaaaaaaaaa..............aaaaaaaaa.......................aaaaaaaaa...............................................................................................",
"..cccccccccccccccccccccccccaaaaa.................ccccccaaaa....aaa#######........aaaa...........................aaaaa.................aaaaaaa.................................................................................................................................",
"..cccccccccccccccccccccccaaaaaa..................cccccaaaa.....aaa#######.......aaaa..................................................aaaaaa..................................................................................................................................",
"...ccccccccccccccccccccaaaaaa....................ccccaaaa.....aaa#######.........a.....................................................aaa....................................................................................................................................",
"...accccccccccccccccccaaaaaa.......................aaaaa......aaa######.......................................................................................................................................................................................................",
"...aacccccccccccccccaaaaaaa.......................aaaaa.......aa#######.......................................................................................................................................................................................................",
"....aaccccccccccccaaaaaaa.........................aaaa.......aaa######........................................................................................................................................................................................................",
"....aaaaccccccccaaaaaaa..........................aaa.........aaa######........................................................................................................................................................................................................",
".....aaaaaaaaaaaaaaaaa......................................aaa######.........................................................................................................................................................................................................",
"......aaaaaaaaaaaaaa........................................aaa####...........................................................................................................................................................................................................",
".......aaaaaaaaaaa.........................................aaa#####...........................................................................................................................................................................................................",
".........aaaaaaa...........................................aaa####............................................................................................................................................................................................................",
"...........................................................aaa####............................................................................................................................................................................................................",
"..........................................................aaa####.............................................................................................................................................................................................................",
"..........................................................aaa####.............................................................................................................................................................................................................",
"..........................................................aaa###..............................................................................................................................................................................................................",
".........................................................aaa###...............................................................................................................................................................................................................",
".........................................................aaa###...............................................................................................................................................................................................................",
".........................................................a.###................................................................................................................................................................................................................",
".........................................................a.##.................................................................................................................................................................................................................",
"...........................................................##.................................................................................................................................................................................................................",
"...........................................................#..................................................................................................................................................................................................................",
"..........................................................##..................................................................................................................................................................................................................",
".............................................................................................................................................................................................................................................................................."
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,.H 9 4 w P ! 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.w : . , > q *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.^ J r q 9 K ^ q.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.=.> , 2 *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.T J e 6 3 4 G E 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.R 4 : , , : U u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E > : e w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.^ 8 , . > : 5 W y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.K , : > 2 ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J : . , ~ a.a.a.a.a.a.a.a.a.a.a.a.a.u.I , > : , T u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E > : > y a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.w > : K a.a.a.a.a.a.a.a.a.a.a.<.4 : , 3 =.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.<.6 : . : U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.5 : > e u.a.a.a.a.a.a.a.a.E > > q 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ : . . : -.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,.1 . : 5 q.a.a.a.a.a.u.w > . > I a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.I > , q.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.> . . 1 <.a.a.a.a.r : . : 8 w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.e : . w a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E > , *.a.a.L > . , >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e : > y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J : > T E > > ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J > > ~ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.w : . > : . : G u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T > 9 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.5 : . : 8 w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;., : w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.:.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.<.1 . . : , . . 3 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.3 > &.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y., , q.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.-.: : e -.P 1 > : . , <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J : > > > E a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.U : . e a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E > : ! a.a.a.a.9.y : , ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;.> > > w ~ ! T 5 , U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y., > *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.y > : 4 9.a.a.a.a.a.a.a.;.3 : : ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.4 > U u.a.a.a.a.a.^ , G a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T > , y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,.3 : > r u.a.a.a.a.a.a.a.a.a.u.T : , . 2 w e 4 : > , . > E a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > : 4 ,.a.a.a.a.a.a.a.a.:.> w a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u., : r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T : : I a.a.a.a.a.a.a.a.a.a.a.a.a.0.4 : . : q ;.u.a.a.a.a.a.0.;.E r : : : P a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3 > K u.a.a.a.a.a.a.a.a.a.a.R > 6 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E > : T a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.q > . : ~ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.9 > : r <.a.a.a.a.a.a.a.a.a.a.a.a.w.I , > > G a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.a.a.a.a.a.! , : 1 ;.a.a.a.a.a.a.a.a.a.a.a.a.u.> 9 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1 . : U a.a.a.a.a.a.a.a.a.a.a.u.T > . . , :.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.G : > ~ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.! 4 > : q y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.8 E a.a.a.a.1 > w y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ > : J y.a.a.a.a.a.a.a.a.^ 1 > : 3 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T > 1 <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! > . : 6 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! ^ a.a.a.W > > G a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E : J a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.4 : 1 &.a.a.a.a.y.^ 4 > , 8 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E > > 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.w : . 2 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y., . <.a.a.a., : U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ : U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.> > , e G 3 : > . > y u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.H : > &.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! , . . , *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.y : e a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J : : u.a.a.;., : ~ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ > : Q a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r : T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.7 . : H a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.8 : > U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:., . H a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:.: e a.a.a.y . , -.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > > ,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: : *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.1 , y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.y > > w y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.W > , ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.3 , *.a.a.a.> > 3 <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > : a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T : . 1 ,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.> , W a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.Y : : 3 <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J > > y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J : , a.a.a.a.: > G u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > w a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6 : 4 q.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T > : 9 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > , E u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.9 > 9 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.-.: . P a.a.a.a.K > : ~ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.Y : E a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w > w y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.e , 0.a.a.I 1 e u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>., . > 3 =.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:., : > *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9., . : 9.a.a.a.a.a.:.9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y > <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.: > K a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:.1 . 7 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.3 . . > q 9.a.a.a.a.a.a.a.a.a.a.a.a.T : 3 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.1 . y a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6 1 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q . . : ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;.> > ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.9 : : H 0.a.a.a.a.a.a.a.a.0.w , , ! a.a.a.a.a.a.a.u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.3 . , w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a., : I a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.1 . : 5 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;.> 4 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t : . : : 4 T :.y.a.u.,.H : : , u.a.a.a.a.a.a.w.6 q.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.<.1 : : T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: : 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.<.> : U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;.> : ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.I : : , : , : , . . > T a.a.a.a.a.a.a.G 4 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > . 3 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;., 5 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.-.> : 3 >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:., . r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! : 4 u.a.a.a.a.a.a.<.> . 5 y.a.a.a.a.a.a.a.a.a.a.a.a.a.<.e : : ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.U . : E a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.3 : : > L u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:.> : w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*., > :.a.a.a.a.a.a.a.q : 3 ,.a.a.a.a.a.a.a.a.a.a.9.r : . . w a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.8 : y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.y > . > , T y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.> : E a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,., : H a.a.a.a.a.a.a.-.> > E y.a.a.a.a.a.,.U 3 > . : 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.: q a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.G : , > , , > > 7 ^ u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.1 . 6 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.4 : . 5 y.a.a.a.a.a.a.a.4 > : 5 r q 6 , , . , ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,., , ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.^ ~ :.y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.8 . > ,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.G : 1 w.a.a.a.a.a.a.a.~ > . : r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E . > u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r > : L a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;.1 : . > ,.a.a.a.a.a.a.a.u.1 1 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w G a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.U , 1 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.H : . , ;.a.a.a.a.a.a.a.a.R > > >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.> , ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > . > =.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;.w : : : 4 0.a.a.a.a.a.a.a.a.u., , T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.> 1 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.> : r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.U 1 , . . > J u.a.a.a.a.a.a.a.a.a.T , . q a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ : : P a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0., , w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.E *.y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.r > , . . , : r 0.a.a.a.a.a.a.a.a.a.a.y., . 3 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y > 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6 . : ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.8 : , > ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.U 0 2 : : > : . , r ^ w.a.a.a.a.a.a.a.a.a.a.a.a.~ , 3 w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.2 4 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.K > . 9 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.3 . > t a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.0.y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y 3 w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.: : E a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.> : 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.6 . > G a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1 . 2 q.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.&., : y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.> > U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y : > H a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.: : 6 q.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J q a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7 . 3 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T , > ~ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r . , ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5 , &.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.L > : ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.: > 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:.> : G y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: > u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.=.: . . e a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.-.a.a.a.a.a.0., . 6 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:., . . > 5 :.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;., G a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q., > 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.L : . 8 a.a.a.a.a.8 . : U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.q : > . , , K <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.U . , ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.8 . : L a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ 1 : . , E a.a.a.a.U : . : >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.W 8 > 1 5 0 G *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.8 1 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T > 1 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.9 > . : e a.a.a.a.>.> . . 0 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.: . I a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.: > ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T : . : q u.a.a.a.a.5 > 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;., > 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9 . 4 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.8 : . : q u.a.a.a.a.*.: . J a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.L . 3 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ > , -.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.Q > . : w u.a.a.a.a.a.4 > u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.4 : U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w., 5 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.0 > : w u.a.a.a.a.a.a.*., . , >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: > <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r : . , &.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ , . : w u.a.a.a.a.a.a.a.a.9.4 : : W a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ , 3 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.> 4 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.e > > K a.a.a.a.a.a.a.a.a.a.a.u.y , G a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.H . U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.1 > ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*., . > W a.a.a.a.a.a.a.a.a.a.a.a.a.a.E > 4 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1 : <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J > 2 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.y : . : =.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.1 . . a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.> 3 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.: : ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > . : 1 <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.3 . : y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! : . U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9 . . : y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.q : : 6 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.4 . > w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e , ,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.> 5 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E > . > y u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w., , 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a., 1 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q . P a.a.a.a.a.a.a.a.a.a.a.a.a.<.6 : : ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.> , ,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,., . I a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,.> , :.a.a.a.a.a.a.a.a.a.a.a.w.G : . . : 1 ,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.U : , :.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T : , <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w : u.a.a.a.a.a.a.a.a.a.y.U > . . : w y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y., , -.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q 1 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.<.> : a.a.a.a.a.a.a.a.a.! , : . : T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T : , >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.: . P a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e : 9.a.a.a.a.a.>.J , : . , ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.: > 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:., , ,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.> 4 ^ 9.;.Y 3 , . : 8 w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.4 > w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.I . 1 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r . > , , . : P u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.K . : u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6 . P a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.: : 2 >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*., : a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: , ,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ , . : H u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,., , a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*., , a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w : 1 =.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q., 8 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J . y a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.: , r y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.: J a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.2 > ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;., . , ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.: : ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.: : y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ > > e w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.: , :.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ , 5 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T . > 4 ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.. . y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r . P a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.H : , E a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.. 1 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a., , :.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.P > J y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.: . J a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.<., : a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.&., > 0 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: , ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E : q a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.> . > 6 *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: : a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q : Q a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J > , > J <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.: > 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w > : > 6 ~ y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.: , *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.E ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:., 1 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.^ y 0 H T <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.. 4 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T . y a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.U . H a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.: , =.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.: t a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6 , *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.4.+.| F M v z c c c c c m | 6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.: . 8 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6 , ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.: : y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.#.) m z z v c u u u u u u u u u u u c c v #.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a., . : >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E : : y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*., 6 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.o.D v z c u u u u u u u u u u u u u u u u u u u u c 5.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1 : *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.: 8 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.K : U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i.+.Z c c c u u u u u u u u u u u u u u u u u u u u u u u u z X.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e : : :.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9 . , *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.4 > >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t.O.V z c u u u u u u u u u u u u u u u u u u u u u u u u u u u u c X.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.W 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! > 4 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: > a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.X.B x c u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u c p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.: , ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.&., w a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i...m c x u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u x } a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.&.w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e . 1 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J . E a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.F c c u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u c t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.0 . T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.> : ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3 , >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.#.m c u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u c 3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e : > *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y., 3 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: : a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.{ c c u u u u u u u u u u u u u u u u u u u u u u u c c x v V ) S M c u u u u u u u c 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! : 1 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J : : *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.&.> 6 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.A c z u u u u u u u u u u u u u u u u u u u u u c u m { +.5.p.a.a.a.a.a.2.z u u u u u c O.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.> : T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.: q a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.H L a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7.Z c u u u u u u u u u u u u u u u u u u u u z c c F #.i.a.a.a.a.a.a.a.a.a.a.| z u u u u c o.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.8 . : y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.4 : 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3 , &.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r./ z u u u u u u u u u u u u u u u u u u u u x M .6.a.a.a.a.a.a.a.a.a.a.a.a.a.3.c u u u u c 2.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.U > . G a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.Y > . J a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: > w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i.{ z z u u u u u u u u u u u u u u u u u u c v | r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.c u u u x b 7.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.> : <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.> > y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ , 1 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p...c z u u u u u u u u u u u u u u u u u c c F 3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.+.z u u u c B i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.1 . 6 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9 > R a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.H r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.+.b c u u u u u u u u u u u u u u u u u c B +.p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a...c u u u c { p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.G : > ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! : 3 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3 : W a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t.C c u u u u u u u u u u u u u u u u u c S 6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a._ c u u c m 5.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > > u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.> > *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.: , <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.v z u u u u u u u u u u u u u u u u c S 6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.m c u u z } a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q., . P a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e : . q a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ , : a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.` c u u u u u u u u u u u u u u u u c S 6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.#.c u u c m 7.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9 . : 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.> : <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.H 8 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.m c u u u u u u u u u u u u u u u c S 6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.) c u u z | a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T , q a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.1 : J a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3 . I a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.X.c u u u u u u u u u u u u u u u c m 6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.M z u c m e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:.: > 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J : , y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.: , -.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i.C c u u u u u u u u u u u u u u u z } a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i.m x c v O.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0., > T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.: : E a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ , : y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.b z u u u u u u u u u u u u u u z b 5.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i.M u v o.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.4 . 8 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.4 . 3 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.H 3 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.v u u u u u u u u u u u u u u u c / p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.#.#.7.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e : , 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T > > >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.2 y a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.c u u u u u u u u u u u u u u x c 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.I : : T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.: : K a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.: : ~ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.2.c u u u u u u u u u u u u u u x m t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ : . 6 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.8 . 2 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ , , 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.c u u u u u u u u u u u u u u z B i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,.> . : 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.L : > ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.G : a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.+.z u u u u u u u u u u u u u u z B p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.1 : T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.> : H a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.2 0 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.u u u u u u u u u u u u u u u u n p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.8 . . 5 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.> . 1 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.> . Y a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.v u u u u u u u u u u u u u u u c 6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y : > <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ q.a.a.a.a.a.a.a.a.a.a.a.u.4 > =.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ : , :.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.M u u u u u u u u u u u u u u u c o.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T : > T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ . 3 w.a.a.a.a.a.a.a.a.a.u.e : . r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.G : y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.F c u u u u u u u u u u u u u u u m a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.=.> . q a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > . 4 y.a.a.a.a.a.a.a.y.7 : , y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1 . 4 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a...c u u u u u u u u u u u u u u u c @.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.> , w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:.> : 5 y.a.a.a.a.a.,.3 : > ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.> H a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.c u u u u u u u u u u u u u u u u v a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.2 . . > *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w., . 2 =.u.u.;.0 > . w a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ , > ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a./ u u u u u u u u u u u u u u u u u / a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.@./ 3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9 . : K a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.6 . . , > : , : q.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y > 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.c u u u u u u u u u u u u u u u u x ..a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7.F c c u ` a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J : 5 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.G : , ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1 , a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.F u u u u u u u u u u u u u u u u u c $.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.Z c x u c ) a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! > : 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! , . 9 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.> w a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.c u u u u u u u u u u u u u u u u u v 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.2.V c u u u z O.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:.: > ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.: > 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ > : R a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.#.c u u u u u u u u u u u u u u u u u u A a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.$.m c u u u u v 3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.> : r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.1 > ~ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J , >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.' u u u u u u u u u u u u u u u u u u u x +.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.O.b c u u u u c M t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.4 . 1 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e . : y a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9 : u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.V u u u u u u u u u u u u u u u u u u u u z { p.a.a.a.a.a.a.a.a.a.a.7. .m c c u u u u u c _ p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e : > :.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.&., 4 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1 6 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.v u u u u u u u u u u u u u u u u u u u u u x x F $.3.2.2.1.1.1.` v c x u u u u u u x v 2.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.I > . : U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.1 > ,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: . I a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.B u u u u u u u u u u u u u u u u u u u u u u u u c v c v v v v u u u u u u u u u c D i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > : 9 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.H : . > W a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>., . , =.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.] u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u x c #.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,.> 2 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:.> : e a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ > , u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.@.c u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u c C r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.1 > <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.3 . 6 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.L . y a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.b u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u z v #.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6 . : &.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.U > . 3 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q , *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.c u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u c ` p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y : , U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.<.> : 2 : 1 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.4 > u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.F c u u u u u u u u u u u u u u u u u u u u u u u u u u u u u c B 6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T , : r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.8 . : Y u.y > . , ,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.4 : W a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a./ c u u u u u u u u u u u u u u u u u u u u u u u u u u z v @.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.=.: . 6 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > > U a.a.a.E > . : 7 w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6 5 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.{ c u u u u u u u u u u u u u u u u u u u u u u u u c ` i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9., , w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1 . e a.a.a.a.a.;., : . : : J u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.&. 3 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.m c u u u u u u u u u u u u u u u u u u u u c B 5.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.3 . > ,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E > > y.a.a.a.a.a.a.q.Q G T y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.) c c u u u u u u u u u u u u u u u z c +.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9 : > ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y., > &.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.v u u u u u u u u u u u u u c ` i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.K > > U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.I : : r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.6.1.X.` / @.t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t.C c u u u u u u u u u u u c V 7.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ : : e a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.: , y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3./ M m 5.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.e.e.r.p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.#.V z c v c u u c z m t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.v u u u u u u u u u u u z b 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t.6.3.p.a.a.a.a.a.a.a.a.a.:.: . 5 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.G : > *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.} b c u u z e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.2.O. ./ V m c u v c c u V a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.F z c u u u u u u u u u x M a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p._ c u u u u u u u u u u z c o.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.D c c c D a.a.a.a.a.a.a.a.q., , 8.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.1.| / ..$.i.a.a.a.a.a.a.a.<.: : t a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.F z c u u z v 5.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i.2.} V u c c c u u u u u u u u c c { a.a.a.a.a.a.a.a.a.a.a.a.p...v v z u u u u u u u u u u z x ..a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.m c u u u u u u u u u u c ` t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.$.M z u u u u A a.a.a.a.a.a.a.u.4 . X $ a d f x c u v / i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.| v x c u u u c M p.a.a.a.a.a.a.w . > y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7.D x u u u u x F t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.| m z c u u u u u u u u u u u u c v | t.a.a.a.a.a.a.a.a.a.a.a.a.o.v c u u u u u u u u c u n Z _ o.6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.O.z u u u u u u u u u u c C 7.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.| v c u u u u u c 2.a.a.a.a.a.a.a.e : ; # g k k u u u u u u u z b 6.a.a.a.a.a.a.a.a.a.a.a.2.C c z u u u u u u u z ..a.a.a.a.a.>.: > E a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.A c u u u u c M 5.a.a.a.a.a.a.6.e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.@.V z c u u u u u u u u u u u u u c n O.p.a.a.a.a.a.a.a.a.a.a.a.a.O.b c u u u u u u u c m | 2.p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i.S c u u u u u u u u u c n 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.b z u u u u u u u V a.a.a.a.a.a.a.U < a k k u u u u u u u u u u u u { a.a.a.a.a.a.a.a.a.6.V c u u u u u u u u u u c +.a.a.a.a.a.e . 4 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.C c u u u u c b #.a.a.a.a.a.a.e.F m a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.b c u u u u u u u u u u u u u u c B 1.a.a.a.a.a.a.a.a.a.a.a.a.a.+.b x u u u u u u x x D 5.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.v x u u u u u u u u z c o.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.{ x u u u u u u u u z 5.a.a.a.a.a.a.&.- k u u u u u u u u u u u u u u u F a.a.a.a.a.a.a.t./ c u u u u u u u u u u u u v 6.a.a.a.a.w.: > ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.V c u u u u c c .p.a.a.a.a.a.i.` x u #.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.B c u u u u u u u u u u u u u c v { e.a.a.a.a.a.a.a.a.a.a.a.a.a.+.b c u u u u u u z c | t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.{ c u u u u u u u u u z D i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7.m c u u u u u u u u u D a.a.a.a.a.a.%.h k u u u u u u u u u u u u u u u x ..a.a.a.a.a.a.| z x u u u u u u u u u u u u u c p.a.a.a.a.I : . r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.B c u u u u u c / t.a.a.a.a.a.a. .c z u m a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.) c u u u u u u u u u u u u z c D 1.p.a.a.a.a.a.a.a.a.a.a.a.a.a.$.b x u u u u u u x z ` i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.M c u u u u u u u u u c $.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a...c u u u u u u u u u u z e.a.a.a.a.a.[ k u u u u u u u u u u u u u u u u u c 3.a.a.a.a.e.M z u u u u u u u u u u u u u u x } a.a.a.a.u., : w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.F c u u u u u c B 6.a.a.a.a.a.a.2.v c u u c 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.b z u u u u u u u u u u u c c { t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.n x u u u u u u u c F e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.v u u u u u u u u u c D i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.B c u u u u u u u u u u z / a.a.a.a.6.n k u u u u u u u u u u u u u u u u u u c a.a.a.a.X.c u u u u u u u u u u u u u u u u z i.a.a.a.a.! > > T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.{ c u u u u u z v #.a.a.a.a.a.a.p._ c u u u u m a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.{ c u u u u u u u u u u u u c ] i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.m x u u u u u u u u c +.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.c u u u u u u u u x v 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.c x u u u u u u u u u u u z r.a.a.a.+.c u u u u u u u u u u u u u u u u u u u u ' a.a.e.V c u u u u u u u u u u u u u u u u z ] a.a.a.a.a.4 3 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.O.c x u u u u x x { p.a.a.a.a.a.a.5.b x u u u u z 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.m z u u u u u u u u u u u c C e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.C c u u u u u u u u u v $.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.X.c u u u u u u u u c F t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.` c u u u u u u u u u u u u c { a.a.a.` c u u u u u u u u u u u u u u u u u u u u c 6.a.O.c x u u u u u u u u u u u u u u u u u z r.a.a.a.a.;., > =.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.2.m z u u u u u c A e.a.a.a.a.a.a.p.` c u u u u u u m a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.b u u u u u u u u u u u u c O.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.O.c x u u u u u u u u u u z c ) ..O.#.1.3.e.r.p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.` z u u u u u u u u c #.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.m c u u u u u u u u u u u u u c i.a.i.C c u u u u u u u u u u u u u u u u u u u u u m t.C c u u u u u u c u u u u u u u u u u u x F a.a.a.a.a.w 6 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7.Z c u u u u u c n 1.a.a.a.a.a.a.a.6.m x u u u u u u c #.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.c u u u u u u u u u u u x m r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.A c u u u u u u u u u u u u u u u u z c v v c c u u x v b M V A { +.6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.{ c u u u u u u u u c +.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.$.c u u u u u u u u u u u u u u c O.a.6.b u u u u u u u u u u u c x v u u u u u u u u z V c u u u u u u c / +.c u u u u u u u u u u x 6.a.a.a.a.w.: : :.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t.) c u u u u u u c ..a.a.a.a.a.a.a.a.X.c u u u u u u u u v a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.c u u u u u u u u u u u z B i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.c u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u c c v | i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a. .c u u u u u u u u c X.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.) c u u u u u u u u u u u u u u x M a.$.c u u u u u u u u u k k ( 3.7.{ z u u u u u u u z c u u u u u c M e.a.5.v u u u u u u u u u u C a.a.a.a.a.T : 0 a.a.a.a.a.a.a.a.a.a.a.a.a.p.| c z u u u u u c m e.a.a.a.a.a.a.a.a. .z u u u u u u u u c ..a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.c u u u u u u u u u u u c C p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i.B x c x u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u x x ..a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.O.c u u u u u u u u c } a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.b c u u u u u u u u u u u u u u u x 6.{ z u u u u u u u u k l * ,.a.a.a./ u u u u u u u u u u u u u u z { p.a.a.| z u u u u u u u u u c 2.a.a.a.a.a.4 > >.a.a.a.a.a.a.a.a.a.a.a.a.5.m c u u u u u u c F p.a.a.a.a.a.a.a.a.} c u u u u u u u u u c i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t.c u u u u u u u u u u u u v p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.4.X.{ _ F D Z C B M M V C A F D C V M m b x c c u u u u u u u u u u u u z 3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.#.z u u u u u u u u x F a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.{ c u u u c b v u u u u u u u u u u x / C c u u u u u u u u k p > ^ a.a.a.6.c u u u u u u u u u u u u u c +.a.a.a.p.v u u u u u u u u u u m a.a.a.a.a.9.: . w a.a.a.a.a.a.a.a.a.a.a.p.{ c u u u u u u u c O.a.a.a.a.a.a.a.a.a.+.z u u u u u u u u u u ` a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.V u u u u u u u u u u u u c 2.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.| c c u u u u u u u u u u u v p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7.c u u u u u u u u u z t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.m c u u u c } a.m u u u u u u u u u u u x x u u u u u u u u k & : U a.a.a.a.V u u u u u u u u u u u u u z #.a.a.a.a.+.c u u u u u u u u u c +.a.a.a.a.a.I . > <.a.a.a.a.a.a.a.a.a.a.5.n c u u u u u u z n 7.a.a.a.a.a.a.a.a.a.e.z u u u u u u u u u u x e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.` c u u u u u u u u u u u z F a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.{ c u u u u u u u u u u v 5.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.m u u u u u u u u u x } a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.{ c u u u c M e.a.e.x u u u u u u u u u x u u u u u u u u u u k % : e a.a.a.a.+.c u u u u u u u u u u u u z 1.a.a.a.a.a.b u u u u u u u u u u x i.a.a.a.a.a.1 . r a.a.a.a.a.a.a.a.a.p._ c u u u u u u u c D p.a.a.a.a.a.a.a.a.a.p.m u u u u u u u u u u u m a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.#.c u u u u u u u u u u u u c r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a./ c u u u u u u u u u z O.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.F x u u u u u u u u u v p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7.m c u u u x F p.a.a.D u u u u u u u u u u x u u u u u u u u u k @ . 4 y.a.a.a.e.c u u u u u u u u u u u u c 2.a.a.a.a.a.1.c u u u u u u u u u u V a.a.a.a.a.>., > 9.a.a.a.a.a.a.a.a.3.b c u u u u u u u c ` a.a.a.a.a.a.a.a.a.a.a.| c u u u u u u u u u u u F a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7.c u u u u u u u u u u u u u c a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.u u u u u u u u u u u ) a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.+.c u u u u u u u u u x | a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.| c u u u u z ..a.a.a.5.c u u u u u u u u u u u u u u u u u u u k O , 0.a.a.a.a.m u u u u u u u u u u u u c 3.a.a.a.a.a.a.V u u u u u u u u u u c O.a.a.a.a.a.H . : L a.a.a.a.a.a.a.p.) c u u u u u u u u c S a.a.a.a.a.a.a.a.a.a.a.i.c u u u u u u u u u u u z X.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.b u u u u u u u u u u u u u u C a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.m u u u u u u u u u u D a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.c u u u u u u u u u u c 3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.M c u u u u c 2.a.a.a.a.V u u u u u u u u u u u u u u u u u u u l o : :.a.a.a.a.{ c u u u u u u u u u u u c 3.a.a.a.a.a.a.6.c u u u u u u u u u u z r.a.a.a.a.a.4 . 1 y.a.a.a.a.a.a.2.b u u u u u u u u u z V p.a.a.a.a.a.a.a.a.a.a.a.` z u u u u u u u u u u u c X.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.S z u u u u u u u u u u u u u u { a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.A u u u u u u u u u x ..a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.C x u u u u u u u u u u u p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.X.c u u u u c M r.a.a.a.a.$.c u u u u u u u u u u u u u u u u u u f o . : Q a.a.a.a.2.c u u u u u u u u u u u c 5.a.a.a.a.a.a.a.F u u u u u u u u u u u M a.a.a.a.a.a.U 8 q.a.a.a.a.a.i.F c u u u u u u u u u u M p.a.a.a.a.a.a.a.a.a.a.a.i.u u u u u u u u u u u u u u | a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.} c u u u u u u u u u u u u u u u F a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.m u u u u u u u u u c 2.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.2.z u u u u u u u u u u u m a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.V c u u u u c { a.a.a.a.a.t.v u u u u u u u u u u u u u u u u u k g X > J a.a.a.a.p.v u u u u u u u u u u u c 6.a.a.a.a.a.a.a.r.z u u u u u u u u u u x | a.a.a.a.a.a.a.a.a.a.a.a.a.+.v u z u c u u u u u u u b r.a.a.a.a.a.a.a.a.a.a.a.a.O.c u u u u u u u u u u u u u C a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.F c u u u u u u u u u u u u u u u u b a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.u u u u u u u u u u x r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.m u u u u u u u u u u u u m a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a. .c u u u u z c 2.a.a.a.a.a.a.S u u u u u u u u u u u u u u u u u k i . 0 a.a.a.a.a.} c u u u u u u u u u u c 3.a.a.a.a.a.a.a.a.] z u u u u u u u u u u c #.a.a.a.a.a.a.a.a.a.a.a.e.C c u x Z c u u u u u u u c 2.a.a.a.a.a.a.a.a.a.a.a.a.a.B u u u u u u u u u u u u u u c t.a.a.a.a.a.a.a.a.a.a.a.a.7.m c u u u u u u u u u u u u u u u u u z p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.c u u u u u u u u u V a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.X.z u u u u u u u u u u u u c a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.b z u u u u c V r.a.a.a.a.a.a.+.c u u u u u u u u u u u u u u u u k s . 2 y.a.a.a.a.e.x u u u u u u u u u u c o.a.a.a.a.a.a.a.a.p.c u u u u u u u u u u u c 7.a.a.a.a.a.a.a.a.a.a.X.c u u c 1.S u u u u u u u u B a.a.a.a.a.a.a.a.a.a.a.a.a.r.x u u u u u u u u u u u u u u c B p.a.a.a.a.a.a.a.a.a.e.| z u u u u u u u u u u u u u u u u u u u v 1.a.a.a.a.a.a.a.a.a.a.a.a.a.e.X.| X.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.Z u u u u u u u u u c 6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.c u u u u u u u u u u u u u c e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.M c u u u u u c } a.a.a.a.a.a.a.r.c u u u u u u u u u u u u u u u u u p > 9.a.a.a.a.a.F u u u u u u u u u u c _ a.a.a.a.a.a.a.a.a.1.c u u u u u u u u u u u u a.a.a.a.a.a.a.a.a.6.m c u c V t.2.z u u u u u u u c o.a.a.a.a.a.a.a.a.a.a.a.a.a.1.c u u u u u u u u u u u u u u u x b +.t.a.a.a.r.5.O.B z c u u c z u u u u u u u u u u u u u u u u u v e.a.a.a.a.a.a.a.a.a.a.2.V z c u u Z a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.c u u u u u u u u c O.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.@.c u u u u u u u u u u u u u u { a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.D c u u u u u z b 6.a.a.a.a.a.a.a.a.C u u u u u u u u u u u u u u u u k = > =.a.a.a.a.a.t.c u u u u u u u u u u V a.a.a.a.a.a.a.a.a.a.} u u u u u u u u u u u u n a.a.a.a.a.a.a.i._ x u u x .a.a.b u u u u u u u u c 3.a.a.a.a.a.a.a.a.a.t.$._ ` } u u u u u u u u u u u u u u u u u u c c c c u c c c u u u c n 5.u u u u u u u u u u u u u u u u u u u z F 1.5.e.t.a.7.O.D c c u u u c C e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t.n u u u u u u u u c +.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.M u u u u u u u u u u u u u u u c 7.a.a.a.a.a.a.a.a.a.a.a.a.a.p.{ c c u u u u u c ) p.a.a.a.a.a.a.a.a.O.c u u u u u u u u u u u u u u u k # > T a.a.a.a.a.a. .z u u u u u u u u u b p.a.a.a.a.a.a.a.a.a.a.B u u u u u u u u u u u u m a.a.a.a.a.a.$.v x u z n 6.a.a.X.z u u u u u u u u c ` a.a.a.a.p.7.#./ b z z u Z C u u u u u u u u u u u u u u u u u u u u u u u u u u u u c } a.a.u u u u u u u u u u u u u u u u u u u u u c v c z u c z u u u u c b 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.b u u u u u u u c C r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.x u u u u u u u u u u u u u u u u b 6.a.a.a.a.a.a.a.a.a.a.3._ c c u u u u u z v 2.a.a.a.a.a.a.a.a.a.r.x u u u u u u u u u u u u u u u k $ > y a.a.a.a.a.a.a.v u u u u u u u u u c e.a.a.a.a.a.a.a.a.a.a.p.c u u u u u u u u u u u u v a.a.a.a.e.C c u u z ` p.a.a.a.c u u u u u u u u u u c v C m u z c c u u u c | a.C u u u u u u u u u u u u u u u u u u u u u u u u u u c C 6.a.a.a.u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u z c ..p.a.a.a.a.a.a.a.a.a.a.3.o.) 7.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.b z u u u u u x c O.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.{ u u u u u u u u u u u u u u u u u u z ) 1.e.a.a.a.p.3.` c v u u u u u u u c D i.a.a.a.a.a.a.a.a.a.a.C u u u u u u u u u u u u u u u k + : 6 u.a.a.a.a.a.a.7.c u u u u u u u u c 1.a.a.a.a.a.a.a.a.a.a.a.t.x u u u u u u u u u u u u c 5.a.1.C c u u c m 3.a.a.a.a.$.c u u u u u u u u u u u u u u u u u u u c Z e.a.a.A u u u u u u u u u u u u u u u u u u u u u u u u c M 2.a.a.a.a.a.b u u u u u u u u u u u u u u u u u u u u u u u u u u u u c F t.a.a.a.a.a.a.a.a.p.$.F c c x z o.a.a.a.a.a.a.a.a.a.a.a.a.a.2.V c u u u u u u c C r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.b u u u u u u u u u u u u u u u u u u u u c c z u u x c u u u u u u u u x c #.a.a.a.a.a.a.a.a.a.a.a.o.c u u u u u u u u u u u u u u l o 1 w.a.a.a.a.a.a.a.O.c u u u u u u u u B a.a.a.a.a.a.a.a.a.a.a.a.a.u u u u u u u u u u u u u u c u v u u u x } p.a.a.a.a.a.M u u u u u u u u u u u u u u u u u u c v 1.a.a.a.a./ u u u u u u u u u u u u u u u u u u u u u u c b #.a.a.a.a.a.a.a.{ z u u u u u u u u u u u u u u u u u u u u u u u u u c m 5.a.a.a.a.a.a.a.a.2.Z z c u u u u u V 6.a.a.a.a.a.a.a.a.i.1.{ m c u u u u u u v b +.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.z u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u c V r.a.a.a.a.a.a.a.a.a.a.a.i.c u u u u u u u u u u u u u z j X . : ,.a.a.a.a.a.a.a.a._ u u u u u u u u x 6.a.a.a.a.a.a.a.a.a.a.a.a.a.u u u u u u u u u u u u u u u u u u c B e.a.a.a.a.a.a.a.c u u u u u u u u u u u u u u u u u c { p.a.a.a.a.a.$.c u u u u u u u u u u u u u u u u u u u x v o.a.a.a.a.a.a.a.a.a.r.c u u u u u u u u u u u u u u u u u u u u u u x x C 2.a.a.a.a.a.a.a.a.3.M c u u u u u u u u z c u m / F D Z C b x c u u u u u u c z A 2.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.c u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u z c X.a.a.a.a.a.a.a.a.a.a.a.a.a.) z u u u u u u u u u u u u c N < > ^ a.a.a.a.a.a.a.a.a._ u u u u u u u x F a.a.a.a.a.a.a.a.a.a.a.a.a.a.v u u u u u u u u u u u u u u u x c o.a.a.a.a.a.a.a.a.a.u u u u u u u u u u u u u u u x x ) r.a.a.a.a.a.a.a.p.c u u u u u u u u u u u u u u u u u c c | i.a.a.a.a.a.a.a.a.a.a.a.3.c u u u u u u u u u u u u u u u u u u u c x ` e.a.a.a.a.a.a.a.a.a.6.z u u u u u u u u u u u u u u u u u u u u u u u u u u c v | t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.o.c u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u x D r.a.a.a.a.a.a.a.a.a.a.a.a.a.7.z u u u u u u u u u u u u c ) 8 > I a.a.a.a.a.a.a.a.a.a. .x u u u u u u x t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.X.c u u u u u u u u u u u u u c S r.a.a.a.a.a.a.a.a.a.i.z u u u u u u u u u u u u z c ) r.a.a.a.a.a.a.a.a.a.a.2.u u u u u u u u u u u u u u c x C +.i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.F c c u u u u u u u u u u u u u c c A O.p.a.a.a.a.a.a.a.a.a.a.a.t.M x c c c u u u u u u u u u u u u u u u u u u v c v A 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a./ u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u x b 3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.C u u u u u u u u u u u u c ..;., : 9 a.a.a.a.a.a.a.a.a.a.a.7.c u u u u u x { a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.b u u u u u u u u u u c c _ e.a.a.a.a.a.a.a.a.a.a.a.a.` c u u u u u u u u u c v } r.a.a.a.a.a.a.a.a.a.a.a.a.a.1.b c u u u u u u u u c u B O.t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.| V z c v v c c c c u c M } 3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.1.X.) V v x c v c c u c z c c c z b S .2.t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a./ u u u u u u u u u u u u u u u u u u u u u u u u u u u u u z } a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.c u u u u u u u u u u u c @.a.8 , w.a.a.a.a.a.a.a.a.a.a.a.a.S x u u u u z e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.b c u u u u u u c n O.p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t.V c u u u u v c c / 3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.F n z v m B S / X.r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.3.1.+.@.3.e.p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.e.3.1.+.X.X.O.O.@.3.p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.` u u u u u u u u u u u u u u u u u u u u u u u u u u u c Z e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.V u u u u u u u u u u u c 3.a.;., > *.a.a.a.a.a.a.a.a.a.a.a.a.a.i.V c u u x Z a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p...M z u x m / 2.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.| { _ { $.e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a. .u u u u u u u u u u u u u u u u u u u u u u u u u z b 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.z u u u u u u u u u z n e.a.a.9 > K a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.+.b x m t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.O.c u u u u u u u u u u u u u u u u u u u u u u z c { p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.v u u u u u u u u c Z p.a.a.9.> . 5 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t.p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.c u u u u u u u u u u u u u u u u u u u u c c { t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.c u u u u u u u c { a.a.a.a.K : > 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.n u u u u u u u u u u u u u u u u u u x c ` t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u u u u u u u c #.a.a.a.a.u.> > ~ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.o.z u u u u u u u u u u u u u u u u z ` r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.{ c u u u c b 7.a.a.a.a.a.^ , : H a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.c u u u u u u u u u u u u u u c ) r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.D c c v ..p.a.a.a.a.a.a.9 . 6 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.+.c u u u u u u u u u u c c { e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.e.a.a.a.a.a.a.a.a.0.> , 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.v v z u u u v c c / 3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.Q : > -.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i.1.X.) D | $.7.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.L J a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a."
};

View file

@ -14,10 +14,10 @@
כדי להפסיק פקודה באמצע ההקשה, יש להקיש C-g.
המחרוזת ">>" בקצה הימני מסמנת הוראות עבורכם כדי לנסות להשתמש בפקודה כלשהי.
לדוגמה:
<<שורות ריקות תתווספנה סביב השורה הבאה ע"י help-with-tutorial>>
<<שורות ריקות תתווספנה סביב השורה הבאה ע״י help-with-tutorial>>
[אמצע העמוד הושאר ריק למטרות לימודיות. הטקסט ממשיך להלן]
>> הקישו עתה C-v (הצג העמוד הבא) על־מנת להתקדם לעמוד הבא. (קדימה, נסו
זאת ע"י לחיצה והחזקה של מקש CONTROL והקשה על v.)
זאת ע״י לחיצה והחזקה של מקש CONTROL והקשה על v.)
מעתה והלאה, עליכם לעשות זאת בכל פעם שתסיימו לקרוא את המוצג על המסך.
שימו לב לחפיפה של שתי שורות כאשר אתם עוברים ממסך למשך, מה שמבטיח רציפות
@ -99,7 +99,7 @@ P מ־previous (קודם), N מ־Next (הבא), B מ־Backward (אחורה)
לתצוגה. לזה קוראים "גלילה". גלילה מאפשרת ל־Emacs להניע את הסמן למקום
כלשהו בטקסט מבלי שהסמן ייעלם מהתצוגה.
>> נסו להניע את הסמן אל מחוץ לתצוגה ע"י הקשת C-n ושימו לב למה שקורה.
>> נסו להניע את הסמן אל מחוץ לתצוגה ע״י הקשת C-n ושימו לב למה שקורה.
אם תנועה תו־תו איטית מדי, תוכלו לנוע מילים שלמות. M-f (META-f) מזיז
את הסמן מילה אחת קדימה ואילו M-b זז מילה אחורה.
@ -196,18 +196,18 @@ argument) משום מקישים אותו לפני הפקודה אליה הוא
>> נסו עתה להקיש C-u 8 C-v.
כתוצאה, התצוגה היתה צריכה לזוז ב־8 שורות. אם ברצונכם לגלול בחזרה,
אפשר להשיג זאת ע"י מתן ארגומנט ל־M-v.
אפשר להשיג זאת ע״י מתן ארגומנט ל־M-v.
אם הפעלתם את Emacs על־גבי תצוגה גרפית כגון X או MS-Windows, אתם
צריכים לראות פס צר וגבוה, ששמו פס גלילה (scroll bar) בצידו של החלון
של Emacs. ניתן לגלול את הטקסט ע"י הקלקת עכבר בתוך פס הגלילה.
של Emacs. ניתן לגלול את הטקסט ע״י הקלקת עכבר בתוך פס הגלילה.
אם העכבר שלכם מצויד בגלגל, תוכלו להשתמש גם בו לגלילת הטקסט.
* אם Emacs מפסיק להגיב
----------------------
אם Emacs מפסיק להגיב לפקודות, תוכלו להפסיק אותו בבטחה ע"י הקשת C-g.
אם Emacs מפסיק להגיב לפקודות, תוכלו להפסיק אותו בבטחה ע״י הקשת C-g.
פקודות שביצוען מתארך אף הן ניתנות להפסקה בעזרת C-g.
בנוסף, תגרום הקשת C-g לביטול הארגומנט הנומרי או תחילת הפקודה שטרם
@ -272,7 +272,7 @@ argument) משום מקישים אותו לפני הפקודה אליה הוא
יתכן שבמקלדת שלכם קיים מקש שעליו רשום <Delete>, אך זה אינו המקש שאנו
קוראים לו <DEL>.
>> הקישו עתה מספר תוים, ואחר־כך מחקו אותם ע"י הקשות אחדות
>> הקישו עתה מספר תוים, ואחר־כך מחקו אותם ע״י הקשות אחדות
על <DEL>. אל תחששו לשנות את הקובץ הזה -- העותק המקורי
של השיעור יישאר ללא שינוי. אתם עובדים על העותק האישי שלכם.
@ -402,7 +402,7 @@ argument) משום מקישים אותו לפני הפקודה אליה הוא
אם שיניתם את הטקסט ואז החלטתם שהשינוי היה טעות, תוכלו לבטל את השינוי
בעזרת פקודת הביטול, C-/.
בדרך כלל,C-/ מבטל את השינויים שבוצעו ע"י פקודה אחת. הפעלה חוזרת של
בדרך כלל,C-/ מבטל את השינויים שבוצעו ע״י פקודה אחת. הפעלה חוזרת של
C-/ ברצף מבטלת שינויים של פקודות קודמות, אחת אחרי השניה.
שני יוצאים מהכלל הזה: פקודות שאינן משנות טקסט (למשל פקודות הנעת הסמן
@ -468,7 +468,7 @@ C-x u, אם־כי היא פחות נוחה להקשה מספר פעמים בזו
פקודה זו שומרת בקובץ את הטקסט המוחזק בתוך Emacs. בפעם הראשונה שתפעילו
פקודה זו, Emacs משנה את שם הקובץ המקורי לשם חדש כך שהמקור לא ילך
לאיבוד. השם החדש נוצר ע"י הוספת "~" בסוף השם המקורי של הקובץ.
לאיבוד. השם החדש נוצר ע״י הוספת "~" בסוף השם המקורי של הקובץ.
כשהשמירה מסתיימת, Emacs מציג בשורה התחתונה את שם הקובץ שנשמר. נסו
לשמור לעתים מזומנות על־מנת להימנע מלאבד יותר מדי מהעבודה שלכם אם המחשב
@ -489,7 +489,7 @@ Emacs ייצור את הקובץ עם הטקסט שהקשתם. מאותו רגע
--------
אם תפתחו קובץ נוסף עם C-x C-f, הקובץ הראשון עדיין נשאר פתוח ב־Emacs.
תוכלו לחזור אליו ע"י C-x C-f. כך תוכלו לפתוח מספר רב של קבצים.
תוכלו לחזור אליו ע״י C-x C-f. כך תוכלו לפתוח מספר רב של קבצים.
Emacs מחזיק כל קובץ בתוך יישות בשם "חוצץ" ("buffer"). פתיחת קובץ יוצרת
חוצץ חדש בתוך Emacs. כדי לראות את רשימת החוצצים הקיימים בתוך Emacs,
@ -508,19 +508,19 @@ Emacs ייצור את הקובץ עם הטקסט שהקשתם. מאותו רגע
כשקיימים מספר חוצצים, רק אחד מהם יכול להיות החוצץ "הנוכחי" בכל רגע
נתון. זהו החוצץ בו אתם מבצעים עריכה באותו רגע. אם ברצונכם לערוך חוצץ
אחר, עליכם "לעבור" חוצץ. עבור חוצצים שמתאימים לקבצים, ניתן לעשות זאת
ע"י C-x C-f שיפקוד את הקובץ בשנית. אבל קיימת דרך פשוטה יותר: שימוש
ע״י C-x C-f שיפקוד את הקובץ בשנית. אבל קיימת דרך פשוטה יותר: שימוש
בפקודה C-x b. פקודה זו תחייב אותכם להקיש את שם החוצץ.
>> ניצור עתה קובץ בשם "foo" ע"י הקשת C-x C-f foo <Return>.
>> ניצור עתה קובץ בשם "foo" ע״י הקשת C-x C-f foo <Return>.
עתה חזרו לשיעור זה בעזרת C-x b TUTORIAL.he <Return>.
ברוב המקרים שם החוצץ זהה לשם הקובץ (ללא שם התיקיה שלו). אבל אין זה
תמיד כך. רשימת החוצצים שנוצרת ע"י C-x C-b תציג הן את שם החוצץ והן את
תמיד כך. רשימת החוצצים שנוצרת ע״י C-x C-b תציג הן את שם החוצץ והן את
שם הקובץ עבור כל החוצצים הקיימים ב־Emacs.
כל טקסט שמוצג בחלון של Emacs הינו תמיד חלק של חוצץ כלשהו. קיימים
חוצצים שאינם קשורים לשום קובץ. לדוגמא, החוצץ בשם "*Buffer List*"
המחזיק את רשימת החוצצים שנוצרה ע"י C-x C-b אינו מציג שום קובץ. גם
המחזיק את רשימת החוצצים שנוצרה ע״י C-x C-b אינו מציג שום קובץ. גם
לחוצץ הנוכחי ששמו TUTORIAL.he לא היה קובץ עד שהקשתם על C-x C-s כדי
לשמור אותו בקובץ.
@ -545,18 +545,18 @@ C-x C-s. לכן קיימת פקודה
>> הכניסו שורה של טקסט ואחר־כך הקישו C-x s.
הוא צריך לשאול האם לשמור חוצץ בשם TUTORIAL.he.
השיבו בחיוב ע"י הקשה על "y".
השיבו בחיוב ע״י הקשה על "y".
* הרחבת אוסף הפקודות
--------------------
מספר הפקודות ב־Emacs גדול בהרבה ממה שניתן להפעיל ע"י כל תוי ה־control
מספר הפקודות ב־Emacs גדול בהרבה ממה שניתן להפעיל ע״י כל תוי ה־control
וה־meta. כדי להתגבר על בעיה זו, Emacs משתמש בפקודות X המרחיבות (eXtend)
את אוסף הפקודות הרגיל. פקודות הרחבה אלו הן שתים:
C-x הרחבת תו. תו בודד שבא אחריו משלים את הפקודה.
M-x הרחבה ע"י שם הפקודה. אחריו בא שם ארוך של פקודה.
M-x הרחבה ע״י שם הפקודה. אחריו בא שם ארוך של פקודה.
בעזרת שתי אלו ניתן להפעיל פקודות שימושיות שבהן משתמשים לעתים רחוקות
יותר מאשר פקודות שלמדתם עד עכשיו. כמה מהן כבר ראיתם: C-x C-f לפתיחת
@ -577,7 +577,7 @@ Emacs: הוא מחזיר אתכם לשורת הפקודות הבסיסית של
תצטרכו להקיש את הפקודה "fg" או "%emacs".
הרגע הנכון להשתמש ב־C-x C-c הוא כאשר אתם עומדים להתנתק (log out).
כמו־כן, תצטרכו להשתמש בו כדי לצאת מ־Emacs שהופעל ע"י תוכניות אחרות
כמו־כן, תצטרכו להשתמש בו כדי לצאת מ־Emacs שהופעל ע״י תוכניות אחרות
כגון קריאת דואר אלקטרוני.
קיימות פקודות C-x רבות מאד. להלן רשימת אלו שכבר למדתם:
@ -591,17 +591,17 @@ Emacs: הוא מחזיר אתכם לשורת הפקודות הבסיסית של
C-x 1 השאר רק חלון אחד ומחק כל השאר
C-x u בטל פקודה אחרונה
הרחבה ע"י שם הפקודה שימושית עם פקודות עוד יותר נדירות או פקודות
הרחבה ע״י שם הפקודה שימושית עם פקודות עוד יותר נדירות או פקודות
ספציפיות רק לאופני פעולה (modes) מיוחדים. דוגמא לכך היא פקודה
replace-string (החלף מחרוזת) אשר מחליפה מחרוזת אחת במשנה בכל החוצץ.
אחרי שתקישו M-x, Emacs מציג M-x בתחתית התצוגה ומחכה שתקישו את שם
הפקודה, במקרה זה "replace-string". מספיק שתקישו "repl s<TAB>" ו־Emacs
ישלים את השם המלא. (<TAB> הוא מקש Tab, בדרך כלל תמצאו אותו מעל מקש
ה־CapsLock או Shift, ליד הקצה השמאלי של המקלדת.) סיימו את הזנת הפקודה
ע"י הקשת <Return>.
ע״י הקשת <Return>.
הפקודה להחלפת מחרוזת זקוקה לשני ארגומנטים -- המחרוזת שתוחלף וזו שתחליף
אותה. סיימו הקשה של כל אחת מהן ע"י <Return>.
אותה. סיימו הקשה של כל אחת מהן ע״י <Return>.
>> הביאו את הסמן שתי שורות מתחת לשורה זו.
עתה הקישו M-x repl s<Return>changed<Return>altered<Return>.
@ -703,7 +703,7 @@ Auto Fill mode. כאשר אופן זה מופעל, Emacs אוטומטית פות
בסיום מילה אם הטקסט שהקשתם ארוך מדי בשביל שורה אחת.
להפעלת Auto Fill mode יש להקיש M-x auto-fill-mode <Return>. כאשר אופן
זה מופעל, ניתן לבטלו ע"י M-x auto-fill-mode <Return>. זאת אומרת, פקודה
זה מופעל, ניתן לבטלו ע״י M-x auto-fill-mode <Return>. זאת אומרת, פקודה
זו מפעילה את האופן כשאינו פעיל ומבטלת אותו כשהוא פעיל. לפעולה זו
קוראים "מיתוג" -- הפקודה "ממתגת" את האופן.
@ -717,7 +717,7 @@ Auto Fill mode. כאשר אופן זה מופעל, Emacs אוטומטית פות
>> הקישו C-x f עם ארגומנט של 20. (C-u 2 0 C-x f). אחר־כך הקישו טקסט
כלשהו ושימו לב ש־Emacs פותח שורות חדשות אחרי 20 תווים לכל היותר.
לבסוף, החזירו את הגדרת השוליים ל־70 ע"י שימוש חוזר ב־C-x f.
לבסוף, החזירו את הגדרת השוליים ל־70 ע״י שימוש חוזר ב־C-x f.
אם ערכתם שינויים באמצע פסקה, Auto Fill mode לא ימלא שורות מחדש באופן
אוטומטי.
@ -766,7 +766,7 @@ Auto Fill mode. כאשר אופן זה מופעל, Emacs אוטומטית פות
נמצא "סמ". עתה הקישו <DEL>. ה־"מ" נמחק מהמחרוזת והסמן חוזר למקום בו
הוא מצא את "ס" לראשונה.
אם במהלך החיפוש תפעילו פקודה כלשהי ע"י הקשה על מקש תוך לחיצה על
אם במהלך החיפוש תפעילו פקודה כלשהי ע״י הקשה על מקש תוך לחיצה על
CONTROL או META, החיפוש יסתיים. (כמה תווים יוצאים מכלל זה -- אלו תווים
מיוחדים בעת חיפוש, כדוגמת C-s ו־C-r.)
@ -800,7 +800,7 @@ CONTROL או META, החיפוש יסתיים. (כמה תווים יוצאים מ
הסמן בחלון העליון יישאר במקום בו הוא היה לפני־כן.
תוכלו להמשיך להשתמש ב־C-x o כדי לדלג בין החלונות. "החלון הנבחר", אותו
חלון בו הנכם עורכים טקסט, מזוהה ע"י סמן בולט שמהבהב בזמן שאינכם
חלון בו הנכם עורכים טקסט, מזוהה ע״י סמן בולט שמהבהב בזמן שאינכם
מקלידים. לכל החלונות האחרים מיקום סמן משלהם; אם הפעלתם את Emacs על צג
גרפי, מיקום הסמן בחלונות האחרים מוצג כתיבה ריקה שאינה מהבהבת.
@ -809,9 +809,9 @@ CONTROL או META, החיפוש יסתיים. (כמה תווים יוצאים מ
הנבחר.
C-M-v היא דוגמא אחת של פקודת CONTROL-META. אם במקלדת שלכם קיים מקש
META (או Alt) אמיתי, תוכלו להקיש את הפקודה ע"י לחיצה והחזקה של מקשי
META (או Alt) אמיתי, תוכלו להקיש את הפקודה ע״י לחיצה והחזקה של מקשי
CONTROL ו־META גם יחד ואז להקיש v. הסדר שבו תלחצו על CONTROL ו־META
אינו משנה כי שני המקשים הללו פועלים ע"י שינוי התו המוקש יחד איתם.
אינו משנה כי שני המקשים הללו פועלים ע״י שינוי התו המוקש יחד איתם.
אם אין במקלדת מקש META אמיתי ואתם משתמשים ב־<ESC> כתחליף, הסדר כן
משנה: חייבים להקיש <ESC> ורק לאחר מכן CONTROL-v, וזאת משום
@ -854,8 +854,8 @@ CONTROL ו־META גם יחד ואז להקיש v. הסדר שבו תלחצו ע
>> הקישו M-x delete-frame <Return>.
התבנית שבה הקשתם את הפקודה תיסגר ותיעלם מהמסך.
כמו־כן, ניתן לסגור תבנית בדרך הרגילה הנתמכת ע"י התצוגה הגרפית של
המערכת שלכם (בדרך־כלל, ע"י הקלקה על הכפתור המסומן ב־"X" בפינה עליונה
כמו־כן, ניתן לסגור תבנית בדרך הרגילה הנתמכת ע״י התצוגה הגרפית של
המערכת שלכם (בדרך־כלל, ע״י הקלקה על הכפתור המסומן ב־"X" בפינה עליונה
של התבנית.) שום מידע אינו הולך לעיבוד כאשר סוגרים תבנית (או חלון).
המידע הזה פשוט יורד מהתצוגה, אבל ניתן לאחזרו מאוחר יותר.
@ -863,7 +863,7 @@ CONTROL ו־META גם יחד ואז להקיש v. הסדר שבו תלחצו ע
* רמות עריכה רקורסיביות
-----------------------
יתכן ותיקלעו למצב שקרוי "רמת עריכה רקורסיבית". Emacs מציין זאת ע"י
יתכן ותיקלעו למצב שקרוי "רמת עריכה רקורסיבית". Emacs מציין זאת ע״י
סוגריים מרובעים בשורת הסטטוס מסביב לשם האופן הראשי. למשל, יוצג שם
[(Fundamental)] במקום (Fundamental).
@ -910,7 +910,7 @@ M-x help <Return> כתחליף.)
לציין מה הן עושות, השמות עשויים לשמש כתיעוד מקוצר -- מספיק כדי להזכיר
לכם את הפקודות שלמדתם בעבר.
ניתן לציין אחרי C-h c גם פקודות שמופעלות ע"י סדרת מקשים באורך גדול
ניתן לציין אחרי C-h c גם פקודות שמופעלות ע״י סדרת מקשים באורך גדול
מאחד, כגון C-x C-s או (אם אין מקש META או EDIT או ALT) <ESC> v.
לקבלת מידע מפורט יותר על פקודה, השתמשו בפקודה C-h k במקום C-h c.
@ -934,7 +934,7 @@ M-x help <Return> כתחליף.)
C-h a פקודות בנוגע לנושא מסויים. הקישו מילת מפתח ו־Emacs
יציג את רשימת הפקודות ששמותיהן מכילות את מילת המפתח.
כל הפקודות הללו ניתנות להפעלה ע"י META-x. עבור חלק
כל הפקודות הללו ניתנות להפעלה ע״י META-x. עבור חלק
מהפקודות תוצג גם סדרת מקשים שמפעילה את הפקודה.
>> הקישו C-h a file <Return>.
@ -960,9 +960,9 @@ find-file.
* עוד תכונות
------------
תוכלו ללמוד עוד על־אודות Emacs ע"י קריאה במדריך למשתמש שלו, אם כספר
תוכלו ללמוד עוד על־אודות Emacs ע״י קריאה במדריך למשתמש שלו, אם כספר
מודפס או בגירסה מקוונת בתוך Emacs עצמו. (תוכלו להגיע אל המדריך דרך
תפריט Help או ע"י הקשה על C-h r.) אולם שתי תכונות שבוודאי ימצאו חן
תפריט Help או ע״י הקשה על C-h r.) אולם שתי תכונות שבוודאי ימצאו חן
בעיניכם הן השלמה אשר חוסכת הקשות, ו־dired שמאפשרת טיפול נוח בקבצים.
השלמה היא דרך להימנע מהקשות מיותרות. למשל, אם ברצונכם לעבור לחוצץ
@ -991,7 +991,7 @@ find-file.
--------------
שיעור זה הינו צאצא של שורה ארוכה של שיעורים בשימוש ב־Emacs, החל מהגרסה
הראשונה שנכתבה ע"י Stuart Cracraft עבור גירסת ה־Emacs המקורית.
הראשונה שנכתבה ע״י Stuart Cracraft עבור גירסת ה־Emacs המקורית.
גירסה זו של השיעור הינה חלק מחבילת GNU Emacs. היא מוגנת בזכויות יוצרים
וניתנת להעתקה והפצת עותקים בתנאים מסויימים כדלקמן:
@ -999,7 +999,7 @@ find-file.
Copyright (C) 2010-2015 Free Software Foundation, Inc.
GNU Emacs הינו תכנה חפשית; זכותכם להפיצו ו\או לשנותו בכפוף לתנאי
הרשיון GNU General Public License, כפי שהוא יוצא לאור ע"י Free
הרשיון GNU General Public License, כפי שהוא יוצא לאור ע״י Free
Software Foundation, אם בגרסא 3 של הרשיון, ואם (כאופציה השמורה לכם)
בכל גרסא מאוחרת יותר.
@ -1012,7 +1012,7 @@ Software Foundation, אם בגרסא 3 של הרשיון, ואם (כאופציה
הנכם מוזמנים לקרוא את הקובץ COPYING ואז אכן לחלק עותקים של GNU Emacs
לחבריכם. עזרו לנו לחסל את "הבעלות" על תוכנה שאינה אלא חבלה בתוכנה,
וזאת ע"י שימוש, כתיבה ושיתוף של תוכנה חופשית!
וזאת ע״י שימוש, כתיבה ושיתוף של תוכנה חופשית!

View file

@ -1578,6 +1578,7 @@ time.h: time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(
-e 's|@''PTHREAD_H_DEFINES_STRUCT_TIMESPEC''@|$(PTHREAD_H_DEFINES_STRUCT_TIMESPEC)|g' \
-e 's|@''SYS_TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(SYS_TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \
-e 's|@''TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \
-e 's|@''UNISTD_H_DEFINES_STRUCT_TIMESPEC''@|$(UNISTD_H_DEFINES_STRUCT_TIMESPEC)|g' \
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \

View file

@ -55,6 +55,8 @@
# include <sys/time.h>
# elif @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@
# include <pthread.h>
# elif @UNISTD_H_DEFINES_STRUCT_TIMESPEC@
# include <unistd.h>
# else
# ifdef __cplusplus

View file

@ -1,15 +1,233 @@
2015-01-31 Stefan Monnier <monnier@iro.umontreal.ca>
* emacs-lisp/eieio.el (defclass): Use new eieio-make-class-predicate
and eieio-make-child-predicate.
(eieio-class-parents): Use eieio--class-object.
(slot-boundp, find-class, eieio-override-prin1): Avoid class-p.
(slot-exists-p): Use find-class.
* emacs-lisp/eieio-opt.el (eieio-help-class, eieio-help-constructor):
Use find-lisp-object-file-name, help-fns-short-filename and new calling
convention for eieio-class-def.
(eieio-build-class-list): Remove function, unused.
(eieio-method-def): Remove button type, unused.
(eieio-class-def): Inherit from help-function-def.
(eieio--defclass-regexp): New constant.
(find-function-regexp-alist): Use it.
(eieio--specializers-apply-to-class-p): Handle eieio--static as well.
(eieio-help-find-method-definition, eieio-help-find-class-definition):
Remove functions.
* emacs-lisp/eieio-core.el (eieio--check-type): Remove.
Use cl-check-type everywhere instead.
(eieio-class-object): Remove, use find-class instead when needed.
(class-p): Don't inline.
(eieio-object-p): Check more thoroughly, so we don't treat cl-structs,
such as eieio classes, as objects. Don't inline.
(object-p): Mark as obsolete.
(eieio-defclass-autoload, eieio-defclass-internal, eieio-oref)
(eieio--generic-tagcode): Avoid `class-p'.
(eieio-make-class-predicate, eieio-make-child-predicate): New functions.
(eieio-defclass-internal): Use current-load-list rather than
`class-location'.
* emacs-lisp/cl-generic.el (cl--generic-search-method): Fix regexp.
2015-01-30 Stefan Monnier <monnier@iro.umontreal.ca>
* emacs-lisp/backquote.el (backquote-delay-process): Don't reuse `s'
since it may be "equivalent" in some sense, yet different (bug#19734).
2015-01-30 Oleh Krehel <ohwoeowho@gmail.com>
* outline.el (outline-font-lock-face): Add docstring.
(outline-invisible-p): Improve docstring.
(outline-invent-heading): Add docstring.
(outline-promote): Improve docstring.
(outline-demote): Improve docstring.
(outline-head-from-level): Improve docstring.
(outline-end-of-heading): Add docstring.
(outline-next-visible-heading): Improve docstring.
(outline-previous-visible-heading): Improve docstring.
(outline-hide-region-body): Improve docstring.
(outline-flag-subtree): Add docstring.
(outline-end-of-subtree): Add docstring.
(outline-headers-as-kill): Improve docstring.
2015-01-30 Oleh Krehel <ohwoeowho@gmail.com>
* outline.el (outline-hide-entry): Rename from `hide-entry'.
(hide-entry): Declare as obsolete.
(outline-show-entry): Rename from `show-entry'.
(show-entry): Declare as obsolete.
(outline-hide-body): Rename from `hide-body'.
(hide-body): Declare as obsolete.
(outline-hide-region-body): Rename from `hide-region-body'.
(hide-region-body): Declare as obsolete.
(outline-show-all): Rename from `show-all'.
(show-all): Declare as obsolete.
(outline-hide-subtree): Rename from `hide-subtree'.
(hide-subtree): Declare as obsolete.
(outline-hide-leaves): Rename from `hide-leaves'.
(hide-leaves): Declare as obsolete.
(outline-show-subtree): Rename from `show-subtree'.
(show-subtree): Declare as obsolete.
(outline-hide-sublevels): Rename from `hide-sublevels'.
(hide-sublevels): Declare as obsolete.
(outline-hide-other): Rename from `hide-other'.
(hide-other): Declare as obsolete.
(outline-show-children): Rename from `show-children'.
(show-children): Declare as obsolete.
(outline-show-branches): Rename from `show-branches'.
(show-branches): Declare as obsolete.
2015-01-30 Oleh Krehel <ohwoeowho@gmail.com>
* outline.el (outline-mode): Clean up docstring.
(font-lock-warning-face): Remove obsolete declaration.
(outline-font-lock-face): Remove obsolete comment.
2015-01-30 Oleh Krehel <ohwoeowho@gmail.com>
* lisp/custom.el (defface): Set `indent' to 1.
2015-01-30 Oleh Krehel <ohwoeowho@gmail.com>
* emacs-lisp/easy-mmode.el (define-minor-mode): Set `indent' to 1.
2015-01-30 Michal Nazarewicz <mina86@mina86.com>
* lisp/files.el (save-buffers-kill-emacs): If `confirm-kill-emacs'
is set, but user has just been asked whether they really want to
kill Emacs (for example with a Modified buffers exist; exit
anyway? prompt), do not ask them for another confirmation.
2015-01-29 Jay Belanger <jay.p.belanger@gmail.com>
* lisp/calc/calc-units.el (calc-convert-exact-units): New function.
(calc-convert-units): Check for missing units.
(math-consistent-units-p): Strengthen the test for consistent units.
* lisp/calc/calc-ext.el (calc-init-extensions): Autoload
`calc-convert-exact-units' and assign it a keybinding.
* lisp/calc/calc-help (calc-u-prefix-help): Add help for the
"un" keybinding.
2015-01-28 Stefan Monnier <monnier@iro.umontreal.ca>
* emacs-lisp/cl.el (cl--function-convert): Simplify.
2015-01-28 Tassilo Horn <tsdh@gnu.org>
* textmodes/reftex.el (reftex-syntax-table-for-bib): Give ( and )
punctuation syntax since to allow bibtex fields with values such
as {Test 1) and 2)} (bug#19205, bug#19707).
(reftex--prepare-syntax-tables): New function.
(reftex-mode): Use it.
2015-01-28 Fabián Ezequiel Gallina <fgallina@gnu.org>
python.el: New non-global state dependent indentation engine.
(Bug#18319, Bug#19595)
* progmodes/python.el (python-syntax-comment-or-string-p):
Accept PPSS as argument.
(python-syntax-closing-paren-p): New function.
(python-indent-current-level)
(python-indent-levels): Mark obsolete.
(python-indent-context): Return more context cases.
(python-indent--calculate-indentation)
(python-indent--calculate-levels): New functions.
(python-indent-calculate-levels): Use them.
(python-indent-calculate-indentation, python-indent-line):
(python-indent-line-function): Rewritten to use new API.
(python-indent-dedent-line): Simplify logic.
(python-indent-dedent-line-backspace): Use `unless`.
(python-indent-toggle-levels): Delete function.
2015-01-28 Daniel Koning <dk@danielkoning.com> (tiny change)
* subr.el (posnp): Correct docstring of `posnp'.
(posn-col-row): Make it work with all mouse position objects.
* textmodes/artist.el (artist-mouse-draw-continously):
Cancel timers if an error occurs during continuous drawing. (Bug#6130)
2015-01-28 Eli Zaretskii <eliz@gnu.org>
* button.el (button-activate, push-button): Doc fix. (Bug#19628)
2015-01-28 Michael Albinus <michael.albinus@gmx.de>
* filenotify.el (file-notify-descriptors, file-notify-handle-event):
Adapt docstring.
(file-notify--descriptor): New defun.
(file-notify-callback, file-notify-add-watch, file-notify-rm-watch):
Adapt docstring. Handle multiple values for
`file-notify-descriptors' entries. (Bug#18880)
* net/tramp.el (tramp-handle-file-notify-rm-watch): Do not check
`file-notify-descriptors', the implementation has been changed.
2015-01-28 Eli Zaretskii <eliz@gnu.org>
* net/net-utils.el (net-utils-run-program, net-utils-run-simple):
On MS-Windows, bind coding-system-for-read to the console output
codepage. (Bug#19458)
2015-01-28 Dmitry Gutov <dgutov@yandex.ru>
Unbreak `mouse-action' property in text buttons.
* button.el (push-button): Fix regression from 2012-12-06.
2015-01-28 Glenn Morris <rgm@gnu.org>
* progmodes/sh-script.el (sh-mode): Doc fix.
(sh-basic-indent-line): Handle electric newline. (Bug#18756)
2015-01-28 Paul Eggert <eggert@cs.ucla.edu>
Fix dired quoting bug with "Hit`N`Hide". Fixes Bug#19498.
* files.el (shell-quote-wildcard-pattern): Also quote "`".
2015-01-28 Stefan Monnier <monnier@iro.umontreal.ca>
Tighten up the tagcode used for eieio and cl-struct objects.
* loadup.el: Load cl-preloaded.
* emacs-lisp/eieio-core.el (eieio-defclass-internal): Set the function
slot of the tag symbol to :quick-object-witness-check.
(eieio-object-p): Use :quick-object-witness-check.
(eieio--generic-tagcode): Use cl--generic-struct-tag.
* emacs-lisp/cl-preloaded.el: New file.
* emacs-lisp/cl-macs.el (cl--bind-inits): Remove, unused.
(cl--transform-lambda, cl-destructuring-bind): Remove cl--bind-inits.
(cl--make-usage-args): Strip away &aux args.
(cl-case, cl-typecase, cl--parse-loop-clause): Use macroexp-let2.
(cl-the, cl-check-type): Use macroexp-let2 and cl-typep.
(cl-defstruct): Use `declare' and cl-struct-define.
* emacs-lisp/cl-generic.el (cl--generic-struct-tag): New function.
(cl--generic-struct-tagcode): Use it to tighten the tagcode.
2015-01-27 Katsumi Yamaoka <yamaoka@jpl.org>
* emacs-lisp/cl.el (cl--function-convert):
Merge cache that cl--labels-convert adds (bug#19699).
2015-01-27 Ivan Shmakov <ivan@siamics.net>
* tar-mode.el: Allow for adding new archive members. (Bug#19274)
(tar-new-regular-file-header, tar--pad-to, tar--put-at)
(tar-header-serialize): New functions.
(tar-current-position): Split from tar-current-descriptor.
(tar-current-descriptor): Use it.
(tar-new-entry): New command.
(tar-mode-map): Bind it.
2015-01-27 Sam Steingold <sds@gnu.org>
* progmodes/python.el (python-check-custom-command): Buffer local
because it usually includes the buffer name.
(python-check-command): Set to epylint when pyflakes is not available.
2015-01-27 Thomas Fitzsimmons <fitzsim@fitzsim.org>
* net/eudcb-bbdb.el, net/eudcb-ldap.el, net/eudcb-mab.el,
net/eudc-bob.el, net/eudcb-ph.el, net/eudc.el, net/eudc-export.el,
net/eudc-hotlist.el, net/eudc-vars.el: New maintainer.
2015-01-27 Artur Malabarba <bruce.connor.am@gmail.com>
* isearch.el (isearch-process-search-char): Add docstring.
@ -70,6 +288,8 @@
2015-01-26 Lars Ingebrigtsen <larsi@gnus.org>
* net/shr.el (shr-make-table-1): Fix colspan typo.
(shr-make-table-1): Add comments.
(shr-make-table-1): Make colspan display more sensibly.
* net/eww.el (eww-add-bookmark): Fix prompt and clean up the code
slightly.
@ -1742,8 +1962,7 @@
2014-12-14 Steve Purcell <steve@sanityinc.com> (tiny change)
* emacs-lisp/package.el (package-menu-mode): Use an extra column
for the "Version" column, to accomodate date-and-time-based
versions.
for the "Version" column, to accomodate date-and-time-based versions.
2014-12-14 Cameron Desautels <camdez@gmail.com>

View file

@ -224,10 +224,10 @@ changes to a supertype are not reflected in its subtypes)."
prop val))))
(defun button-activate (button &optional use-mouse-action)
"Call BUTTON's action property.
If USE-MOUSE-ACTION is non-nil, invoke the button's mouse-action
instead of its normal action; if the button has no mouse-action,
the normal action is used instead.
"Call BUTTON's `action' property.
If USE-MOUSE-ACTION is non-nil, invoke the button's `mouse-action'
property instead of `action'; if the button has no `mouse-action',
the value of `action' is used instead.
The action can either be a marker or a function. If it's a
marker then goto it. Otherwise it it is a function then it is
@ -429,11 +429,13 @@ instead of starting at the next button."
(defun push-button (&optional pos use-mouse-action)
"Perform the action specified by a button at location POS.
POS may be either a buffer position or a mouse-event. If
USE-MOUSE-ACTION is non-nil, invoke the button's mouse-action
instead of its normal action; if the button has no mouse-action,
the normal action is used instead. The action may be either a
function to call or a marker to display and is invoked using
`button-activate' (which see).
USE-MOUSE-ACTION is non-nil, invoke the button's `mouse-action'
property instead of its `action' property; if the button has no
`mouse-action', the value of `action' is used instead.
The action in both cases may be either a function to call or a
marker to display and is invoked using `button-activate' (which
see).
POS defaults to point, except when `push-button' is invoked
interactively as the result of a mouse-event, in which case, the

View file

@ -561,6 +561,7 @@
(define-key calc-mode-map "ud" 'calc-define-unit)
(define-key calc-mode-map "ue" 'calc-explain-units)
(define-key calc-mode-map "ug" 'calc-get-unit-definition)
(define-key calc-mode-map "un" 'calc-convert-exact-units)
(define-key calc-mode-map "up" 'calc-permanent-units)
(define-key calc-mode-map "ur" 'calc-remove-units)
(define-key calc-mode-map "us" 'calc-simplify-units)
@ -1176,7 +1177,8 @@ calc-trail-scroll-right calc-trail-yank)
("calc-undo" calc-last-args calc-redo)
("calc-units" calc-autorange-units calc-base-units
calc-convert-temperature calc-convert-units calc-define-unit
calc-convert-temperature calc-convert-units
calc-convert-exact-units calc-define-unit
calc-enter-units-table calc-explain-units calc-extract-units
calc-get-unit-definition calc-permanent-units calc-quick-units
calc-remove-units calc-simplify-units calc-undefine-unit

View file

@ -647,7 +647,7 @@ C-w Describe how there is no warranty for Calc."
(defun calc-u-prefix-help ()
(interactive)
(calc-do-prefix-help
'("Simplify, Convert, Temperature-convert, Base-units"
'("Simplify, Convert, coNvert exact, Temperature-convert, Base-units"
"Autorange; Remove, eXtract; Explain; View-table; 0-9"
"Define, Undefine, Get-defn, Permanent"
"SHIFT + View-table-other-window"

View file

@ -470,6 +470,8 @@ If COMP or STD is non-nil, put that in the units table instead."
(if (string-match "\\` */" uoldname)
(setq uoldname (concat "1" uoldname)))
(math-read-expr uoldname))))))
(unless (math-units-in-expr-p uold t)
(error "No units specified"))
(when (eq (car-safe uold) 'error)
(error "Bad format in units expression: %s" (nth 1 uold)))
(setq expr (math-mul expr uold))))
@ -514,6 +516,38 @@ If COMP or STD is non-nil, put that in the units table instead."
(math-put-default-units (if noold units res) (if comp units)))
(calc-enter-result 1 "cvun" res))))))
(defun calc-convert-exact-units ()
(interactive)
(calc-slow-wrapper
(let* ((expr (calc-top-n 1)))
(unless (math-units-in-expr-p expr t)
(error "No units in expression."))
(let* ((old-units (math-extract-units expr))
(defunits (math-get-default-units expr))
units
(new-units
(read-string (concat "New units"
(if defunits
(concat
" (default "
defunits
"): ")
": ")))))
(if (and
(string= new-units "")
defunits)
(setq new-units defunits))
(setq units (math-read-expr new-units))
(when (eq (car-safe units) 'error)
(error "Bad format in units expression: %s" (nth 2 units)))
(math-check-unit-consistency old-units units)
(let ((res
(list '* (math-mul (math-remove-units expr)
(math-simplify-units
(math-to-standard-units (list '/ old-units units) nil)))
units)))
(calc-enter-result 1 "cvxu" res))))))
(defun calc-autorange-units (arg)
(interactive "P")
(calc-wrapper
@ -945,7 +979,7 @@ If COMP or STD is non-nil, put that in the units table instead."
(or
(and (eq (car-safe newunits) 'var)
(assq (nth 1 newunits) math-standard-units-systems))
(math-numberp (math-get-units (list '/ expr newunits)))))
(math-numberp (math-get-units (math-to-standard-units (list '/ expr newunits) nil)))))
(defun math-check-unit-consistency (expr units)
"Give an error if EXPR and UNITS do not have consistent units."

View file

@ -411,7 +411,8 @@ In the ATTS property list, possible attributes are `:family',
See Info node `(elisp) Faces' in the Emacs Lisp manual for more
information."
(declare (doc-string 3))
(declare (doc-string 3)
(indent 1))
;; It is better not to use backquote in this file,
;; because that makes a bootstrapping problem
;; if you need to recompile all the Lisp files using interpreted code.

View file

@ -120,9 +120,7 @@ Vectors work just like lists. Nested backquotes are permitted."
This simply recurses through the body."
(let ((exp (backquote-listify (list (cons 0 (list 'quote (car s))))
(backquote-process (cdr s) level))))
(if (eq (car-safe exp) 'quote)
(cons 0 (list 'quote s))
(cons 1 exp))))
(cons (if (eq (car-safe exp) 'quote) 0 1) exp)))
(defun backquote-process (s &optional level)
"Process the body of a backquote.

View file

@ -635,7 +635,8 @@ Can only be used from within the lexical body of a primary or around method."
(defun cl--generic-search-method (met-name)
(let ((base-re (concat "(\\(?:cl-\\)?defmethod[ \t]+"
(regexp-quote (format "%s\\_>" (car met-name))))))
(regexp-quote (format "%s" (car met-name)))
"\\_>")))
(or
(re-search-forward
(concat base-re "[^&\"\n]*"
@ -724,6 +725,14 @@ Can only be used from within the lexical body of a primary or around method."
(add-function :before-until cl-generic-tagcode-function
#'cl--generic-struct-tagcode)
(defun cl--generic-struct-tag (name)
`(and (vectorp ,name)
(> (length ,name) 0)
(let ((tag (aref ,name 0)))
(if (eq (symbol-function tag) :quick-object-witness-check)
tag))))
(defun cl--generic-struct-tagcode (type name)
(and (symbolp type)
(get type 'cl-struct-type)
@ -733,12 +742,19 @@ Can only be used from within the lexical body of a primary or around method."
(or (equal '(cl-tag-slot) (car (get type 'cl-struct-slots)))
(error "Can't dispatch on cl-struct %S: no tag in slot 0"
type))
;; We could/should check the vector has length >0,
;; but really, mixing vectors and structs is a bad idea,
;; so let's not waste time trying to handle the case
;; of an empty vector.
;; BEWARE: this returns a bogus tag for non-struct vectors.
`(50 . (and (vectorp ,name) (aref ,name 0)))))
;; It's tempting to use (and (vectorp ,name) (aref ,name 0))
;; but that would suffer from some problems:
;; - the vector may have size 0.
;; - when called on an actual vector (rather than an object), we'd
;; end up returning an arbitrary value, possibly colliding with
;; other tagcode's values.
;; - it can also result in returning all kinds of irrelevant
;; values which would end up filling up the method-cache with
;; lots of irrelevant/redundant entries.
;; FIXME: We could speed this up by introducing a dedicated
;; vector type at the C level, so we could do something like
;; (and (vector-objectp ,name) (aref ,name 0))
`(50 . ,(cl--generic-struct-tag name))))
(add-function :before-until cl-generic-tag-types-function
#'cl--generic-struct-tag-types)

View file

@ -221,7 +221,7 @@ The name is made by appending a number to PREFIX, default \"G\"."
'(&optional &rest &key &allow-other-keys &aux &whole &body &environment))
(defvar cl--bind-block) (defvar cl--bind-defs) (defvar cl--bind-enquote)
(defvar cl--bind-inits) (defvar cl--bind-lets) (defvar cl--bind-forms)
(defvar cl--bind-lets) (defvar cl--bind-forms)
(defun cl--transform-lambda (form bind-block)
"Transform a function form FORM of name BIND-BLOCK.
@ -229,9 +229,11 @@ BIND-BLOCK is the name of the symbol to which the function will be bound,
and which will be used for the name of the `cl-block' surrounding the
function's body.
FORM is of the form (ARGS . BODY)."
;; FIXME: (lambda (a &aux b) 1) expands to (lambda (a &rest --cl-rest--) ...)
;; where the --cl-rest-- is clearly undesired.
(let* ((args (car form)) (body (cdr form)) (orig-args args)
(cl--bind-block bind-block) (cl--bind-defs nil) (cl--bind-enquote nil)
(cl--bind-inits nil) (cl--bind-lets nil) (cl--bind-forms nil)
(cl--bind-lets nil) (cl--bind-forms nil)
(header nil) (simple-args nil))
(while (or (stringp (car body))
(memq (car-safe (car body)) '(interactive declare cl-declare)))
@ -244,10 +246,10 @@ FORM is of the form (ARGS . BODY)."
(if (setq cl--bind-enquote (memq '&cl-quote args))
(setq args (delq '&cl-quote args)))
(if (memq '&whole args) (error "&whole not currently implemented"))
(let* ((p (memq '&environment args)) (v (cadr p))
(env-exp 'macroexpand-all-environment))
(let* ((p (memq '&environment args))
(v (cadr p)))
(if p (setq args (nconc (delq (car p) (delq v args))
(list '&aux (list v env-exp))))))
`(&aux (,v macroexpand-all-environment))))))
(while (and args (symbolp (car args))
(not (memq (car args) '(nil &rest &body &key &aux)))
(not (and (eq (car args) '&optional)
@ -261,8 +263,7 @@ FORM is of the form (ARGS . BODY)."
(cl--do-arglist args nil (- (length simple-args)
(if (memq '&optional simple-args) 1 0)))
(setq cl--bind-lets (nreverse cl--bind-lets))
(cl-list* (and cl--bind-inits `(cl-eval-when (compile load eval)
,@(nreverse cl--bind-inits)))
(cl-list* nil
(nconc (nreverse simple-args)
(list '&rest (car (pop cl--bind-lets))))
(nconc (let ((hdr (nreverse header)))
@ -390,6 +391,11 @@ its argument list allows full Common Lisp conventions."
(t x)))
(defun cl--make-usage-args (arglist)
(let ((aux (ignore-errors (cl-position '&aux arglist))))
(when aux
;; `&aux' args aren't arguments, so let's just drop them from the
;; usage info.
(setq arglist (cl-subseq arglist 0 aux))))
(if (cdr-safe (last arglist)) ;Not a proper list.
(let* ((last (last arglist))
(tail (cdr last)))
@ -426,7 +432,7 @@ its argument list allows full Common Lisp conventions."
))))
arglist))))
(defun cl--do-arglist (args expr &optional num) ; uses bind-*
(defun cl--do-arglist (args expr &optional num) ; uses cl--bind-*
(if (nlistp args)
(if (or (memq args cl--lambda-list-keywords) (not (symbolp args)))
(error "Invalid argument name: %s" args)
@ -441,9 +447,9 @@ its argument list allows full Common Lisp conventions."
(keys nil)
(laterarg nil) (exactarg nil) minarg)
(or num (setq num 0))
(if (listp (cadr restarg))
(setq restarg (make-symbol "--cl-rest--"))
(setq restarg (cadr restarg)))
(setq restarg (if (listp (cadr restarg))
(make-symbol "--cl-rest--")
(cadr restarg)))
(push (list restarg expr) cl--bind-lets)
(if (eq (car args) '&whole)
(push (list (cl--pop2 args) restarg) cl--bind-lets))
@ -570,12 +576,11 @@ its argument list allows full Common Lisp conventions."
"Bind the variables in ARGS to the result of EXPR and execute BODY."
(declare (indent 2)
(debug (&define cl-macro-list def-form cl-declarations def-body)))
(let* ((cl--bind-lets nil) (cl--bind-forms nil) (cl--bind-inits nil)
(let* ((cl--bind-lets nil) (cl--bind-forms nil)
(cl--bind-defs nil) (cl--bind-block 'cl-none) (cl--bind-enquote nil))
(cl--do-arglist (or args '(&aux)) expr)
(append '(progn) cl--bind-inits
(list `(let* ,(nreverse cl--bind-lets)
,@(nreverse cl--bind-forms) ,@body)))))
(macroexp-let* (nreverse cl--bind-lets)
(macroexp-progn (append (nreverse cl--bind-forms) body)))))
;;; The `cl-eval-when' form.
@ -655,30 +660,26 @@ allowed only in the final clause, and matches if no other keys match.
Key values are compared by `eql'.
\n(fn EXPR (KEYLIST BODY...)...)"
(declare (indent 1) (debug (form &rest (sexp body))))
(let* ((temp (if (cl--simple-expr-p expr 3) expr (make-symbol "--cl-var--")))
(head-list nil)
(body (cons
'cond
(mapcar
(function
(lambda (c)
(cons (cond ((memq (car c) '(t otherwise)) t)
((eq (car c) 'cl--ecase-error-flag)
`(error "cl-ecase failed: %s, %s"
,temp ',(reverse head-list)))
((listp (car c))
(setq head-list (append (car c) head-list))
`(cl-member ,temp ',(car c)))
(t
(if (memq (car c) head-list)
(error "Duplicate key in case: %s"
(car c)))
(push (car c) head-list)
`(eql ,temp ',(car c))))
(or (cdr c) '(nil)))))
clauses))))
(if (eq temp expr) body
`(let ((,temp ,expr)) ,body))))
(macroexp-let2 macroexp-copyable-p temp expr
(let* ((head-list nil))
`(cond
,@(mapcar
(lambda (c)
(cons (cond ((memq (car c) '(t otherwise)) t)
((eq (car c) 'cl--ecase-error-flag)
`(error "cl-ecase failed: %s, %s"
,temp ',(reverse head-list)))
((listp (car c))
(setq head-list (append (car c) head-list))
`(cl-member ,temp ',(car c)))
(t
(if (memq (car c) head-list)
(error "Duplicate key in case: %s"
(car c)))
(push (car c) head-list)
`(eql ,temp ',(car c))))
(or (cdr c) '(nil))))
clauses)))))
;;;###autoload
(defmacro cl-ecase (expr &rest clauses)
@ -698,24 +699,22 @@ final clause, and matches if no other keys match.
\n(fn EXPR (TYPE BODY...)...)"
(declare (indent 1)
(debug (form &rest ([&or cl-type-spec "otherwise"] body))))
(let* ((temp (if (cl--simple-expr-p expr 3) expr (make-symbol "--cl-var--")))
(type-list nil)
(body (cons
'cond
(mapcar
(function
(lambda (c)
(cons (cond ((eq (car c) 'otherwise) t)
((eq (car c) 'cl--ecase-error-flag)
`(error "cl-etypecase failed: %s, %s"
,temp ',(reverse type-list)))
(t
(push (car c) type-list)
(cl--make-type-test temp (car c))))
(or (cdr c) '(nil)))))
clauses))))
(if (eq temp expr) body
`(let ((,temp ,expr)) ,body))))
(macroexp-let2 macroexp-copyable-p temp expr
(let* ((type-list nil))
(cons
'cond
(mapcar
(function
(lambda (c)
(cons (cond ((eq (car c) 'otherwise) t)
((eq (car c) 'cl--ecase-error-flag)
`(error "cl-etypecase failed: %s, %s"
,temp ',(reverse type-list)))
(t
(push (car c) type-list)
`(cl-typep ,temp ',(car c))))
(or (cdr c) '(nil)))))
clauses)))))
;;;###autoload
(defmacro cl-etypecase (expr &rest clauses)
@ -1439,16 +1438,14 @@ For more details, see Info node `(cl)Loop Facility'.
(push `(progn (if ,what (cl-incf ,var)) t) cl--loop-body)))
((memq word '(minimize minimizing maximize maximizing))
(let* ((what (pop cl--loop-args))
(temp (if (cl--simple-expr-p what) what
(make-symbol "--cl-var--")))
(var (cl--loop-handle-accum nil))
(func (intern (substring (symbol-name word) 0 3)))
(set `(setq ,var (if ,var (,func ,var ,temp) ,temp))))
(push `(progn ,(if (eq temp what) set
`(let ((,temp ,what)) ,set))
t)
cl--loop-body)))
(push `(progn ,(macroexp-let2 macroexp-copyable-p temp
(pop cl--loop-args)
(let* ((var (cl--loop-handle-accum nil))
(func (intern (substring (symbol-name word)
0 3))))
`(setq ,var (if ,var (,func ,var ,temp) ,temp))))
t)
cl--loop-body))
((eq word 'with)
(let ((bindings nil))
@ -2104,14 +2101,11 @@ values. For compatibility, (cl-values A B C) is a synonym for (list A B C).
(< cl--optimize-speed 3)
(= cl--optimize-safety 3)))
form
(let* ((temp (if (cl--simple-expr-p form 3)
form (make-symbol "--cl-var--")))
(body `(progn (unless ,(cl--make-type-test temp type)
(signal 'wrong-type-argument
(list ',type ,temp ',form)))
,temp)))
(if (eq temp form) body
`(let ((,temp ,form)) ,body)))))
(macroexp-let2 macroexp-copyable-p temp form
`(progn (unless (cl-typep ,temp ',type)
(signal 'wrong-type-argument
(list ',type ,temp ',form)))
,temp))))
(defvar cl--proclaim-history t) ; for future compilers
(defvar cl--declare-stack t) ; for future compilers
@ -2425,15 +2419,11 @@ non-nil value, that slot cannot be set via `setf'.
(tag (intern (format "cl-struct-%s" name)))
(tag-symbol (intern (format "cl-struct-%s-tags" name)))
(include-descs nil)
(side-eff nil)
(type nil)
(named nil)
(forms nil)
(docstring (if (stringp (car descs)) (pop descs)))
pred-form pred-check)
(if (stringp (car descs))
(push `(put ',name 'structure-documentation
,(pop descs))
forms))
(setq descs (cons '(cl-tag-slot)
(mapcar (function (lambda (x) (if (consp x) x (list x))))
descs)))
@ -2458,6 +2448,7 @@ non-nil value, that slot cannot be set via `setf'.
((eq opt :predicate)
(if args (setq predicate (car args))))
((eq opt :include)
(when include (error "Can't :include more than once"))
(setq include (car args)
include-descs (mapcar (function
(lambda (x)
@ -2511,20 +2502,19 @@ non-nil value, that slot cannot be set via `setf'.
(if named (setq tag name)))
(setq type 'vector named 'true)))
(or named (setq descs (delq (assq 'cl-tag-slot descs) descs)))
(push `(defvar ,tag-symbol) forms)
(when (and (null predicate) named)
(setq predicate (intern (format "cl--struct-%s-p" name))))
(setq pred-form (and named
(let ((pos (- (length descs)
(length (memq (assq 'cl-tag-slot descs)
descs)))))
(if (eq type 'vector)
`(and (vectorp cl-x)
(>= (length cl-x) ,(length descs))
(memq (aref cl-x ,pos) ,tag-symbol))
(if (= pos 0)
`(memq (car-safe cl-x) ,tag-symbol)
`(and (consp cl-x)
(cond
((eq type 'vector)
`(and (vectorp cl-x)
(>= (length cl-x) ,(length descs))
(memq (aref cl-x ,pos) ,tag-symbol)))
((= pos 0) `(memq (car-safe cl-x) ,tag-symbol))
(t `(and (consp cl-x)
(memq (nth ,pos cl-x) ,tag-symbol))))))
pred-check (and pred-form (> safety 0)
(if (and (eq (cl-caadr pred-form) 'vectorp)
@ -2546,6 +2536,7 @@ non-nil value, that slot cannot be set via `setf'.
(push slot slots)
(push (nth 1 desc) defaults)
(push `(cl-defsubst ,accessor (cl-x)
(declare (side-effect-free t))
,@(and pred-check
(list `(or ,pred-check
(error "%s accessing a non-%s"
@ -2554,7 +2545,6 @@ non-nil value, that slot cannot be set via `setf'.
(if (= pos 0) '(car cl-x)
`(nth ,pos cl-x))))
forms)
(push (cons accessor t) side-eff)
(if (cadr (memq :read-only (cddr desc)))
(push `(gv-define-expander ,accessor
(lambda (_cl-do _cl-x)
@ -2587,15 +2577,14 @@ non-nil value, that slot cannot be set via `setf'.
defaults (nreverse defaults))
(when pred-form
(push `(cl-defsubst ,predicate (cl-x)
(declare (side-effect-free error-free))
,(if (eq (car pred-form) 'and)
(append pred-form '(t))
`(and ,pred-form t)))
forms)
(push `(put ',name 'cl-deftype-satisfies ',predicate) forms)
(push (cons predicate 'error-free) side-eff))
(push `(put ',name 'cl-deftype-satisfies ',predicate) forms))
(and copier
(progn (push `(defun ,copier (x) (copy-sequence x)) forms)
(push (cons copier t) side-eff)))
(push `(defalias ',copier #'copy-sequence) forms))
(if constructor
(push (list constructor
(cons '&key (delq nil (copy-sequence slots))))
@ -2607,11 +2596,11 @@ non-nil value, that slot cannot be set via `setf'.
(make (cl-mapcar (function (lambda (s d) (if (memq s anames) s d)))
slots defaults)))
(push `(cl-defsubst ,name
(&cl-defs '(nil ,@descs) ,@args)
(&cl-defs '(nil ,@descs) ,@args)
,@(if (cl--safe-expr-p `(progn ,@(mapcar #'cl-second descs)))
'((declare (side-effect-free t))))
(,type ,@make))
forms)
(if (cl--safe-expr-p `(progn ,@(mapcar #'cl-second descs)))
(push (cons name t) side-eff))))
forms)))
(if print-auto (nconc print-func (list '(princ ")" cl-s) t)))
;; Don't bother adding to cl-custom-print-functions since it's not used
;; by anything anyway!
@ -2624,17 +2613,14 @@ non-nil value, that slot cannot be set via `setf'.
;; (and ,pred-form ,print-func))
;; cl-custom-print-functions))
;; forms))
(push `(setq ,tag-symbol (list ',tag)) forms)
(push `(cl-eval-when (compile load eval)
(put ',name 'cl-struct-slots ',descs)
(put ',name 'cl-struct-type ',(list type (eq named t)))
(put ',name 'cl-struct-include ',include)
(put ',name 'cl-struct-print ,print-auto)
,@(mapcar (lambda (x)
`(function-put ',(car x) 'side-effect-free ',(cdr x)))
side-eff))
forms)
`(progn ,@(nreverse (cons `',name forms)))))
`(progn
(defvar ,tag-symbol)
,@(nreverse forms)
(eval-and-compile
(cl-struct-define ',name ,docstring ',include
',type ,(eq named t) ',descs ',tag-symbol ',tag
',print-auto))
',name)))
(defun cl-struct-sequence-type (struct-type)
"Return the sequence used to build STRUCT-TYPE.
@ -2741,14 +2727,11 @@ STRING is an optional description of the desired type."
(declare (debug (place cl-type-spec &optional stringp)))
(and (or (not (cl--compiling-file))
(< cl--optimize-speed 3) (= cl--optimize-safety 3))
(let* ((temp (if (cl--simple-expr-p form 3)
form (make-symbol "--cl-var--")))
(body `(or ,(cl--make-type-test temp type)
(signal 'wrong-type-argument
(list ,(or string `',type)
,temp ',form)))))
(if (eq temp form) `(progn ,body nil)
`(let ((,temp ,form)) ,body nil)))))
(macroexp-let2 macroexp-copyable-p temp form
`(progn (or (cl-typep ,temp ',type)
(signal 'wrong-type-argument
(list ,(or string `',type) ,temp ',form)))
nil))))
;;;###autoload
(defmacro cl-assert (form &optional show-args string &rest args)

View file

@ -0,0 +1,48 @@
;;; cl-preloaded.el --- Preloaded part of the CL library -*- lexical-binding: t; -*-
;; Copyright (C) 2015 Free Software Foundation, Inc
;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
;; This file is part of GNU Emacs.
;; GNU Emacs 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 3 of the License, or
;; (at your option) any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
;;; Commentary:
;; The expectation is that structs defined with cl-defstruct do not
;; need cl-lib at run-time, but we'd like to hide the details of the
;; cl-struct metadata behind the cl-struct-define function, so we put
;; it in this pre-loaded file.
;;; Code:
(defun cl-struct-define (name docstring parent type named slots children-sym
tag print-auto)
(if (boundp children-sym)
(add-to-list children-sym tag)
(set children-sym (list tag)))
;; If the cl-generic support, we need to be able to check
;; if a vector is a cl-struct object, without knowing its particular type.
;; So we use the (otherwise) unused function slots of the tag symbol
;; to put a special witness value, to make the check easy and reliable.
(unless named (fset tag :quick-object-witness-check))
(put name 'cl-struct-slots slots)
(put name 'cl-struct-type (list type named))
(if parent (put name 'cl-struct-include parent))
(if print-auto (put name 'cl-struct-print print-auto))
(if docstring (put name 'structure-documentation docstring)))
(provide 'cl-preloaded)
;;; cl-preloaded.el ends here

View file

@ -376,7 +376,6 @@ The two cases that are handled are:
(setq cl--function-convert-cache (cons newf res))
res))))
(t
(setq cl--labels-convert-cache cl--function-convert-cache)
(cl--labels-convert f))))
(defmacro lexical-let (bindings &rest body)

View file

@ -149,11 +149,12 @@ For example, you could write
...BODY CODE...)"
(declare (doc-string 2)
(debug (&define name string-or-null-p
[&optional [&not keywordp] sexp
&optional [&not keywordp] sexp
&optional [&not keywordp] sexp]
[&rest [keywordp sexp]]
def-body)))
[&optional [&not keywordp] sexp
&optional [&not keywordp] sexp
&optional [&not keywordp] sexp]
[&rest [keywordp sexp]]
def-body))
(indent 1))
;; Allow skipping the first three args.
(cond

View file

@ -219,7 +219,7 @@ for CLASS. Optional ALLOW-SUBCLASS says that it is ok for
being pedantic."
(unless class
(message "Unsafe call to `eieio-persistent-read'."))
(when class (eieio--check-type class-p class))
(when class (cl-check-type class class))
(let ((ret nil)
(buffstr nil))
(unwind-protect
@ -481,7 +481,7 @@ instance."
(cl-defmethod eieio-object-set-name-string ((obj eieio-named) name)
"Set the string which is OBJ's NAME."
(eieio--check-type stringp name)
(cl-check-type name string)
(eieio-oset obj 'object-name name))
(cl-defmethod clone ((obj eieio-named) &rest params)

View file

@ -40,6 +40,8 @@
(declare-function slot-unbound "eieio")
(declare-function slot-missing "eieio")
(declare-function child-of-class-p "eieio")
(declare-function same-class-p "eieio")
(declare-function object-of-class-p "eieio")
;;;
@ -154,15 +156,6 @@ Currently under control of this var:
;;; Important macros used internally in eieio.
;;
(defmacro eieio--check-type (type obj)
(unless (symbolp obj)
(error "eieio--check-type wants OBJ to be a variable"))
`(if (not ,(cond
((eq 'or (car-safe type))
`(or ,@(mapcar (lambda (type) `(,type ,obj)) (cdr type))))
(t `(,type ,obj))))
(signal 'wrong-type-argument (list ',type ,obj))))
(defmacro eieio--class-v (class) ;Use a macro, so it acts as a GV place.
"Internal: Return the class vector from the CLASS symbol."
@ -183,27 +176,17 @@ Currently under control of this var:
(eq (aref class 0) 'defclass)
(error nil)))
(defsubst eieio-class-object (class)
"Check that CLASS is a class and return the corresponding object."
(let ((c (eieio--class-object class)))
(eieio--check-type eieio--class-p c)
c))
(defsubst class-p (class)
(defun class-p (class)
"Return non-nil if CLASS is a valid class vector.
CLASS is a symbol." ;FIXME: Is it a vector or a symbol?
;; this new method is faster since it doesn't waste time checking lots of
;; things.
(condition-case nil
(eq (aref (eieio--class-v class) 0) 'defclass)
(error nil)))
(and (symbolp class) (eieio--class-p (eieio--class-v class))))
(defun eieio-class-name (class)
"Return a Lisp like symbol name for CLASS."
;; FIXME: What's a "Lisp like symbol name"?
;; FIXME: CLOS returns a symbol, but the code returns a string.
(if (eieio--class-p class) (setq class (eieio--class-symbol class)))
(eieio--check-type class-p class)
(cl-check-type class class)
;; I think this is supposed to return a symbol, but to me CLASS is a symbol,
;; and I wanted a string. Arg!
(format "#<class %s>" (symbol-name class)))
@ -221,14 +204,17 @@ CLASS is a symbol." ;FIXME: Is it a vector or a symbol?
Return nil if that option doesn't exist."
(eieio--class-option-assoc (eieio--class-options class) option))
(defsubst eieio-object-p (obj)
(defun eieio-object-p (obj)
"Return non-nil if OBJ is an EIEIO object."
(and (vectorp obj)
(condition-case nil
(eq (aref (eieio--object-class-object obj) 0) 'defclass)
(error nil))))
(> (length obj) 0)
(let ((tag (eieio--object-class-tag obj)))
(and (symbolp tag)
;; (eq (symbol-function tag) :quick-object-witness-check)
(boundp tag)
(eieio--class-p (symbol-value tag))))))
(defalias 'object-p 'eieio-object-p)
(define-obsolete-function-alias 'object-p 'eieio-object-p "25.1")
(defsubst class-abstract-p (class)
"Return non-nil if CLASS is abstract.
@ -266,10 +252,9 @@ It creates an autoload function for CNAME's constructor."
;; simply not exist yet. So instead we just don't store the list of parents
;; here in eieio-defclass-autoload at all, since it seems that they're just
;; not needed before the class is actually loaded.
(let* ((oldc (when (class-p cname) (eieio--class-v cname)))
(newc (eieio--class-make cname))
)
(if oldc
(let* ((oldc (eieio--class-v cname))
(newc (eieio--class-make cname)))
(if (eieio--class-p oldc)
nil ;; Do nothing if we already have this class.
;; turn this into a usable self-pointing symbol
@ -300,7 +285,21 @@ It creates an autoload function for CNAME's constructor."
(cl-every (lambda (elem) (cl-typep elem ',elem-type))
list)))))
(declare-function eieio--defmethod "eieio-generic" (method kind argclass code))
(defun eieio-make-class-predicate (class)
(lambda (obj)
;; (:docstring (format "Test OBJ to see if it's an object of type %S."
;; class))
(and (eieio-object-p obj)
(same-class-p obj class))))
(defun eieio-make-child-predicate (class)
(lambda (obj)
;; (:docstring (format
;; "Test OBJ to see if it's an object is a child of type %S."
;; class))
(and (eieio-object-p obj)
(object-of-class-p obj class))))
(defun eieio-defclass-internal (cname superclasses slots options)
"Define CNAME as a new subclass of SUPERCLASSES.
@ -314,7 +313,7 @@ See `defclass' for more information."
(setq eieio-hook nil)
(let* ((pname superclasses)
(oldc (when (class-p cname) (eieio--class-v cname)))
(oldc (let ((c (eieio--class-v cname))) (if (eieio--class-p c) c)))
(newc (if (and oldc (not (eieio--class-default-object-cache oldc)))
;; The oldc class is a stub setup by eieio-defclass-autoload.
;; Reuse it instead of creating a new one, so that existing
@ -342,19 +341,20 @@ See `defclass' for more information."
(if pname
(progn
(dolist (p pname)
(if (and p (symbolp p))
(if (not (class-p p))
(if (not (and p (symbolp p)))
(error "Invalid parent class %S" p)
(let ((c (eieio--class-v p)))
(if (not (eieio--class-p c))
;; bad class
(error "Given parent class %S is not a class" p)
;; good parent class...
;; save new child in parent
(cl-pushnew cname (eieio--class-children (eieio--class-v p)))
(cl-pushnew cname (eieio--class-children c))
;; Get custom groups, and store them into our local copy.
(mapc (lambda (g) (cl-pushnew g groups :test #'equal))
(eieio--class-option (eieio--class-v p) :custom-groups))
;; save parent in child
(push (eieio--class-v p) (eieio--class-parent newc)))
(error "Invalid parent class %S" p)))
(eieio--class-option c :custom-groups))
;; Save parent in child.
(push c (eieio--class-parent newc))))))
;; Reverse the list of our parents so that they are prioritized in
;; the same order as specified in the code.
(cl-callf nreverse (eieio--class-parent newc)))
@ -506,13 +506,7 @@ See `defclass' for more information."
(eieio--class-option-assoc options :documentation))
;; Save the file location where this class is defined.
(let ((fname (if load-in-progress
load-file-name
buffer-file-name)))
(when fname
(when (string-match "\\.elc\\'" fname)
(setq fname (substring fname 0 (1- (length fname)))))
(put cname 'class-location fname)))
(add-to-list 'current-load-list `(eieio-defclass . ,cname))
;; We have a list of custom groups. Store them into the options.
(let ((g (eieio--class-option-assoc options :custom-groups)))
@ -539,6 +533,7 @@ See `defclass' for more information."
;; objects readable.
(tag (intern (format "eieio-class-tag--%s" cname))))
(set tag newc)
(fset tag :quick-object-witness-check)
(setf (eieio--object-class-tag cache) tag)
(let ((eieio-skip-typecheck t))
;; All type-checking has been done to our satisfaction
@ -908,12 +903,13 @@ Argument FN is the function calling this verifier."
;;
(defun eieio-oref (obj slot)
"Return the value in OBJ at SLOT in the object vector."
(eieio--check-type (or eieio-object-p class-p) obj)
(eieio--check-type symbolp slot)
(if (class-p obj) (eieio-class-un-autoload obj))
(cl-check-type slot symbol)
(cl-check-type obj (or eieio-object class))
(let* ((class (cond ((symbolp obj)
(error "eieio-oref called on a class!")
(eieio--class-v obj))
(let ((c (eieio--class-v obj)))
(if (eieio--class-p c) (eieio-class-un-autoload obj))
c))
(t (eieio--object-class-object obj))))
(c (eieio--slot-name-index class obj slot)))
(if (not c)
@ -928,15 +924,15 @@ Argument FN is the function calling this verifier."
(slot-missing obj slot 'oref)
;;(signal 'invalid-slot-name (list (eieio-object-name obj) slot))
)
(eieio--check-type eieio-object-p obj)
(cl-check-type obj eieio-object)
(eieio-barf-if-slot-unbound (aref obj c) obj slot 'oref))))
(defun eieio-oref-default (obj slot)
"Do the work for the macro `oref-default' with similar parameters.
Fills in OBJ's SLOT with its default value."
(eieio--check-type (or eieio-object-p class-p) obj)
(eieio--check-type symbolp slot)
(cl-check-type obj (or eieio-object class))
(cl-check-type slot symbol)
(let* ((cl (cond ((symbolp obj) (eieio--class-v obj))
(t (eieio--object-class-object obj))))
(c (eieio--slot-name-index cl obj slot)))
@ -974,8 +970,8 @@ Fills in OBJ's SLOT with its default value."
(defun eieio-oset (obj slot value)
"Do the work for the macro `oset'.
Fills in OBJ's SLOT with VALUE."
(eieio--check-type eieio-object-p obj)
(eieio--check-type symbolp slot)
(cl-check-type obj eieio-object)
(cl-check-type slot symbol)
(let* ((class (eieio--object-class-object obj))
(c (eieio--slot-name-index class obj slot)))
(if (not c)
@ -999,8 +995,8 @@ Fills in OBJ's SLOT with VALUE."
"Do the work for the macro `oset-default'.
Fills in the default value in CLASS' in SLOT with VALUE."
(setq class (eieio--class-object class))
(eieio--check-type eieio--class-p class)
(eieio--check-type symbolp slot)
(cl-check-type class eieio--class)
(cl-check-type slot symbol)
(let* ((c (eieio--slot-name-index class nil slot)))
(if (not c)
;; It might be missing because it is a :class allocated slot.
@ -1222,10 +1218,11 @@ method invocation orders of the involved classes."
;; A class must be defined before it can be used as a parameter
;; specializer in a defmethod form.
;; So we can ignore types that are not known to denote classes.
(and (class-p type)
;; Prefer (aref ,name 0) over (eieio--class-tag ,name) so that
;; the tagcode is identical to the tagcode used for cl-struct.
`(50 . (and (vectorp ,name) (aref ,name 0)))))
(and (eieio--class-p (eieio--class-object type))
;; Use the exact same code as for cl-struct, so that methods
;; that dispatch on both kinds of objects get to share this
;; part of the dispatch code.
`(50 . ,(cl--generic-struct-tag name))))
(add-function :before-until cl-generic-tag-types-function
#'eieio--generic-tag-types)

View file

@ -117,7 +117,7 @@ PREBUTTONTEXT is some text between PREFIX and the object button."
(setq publa (cdr publa)))))))
;;; Augment the Data debug thing display list.
(data-debug-add-specialized-thing (lambda (thing) (object-p thing))
(data-debug-add-specialized-thing (lambda (thing) (eieio-object-p thing))
#'data-debug-insert-object-button)
;;; DEBUG METHODS

View file

@ -45,7 +45,7 @@ variable `eieio-default-superclass'."
nil t)))
nil))
(if (not root-class) (setq root-class 'eieio-default-superclass))
(eieio--check-type class-p root-class)
(cl-check-type root-class class)
(display-buffer (get-buffer-create "*EIEIO OBJECT BROWSE*") t)
(with-current-buffer (get-buffer "*EIEIO OBJECT BROWSE*")
(erase-buffer)
@ -58,7 +58,7 @@ variable `eieio-default-superclass'."
Argument THIS-ROOT is the local root of the tree.
Argument PREFIX is the character prefix to use.
Argument CH-PREFIX is another character prefix to display."
(eieio--check-type class-p this-root)
(cl-check-type this-root class)
(let ((myname (symbol-name this-root))
(chl (eieio--class-children (eieio--class-v this-root)))
(fprefix (concat ch-prefix " +--"))
@ -85,12 +85,12 @@ If CLASS is actually an object, then also display current values of that object.
"n abstract"
"")
" class")
(let ((location (get class 'class-location)))
(let ((location (find-lisp-object-file-name class 'eieio-defclass)))
(when location
(insert " in `")
(help-insert-xref-button
(file-name-nondirectory location)
'eieio-class-def class location)
(help-fns-short-filename location)
'eieio-class-def class location 'eieio-defclass)
(insert "'")))
(insert ".\n")
;; Parents
@ -204,15 +204,6 @@ Outputs to the current buffer."
prot (cdr prot)
i (1+ i)))))
(defun eieio-build-class-list (class)
"Return a list of all classes that inherit from CLASS."
(if (class-p class)
(cl-mapcan
(lambda (c)
(append (list c) (eieio-build-class-list c)))
(eieio--class-children (eieio--class-v class)))
(list class)))
(defun eieio-build-class-alist (&optional class instantiable-only buildlist)
"Return an alist of all currently active classes for completion purposes.
Optional argument CLASS is the class to start with.
@ -256,24 +247,22 @@ are not abstract."
;;; METHOD COMPLETION / DOC
(define-button-type 'eieio-method-def
:supertype 'help-xref
'help-function (lambda (class method file)
(eieio-help-find-method-definition class method file))
'help-echo (purecopy "mouse-2, RET: find method's definition"))
(define-button-type 'eieio-class-def
:supertype 'help-xref
'help-function (lambda (class file)
(eieio-help-find-class-definition class file))
:supertype 'help-function-def
'help-echo (purecopy "mouse-2, RET: find class definition"))
(defconst eieio--defclass-regexp "(defclass[ \t\r\n]+%s[ \t\r\n]+")
(with-eval-after-load 'find-func
(defvar find-function-regexp-alist)
(add-to-list 'find-function-regexp-alist
`(eieio-defclass . eieio--defclass-regexp)))
;;;###autoload
(defun eieio-help-constructor (ctr)
"Describe CTR if it is a class constructor."
(when (class-p ctr)
(erase-buffer)
(let ((location (get ctr 'class-location))
(let ((location (find-lisp-object-file-name ctr 'eieio-defclass))
(def (symbol-function ctr)))
(goto-char (point-min))
(prin1 ctr)
@ -288,8 +277,8 @@ are not abstract."
(when location
(insert " in `")
(help-insert-xref-button
(file-name-nondirectory location)
'eieio-class-def ctr location)
(help-fns-short-filename location)
'eieio-class-def ctr location 'eieio-defclass)
(insert "'"))
(insert ".\nCreates an object of class " (symbol-name ctr) ".")
(goto-char (point-max))
@ -304,7 +293,7 @@ are not abstract."
"Return non-nil if a method with SPECIALIZERS applies to CLASS."
(let ((applies nil))
(dolist (specializer specializers)
(if (eq 'subclass (car-safe specializer))
(if (memq (car-safe specializer) '(subclass eieio--static))
(setq specializer (nth 1 specializer)))
;; Don't include the methods that are "too generic", such as those
;; applying to `eieio-default-superclass'.
@ -443,60 +432,6 @@ The value returned is a list of elements of the form
(terpri)
))
;;; HELP AUGMENTATION
;;
(defun eieio-help-find-method-definition (class method file)
(let ((filename (find-library-name file))
location buf)
(when (symbolp class)
(setq class (symbol-name class)))
(when (symbolp method)
(setq method (symbol-name method)))
(when (null filename)
(error "Cannot find library %s" file))
(setq buf (find-file-noselect filename))
(with-current-buffer buf
(goto-char (point-min))
(when
(re-search-forward
;; Regexp for searching methods.
(concat "(defmethod[ \t\r\n]+" method
"\\([ \t\r\n]+:[a-zA-Z]+\\)?"
"[ \t\r\n]+(\\s-*(\\(\\sw\\|\\s_\\)+\\s-+"
class
"\\s-*)")
nil t)
(setq location (match-beginning 0))))
(if (null location)
(message "Unable to find location in file")
(pop-to-buffer buf)
(goto-char location)
(recenter)
(beginning-of-line))))
(defun eieio-help-find-class-definition (class file)
(when (symbolp class)
(setq class (symbol-name class)))
(let ((filename (find-library-name file))
location buf)
(when (null filename)
(error "Cannot find library %s" file))
(setq buf (find-file-noselect filename))
(with-current-buffer buf
(goto-char (point-min))
(when
(re-search-forward
;; Regexp for searching a class.
(concat "(defclass[ \t\r\n]+" class "[ \t\r\n]+")
nil t)
(setq location (match-beginning 0))))
(if (null location)
(message "Unable to find location in file")
(pop-to-buffer buf)
(goto-char location)
(recenter)
(beginning-of-line))))
;;; SPEEDBAR SUPPORT
;;
@ -546,7 +481,7 @@ current expansion depth."
(defun eieio-class-button (class depth)
"Draw a speedbar button at the current point for CLASS at DEPTH."
(eieio--check-type class-p class)
(cl-check-type class class)
(let ((subclasses (eieio--class-children (eieio--class-v class))))
(if subclasses
(speedbar-make-tag-line 'angle ?+

View file

@ -110,7 +110,7 @@ Options in CLOS not supported in EIEIO:
Due to the way class options are set up, you can add any tags you wish,
and reference them using the function `class-option'."
(declare (doc-string 4))
(eieio--check-type listp superclasses)
(cl-check-type superclasses list)
(cond ((and (stringp (car options-and-doc))
(/= 1 (% (length options-and-doc) 2)))
@ -223,18 +223,9 @@ This method is obsolete."
;; referencing classes. ei, a class whose slot can contain only
;; pointers to itself.
;; Create the test function.
(defun ,testsym1 (obj)
,(format "Test OBJ to see if it an object of type %S." name)
(and (eieio-object-p obj)
(same-class-p obj ',name)))
(defun ,testsym2 (obj)
,(format
"Test OBJ to see if it an object is a child of type %S."
name)
(and (eieio-object-p obj)
(object-of-class-p obj ',name)))
;; Create the test functions.
(defalias ',testsym1 (eieio-make-class-predicate ',name))
(defalias ',testsym2 (eieio-make-child-predicate ',name))
,@(when eieio-backward-compatibility
(let ((f (intern (format "%s-child-p" name))))
@ -374,7 +365,7 @@ variable name of the same name as the slot."
(defun eieio-object-name (obj &optional extra)
"Return a Lisp like symbol string for object OBJ.
If EXTRA, include that in the string returned to represent the symbol."
(eieio--check-type eieio-object-p obj)
(cl-check-type obj eieio-object)
(format "#<%s %s%s>" (eieio--object-class-name obj)
(eieio-object-name-string obj) (or extra "")))
(define-obsolete-function-alias 'object-name #'eieio-object-name "24.4")
@ -394,7 +385,7 @@ If EXTRA, include that in the string returned to represent the symbol."
(cl-defmethod eieio-object-set-name-string (obj name)
"Set the string which is OBJ's NAME."
(declare (obsolete eieio-named "25.1"))
(eieio--check-type stringp name)
(cl-check-type name string)
(setf (gethash obj eieio--object-names) name))
(define-obsolete-function-alias
'object-set-name-string 'eieio-object-set-name-string "24.4")
@ -402,7 +393,7 @@ If EXTRA, include that in the string returned to represent the symbol."
(defun eieio-object-class (obj)
"Return the class struct defining OBJ."
;; FIXME: We say we return a "struct" but we return a symbol instead!
(eieio--check-type eieio-object-p obj)
(cl-check-type obj eieio-object)
(eieio--object-class-name obj))
(define-obsolete-function-alias 'object-class #'eieio-object-class "24.4")
;; CLOS name, maybe?
@ -410,7 +401,7 @@ If EXTRA, include that in the string returned to represent the symbol."
(defun eieio-object-class-name (obj)
"Return a Lisp like symbol name for OBJ's class."
(eieio--check-type eieio-object-p obj)
(cl-check-type obj eieio-object)
(eieio-class-name (eieio--object-class-name obj)))
(define-obsolete-function-alias
'object-class-name 'eieio-object-class-name "24.4")
@ -419,15 +410,14 @@ If EXTRA, include that in the string returned to represent the symbol."
"Return parent classes to CLASS. (overload of variable).
The CLOS function `class-direct-superclasses' is aliased to this function."
(let ((c (eieio-class-object class)))
(eieio--class-parent c)))
(eieio--class-parent (eieio--class-object class)))
(define-obsolete-function-alias 'class-parents #'eieio-class-parents "24.4")
(defun eieio-class-children (class)
"Return child classes to CLASS.
The CLOS function `class-direct-subclasses' is aliased to this function."
(eieio--check-type class-p class)
(cl-check-type class class)
(eieio--class-children (eieio--class-v class)))
(define-obsolete-function-alias
'class-children #'eieio-class-children "24.4")
@ -446,13 +436,13 @@ The CLOS function `class-direct-subclasses' is aliased to this function."
(defun same-class-p (obj class)
"Return t if OBJ is of class-type CLASS."
(setq class (eieio--class-object class))
(eieio--check-type eieio--class-p class)
(eieio--check-type eieio-object-p obj)
(cl-check-type class eieio--class)
(cl-check-type obj eieio-object)
(eq (eieio--object-class-object obj) class))
(defun object-of-class-p (obj class)
"Return non-nil if OBJ is an instance of CLASS or CLASS' subclasses."
(eieio--check-type eieio-object-p obj)
(cl-check-type obj eieio-object)
;; class will be checked one layer down
(child-of-class-p (eieio--object-class-object obj) class))
;; Backwards compatibility
@ -461,13 +451,13 @@ The CLOS function `class-direct-subclasses' is aliased to this function."
(defun child-of-class-p (child class)
"Return non-nil if CHILD class is a subclass of CLASS."
(setq child (eieio--class-object child))
(eieio--check-type eieio--class-p child)
(cl-check-type child eieio--class)
;; `eieio-default-superclass' is never mentioned in eieio--class-parent,
;; so we have to special case it here.
(or (eq class 'eieio-default-superclass)
(let ((p nil))
(setq class (eieio--class-object class))
(eieio--check-type eieio--class-p class)
(cl-check-type class eieio--class)
(while (and child (not (eq child class)))
(setq p (append p (eieio--class-parent child))
child (pop p)))
@ -475,11 +465,11 @@ The CLOS function `class-direct-subclasses' is aliased to this function."
(defun object-slots (obj)
"Return list of slots available in OBJ."
(eieio--check-type eieio-object-p obj)
(cl-check-type obj eieio-object)
(eieio--class-public-a (eieio--object-class-object obj)))
(defun eieio--class-slot-initarg (class slot) "Fetch from CLASS, SLOT's :initarg."
(eieio--check-type eieio--class-p class)
(cl-check-type class eieio--class)
(let ((ia (eieio--class-initarg-tuples class))
(f nil))
(while (and ia (not f))
@ -517,7 +507,7 @@ OBJECT can be an instance or a class."
;; Return nil if the magic symbol is in there.
(not (eq (cond
((eieio-object-p object) (eieio-oref object slot))
((class-p object) (eieio-oref-default object slot))
((symbolp object) (eieio-oref-default object slot))
(t (signal 'wrong-type-argument (list 'eieio-object-p object))))
eieio-unbound))))
@ -529,7 +519,8 @@ OBJECT can be an instance or a class."
"Return non-nil if OBJECT-OR-CLASS has SLOT."
(let ((cv (cond ((eieio-object-p object-or-class)
(eieio--object-class-object object-or-class))
(t (eieio-class-object object-or-class)))))
((eieio--class-p object-or-class) object-or-class)
(t (find-class object-or-class 'error)))))
(or (memq slot (eieio--class-public-a cv))
(memq slot (eieio--class-class-allocation-a cv)))
))
@ -538,10 +529,10 @@ OBJECT can be an instance or a class."
"Return the class that SYMBOL represents.
If there is no class, nil is returned if ERRORP is nil.
If ERRORP is non-nil, `wrong-argument-type' is signaled."
(if (not (class-p symbol))
(if errorp (signal 'wrong-type-argument (list 'class-p symbol))
nil)
(eieio--class-v symbol)))
(let ((class (eieio--class-v symbol)))
(cond
((eieio--class-p class) class)
(errorp (signal 'wrong-type-argument (list 'class-p symbol))))))
;;; Slightly more complex utility functions for objects
;;
@ -551,7 +542,7 @@ LIST is a list of objects whose slots are searched.
Objects in LIST do not need to have a slot named SLOT, nor does
SLOT need to be bound. If these errors occur, those objects will
be ignored."
(eieio--check-type listp list)
(cl-check-type list list)
(while (and list (not (condition-case nil
;; This prevents errors for missing slots.
(equal key (eieio-oref (car list) slot))
@ -563,7 +554,7 @@ be ignored."
"Return an association list with the contents of SLOT as the key element.
LIST must be a list of objects with SLOT in it.
This is useful when you need to do completing read on an object group."
(eieio--check-type listp list)
(cl-check-type list list)
(let ((assoclist nil))
(while list
(setq assoclist (cons (cons (eieio-oref (car list) slot)
@ -577,7 +568,7 @@ This is useful when you need to do completing read on an object group."
LIST must be a list of objects, but those objects do not need to have
SLOT in it. If it does not, then that element is left out of the association
list."
(eieio--check-type listp list)
(cl-check-type list list)
(let ((assoclist nil))
(while list
(if (slot-exists-p (car list) slot)
@ -869,12 +860,8 @@ this object."
(object-write thing))
((consp thing)
(eieio-list-prin1 thing))
((class-p thing)
((eieio--class-p thing)
(princ (eieio-class-name thing)))
((or (keywordp thing) (booleanp thing))
(prin1 thing))
((symbolp thing)
(princ (concat "'" (symbol-name thing))))
(t (prin1 thing))))
(defun eieio-list-prin1 (list)
@ -942,7 +929,7 @@ Optional argument GROUP is the sub-group of slots to display.
;;;***
;;;### (autoloads nil "eieio-opt" "eieio-opt.el" "b849f8bf1312d5ef57e53d02173e4b5a")
;;;### (autoloads nil "eieio-opt" "eieio-opt.el" "ff1097f185bc2c253276a7d19fe2f54a")
;;; Generated autoloads from eieio-opt.el
(autoload 'eieio-browse "eieio-opt" "\

View file

@ -1,3 +1,8 @@
2015-01-28 Dima Kogan <dima@secretsauce.net>
* erc-backend.el (define-erc-response-handler): Give hook-name
default value of nil and add-to-list (bug#19363).
2015-01-22 Paul Eggert <eggert@cs.ucla.edu>
Don't downcase system diagnostics' first letters

View file

@ -1162,8 +1162,11 @@ add things to `%s' instead."
(cl-loop for alias in aliases
collect (intern (format "erc-server-%s-functions" alias)))))
`(prog2
;; Normal hook variable.
(defvar ,hook-name ',fn-name ,(format hook-doc name))
;; Normal hook variable. The variable may already have a
;; value at this point, so I default to nil, and (add-hook)
;; unconditionally
(defvar ,hook-name nil ,(format hook-doc name))
(add-to-list ',hook-name ',fn-name)
;; Handler function
(defun ,fn-name (proc parsed)
,fn-doc

View file

@ -41,13 +41,21 @@ could use another implementation.")
"Hash table for registered file notification descriptors.
A key in this hash table is the descriptor as returned from
`gfilenotify', `inotify', `w32notify' or a file name handler.
The value in the hash table is the cons cell (DIR FILE CALLBACK).")
The value in the hash table is a list
\(DIR (FILE . CALLBACK) (FILE . CALLBACK) ...)
Several values for a given DIR happen only for `inotify', when
different files from the same directory are watched.")
;; This function is used by `gfilenotify', `inotify' and `w32notify' events.
;;;###autoload
(defun file-notify-handle-event (event)
"Handle file system monitoring event.
If EVENT is a filewatch event, call its callback.
If EVENT is a filewatch event, call its callback. It has the format
\(file-notify (DESCRIPTOR ACTIONS FILE COOKIE) CALLBACK)
Otherwise, signal a `file-notify-error'."
(interactive "e")
(if (and (eq (car event) 'file-notify)
@ -81,12 +89,23 @@ This is available in case a file has been moved."
This is available in case a file has been moved."
(nth 3 event))
;; `inotify' returns the same descriptor when the file (directory)
;; uses the same inode. We want to distinguish, and apply a virtual
;; descriptor which make the difference.
(defun file-notify--descriptor (descriptor file)
"Return the descriptor to be used in `file-notify-*-watch'.
For `gfilenotify' and `w32notify' it is the same descriptor as
used in the low-level file notification package."
(if (and (natnump descriptor) (eq file-notify--library 'inotify))
(cons descriptor file)
descriptor))
;; The callback function used to map between specific flags of the
;; respective file notifications, and the ones we return.
(defun file-notify-callback (event)
"Handle an EVENT returned from file notification.
EVENT is the same one as in `file-notify-handle-event' except the
car of that event, which is the symbol `file-notify'."
EVENT is the cdr of the event in `file-notify-handle-event'
\(DESCRIPTOR ACTIONS FILE COOKIE)."
(let* ((desc (car event))
(registered (gethash desc file-notify-descriptors))
(pending-event (assoc desc file-notify--pending-events))
@ -97,99 +116,113 @@ car of that event, which is the symbol `file-notify'."
;; Make actions a list.
(unless (consp actions) (setq actions (cons actions nil)))
;; Check, that event is meant for us.
(unless (setq callback (nth 2 registered))
(setq actions nil))
;; Loop over registered entries. In fact, more than one entry
;; happens only for `inotify'.
(dolist (entry (cdr registered))
;; Loop over actions. In fact, more than one action happens only
;; for `inotify'.
(dolist (action actions)
;; Check, that event is meant for us.
(unless (setq callback (cdr entry))
(setq actions nil))
;; Send pending event, if it doesn't match.
(when (and pending-event
;; The cookie doesn't match.
(not (eq (file-notify--event-cookie pending-event)
(file-notify--event-cookie event)))
(or
;; inotify.
(and (eq (nth 1 pending-event) 'moved-from)
(not (eq action 'moved-to)))
;; w32notify.
(and (eq (nth 1 pending-event) 'renamed-from)
(not (eq action 'renamed-to)))))
(funcall callback
(list desc 'deleted
(file-notify--event-file-name pending-event)))
(setq file-notify--pending-events
(delete pending-event file-notify--pending-events)))
;; Loop over actions. In fact, more than one action happens only
;; for `inotify'.
(dolist (action actions)
;; Map action. We ignore all events which cannot be mapped.
(setq action
(cond
;; gfilenotify.
((memq action '(attribute-changed changed created deleted)) action)
((eq action 'moved)
(setq file1 (file-notify--event-file1-name event))
'renamed)
;; Send pending event, if it doesn't match.
(when (and pending-event
;; The cookie doesn't match.
(not (eq (file-notify--event-cookie pending-event)
(file-notify--event-cookie event)))
(or
;; inotify.
(and (eq (nth 1 pending-event) 'moved-from)
(not (eq action 'moved-to)))
;; w32notify.
(and (eq (nth 1 pending-event) 'renamed-from)
(not (eq action 'renamed-to)))))
(funcall callback
(list desc 'deleted
(file-notify--event-file-name pending-event)))
(setq file-notify--pending-events
(delete pending-event file-notify--pending-events)))
;; inotify.
((eq action 'attrib) 'attribute-changed)
((eq action 'create) 'created)
((eq action 'modify) 'changed)
((memq action '(delete 'delete-self move-self)) 'deleted)
;; Make the event pending.
((eq action 'moved-from)
(add-to-list 'file-notify--pending-events
(list desc action file
(file-notify--event-cookie event)))
nil)
;; Look for pending event.
((eq action 'moved-to)
(if (null pending-event)
'created
(setq file1 file
file (file-notify--event-file-name pending-event)
file-notify--pending-events
(delete pending-event file-notify--pending-events))
'renamed))
;; Map action. We ignore all events which cannot be mapped.
(setq action
(cond
;; gfilenotify.
((memq action '(attribute-changed changed created deleted))
action)
((eq action 'moved)
(setq file1 (file-notify--event-file1-name event))
'renamed)
;; w32notify.
((eq action 'added) 'created)
((eq action 'modified) 'changed)
((eq action 'removed) 'deleted)
;; Make the event pending.
((eq 'renamed-from action)
(add-to-list 'file-notify--pending-events
(list desc action file
(file-notify--event-cookie event)))
nil)
;; Look for pending event.
((eq 'renamed-to action)
(if (null pending-event)
'created
(setq file1 file
file (file-notify--event-file-name pending-event)
file-notify--pending-events
(delete pending-event file-notify--pending-events))
'renamed))))
;; inotify.
((eq action 'attrib) 'attribute-changed)
((eq action 'create) 'created)
((eq action 'modify) 'changed)
((memq action '(delete 'delete-self move-self)) 'deleted)
;; Make the event pending.
((eq action 'moved-from)
(add-to-list 'file-notify--pending-events
(list desc action file
(file-notify--event-cookie event)))
nil)
;; Look for pending event.
((eq action 'moved-to)
(if (null pending-event)
'created
(setq file1 file
file (file-notify--event-file-name pending-event)
file-notify--pending-events
(delete pending-event file-notify--pending-events))
'renamed))
;; Apply callback.
(when (and action
(or
;; If there is no relative file name for that watch,
;; we watch the whole directory.
(null (nth 1 registered))
;; File matches.
(string-equal
(nth 1 registered) (file-name-nondirectory file))
;; File1 matches.
(and (stringp file1)
(string-equal
(nth 1 registered) (file-name-nondirectory file1)))))
(if file1
(funcall callback (list desc action file file1))
(funcall callback (list desc action file)))))))
;; w32notify.
((eq action 'added) 'created)
((eq action 'modified) 'changed)
((eq action 'removed) 'deleted)
;; Make the event pending.
((eq action 'renamed-from)
(add-to-list 'file-notify--pending-events
(list desc action file
(file-notify--event-cookie event)))
nil)
;; Look for pending event.
((eq action 'renamed-to)
(if (null pending-event)
'created
(setq file1 file
file (file-notify--event-file-name pending-event)
file-notify--pending-events
(delete pending-event file-notify--pending-events))
'renamed))))
;; Apply callback.
(when (and action
(or
;; If there is no relative file name for that watch,
;; we watch the whole directory.
(null (nth 0 entry))
;; File matches.
(string-equal
(nth 0 entry) (file-name-nondirectory file))
;; File1 matches.
(and (stringp file1)
(string-equal
(nth 0 entry) (file-name-nondirectory file1)))))
(if file1
(funcall
callback
`(,(file-notify--descriptor desc (nth 0 entry))
,action ,file ,file1))
(funcall
callback
`(,(file-notify--descriptor desc (nth 0 entry))
,action ,file))))))))
;; `gfilenotify' and `w32notify' return a unique descriptor for every
;; `file-notify-add-watch', while `inotify' returns a unique
;; descriptor per inode only.
(defun file-notify-add-watch (file flags callback)
"Add a watch for filesystem events pertaining to FILE.
This arranges for filesystem events pertaining to FILE to be reported
@ -206,7 +239,7 @@ include the following symbols:
`attribute-change' -- watch for file attributes changes, like
permissions or modification time
If FILE is a directory, 'change' watches for file creation or
If FILE is a directory, `change' watches for file creation or
deletion in that directory. This does not work recursively.
When any event happens, Emacs will call the CALLBACK function passing
@ -240,82 +273,96 @@ FILE is the name of the file whose event is being reported."
(if (file-directory-p file)
file
(file-name-directory file))))
desc func l-flags)
desc func l-flags registered)
;; Check, whether this has been registered already.
; (maphash
; (lambda (key value)
; (when (equal (cons file callback) value) (setq desc key)))
; file-notify-descriptors)
(if handler
;; A file name handler could exist even if there is no local
;; file notification support.
(setq desc (funcall
handler 'file-notify-add-watch dir flags callback))
(unless desc
(if handler
;; A file name handler could exist even if there is no local
;; file notification support.
(setq desc (funcall
handler 'file-notify-add-watch dir flags callback))
;; Check, whether Emacs has been compiled with file
;; notification support.
(unless file-notify--library
(signal 'file-notify-error
'("No file notification package available")))
;; Check, whether Emacs has been compiled with file
;; notification support.
(unless file-notify--library
(signal 'file-notify-error
'("No file notification package available")))
;; Determine low-level function to be called.
(setq func
(cond
((eq file-notify--library 'gfilenotify) 'gfile-add-watch)
((eq file-notify--library 'inotify) 'inotify-add-watch)
((eq file-notify--library 'w32notify) 'w32notify-add-watch)))
;; Determine low-level function to be called.
(setq func
(cond
((eq file-notify--library 'gfilenotify) 'gfile-add-watch)
((eq file-notify--library 'inotify) 'inotify-add-watch)
((eq file-notify--library 'w32notify) 'w32notify-add-watch)))
;; Determine respective flags.
(if (eq file-notify--library 'gfilenotify)
(setq l-flags '(watch-mounts send-moved))
(when (memq 'change flags)
(setq
l-flags
(cond
((eq file-notify--library 'inotify) '(create modify move delete))
((eq file-notify--library 'w32notify)
'(file-name directory-name size last-write-time)))))
(when (memq 'attribute-change flags)
(add-to-list
'l-flags
(cond
((eq file-notify--library 'inotify) 'attrib)
((eq file-notify--library 'w32notify) 'attributes)))))
;; Determine respective flags.
(if (eq file-notify--library 'gfilenotify)
(setq l-flags '(watch-mounts send-moved))
(when (memq 'change flags)
(setq
l-flags
(cond
((eq file-notify--library 'inotify) '(create modify move delete))
((eq file-notify--library 'w32notify)
'(file-name directory-name size last-write-time)))))
(when (memq 'attribute-change flags)
(add-to-list
'l-flags
(cond
((eq file-notify--library 'inotify) 'attrib)
((eq file-notify--library 'w32notify) 'attributes)))))
;; Call low-level function.
(setq desc (funcall func dir l-flags 'file-notify-callback)))
;; Call low-level function.
(setq desc (funcall func dir l-flags 'file-notify-callback))))
;; Modify `file-notify-descriptors'.
(setq registered (gethash desc file-notify-descriptors))
(puthash
desc
`(,dir
(,(unless (file-directory-p file) (file-name-nondirectory file))
. ,callback)
. ,(cdr registered))
file-notify-descriptors)
;; Return descriptor.
(puthash desc
(list (directory-file-name
(if (file-directory-p dir) dir (file-name-directory dir)))
(unless (file-directory-p file)
(file-name-nondirectory file))
callback)
file-notify-descriptors)
desc))
(file-notify--descriptor
desc (unless (file-directory-p file) (file-name-nondirectory file)))))
(defun file-notify-rm-watch (descriptor)
"Remove an existing watch specified by its DESCRIPTOR.
DESCRIPTOR should be an object returned by `file-notify-add-watch'."
(let ((file (car (gethash descriptor file-notify-descriptors)))
handler)
(let* ((desc (if (consp descriptor) (car descriptor) descriptor))
(file (if (consp descriptor) (cdr descriptor)))
(dir (car (gethash desc file-notify-descriptors)))
handler registered)
(when (stringp file)
(setq handler (find-file-name-handler file 'file-notify-rm-watch))
(if handler
(funcall handler 'file-notify-rm-watch descriptor)
(funcall
(cond
((eq file-notify--library 'gfilenotify) 'gfile-rm-watch)
((eq file-notify--library 'inotify) 'inotify-rm-watch)
((eq file-notify--library 'w32notify) 'w32notify-rm-watch))
descriptor)))
(when (stringp dir)
(setq handler (find-file-name-handler dir 'file-notify-rm-watch))
(remhash descriptor file-notify-descriptors)))
;; Modify `file-notify-descriptors'.
(if (not file)
(remhash desc file-notify-descriptors)
(setq registered (gethash desc file-notify-descriptors))
(setcdr registered
(delete (assoc file (cdr registered)) (cdr registered)))
(if (null (cdr registered))
(remhash desc file-notify-descriptors)
(puthash desc registered file-notify-descriptors)))
;; Call low-level function.
(when (null (cdr registered))
(if handler
;; A file name handler could exist even if there is no local
;; file notification support.
(funcall handler 'file-notify-rm-watch desc)
(funcall
(cond
((eq file-notify--library 'gfilenotify) 'gfile-rm-watch)
((eq file-notify--library 'inotify) 'inotify-rm-watch)
((eq file-notify--library 'w32notify) 'w32notify-rm-watch))
desc))))))
;; The end:
(provide 'filenotify)

View file

@ -6094,7 +6094,7 @@ and `list-directory-verbose-switches'."
PATTERN is assumed to represent a file-name wildcard suitable for the
underlying filesystem. For Unix and GNU/Linux, each character from the
set [ \\t\\n;<>&|()'\"#$] is quoted with a backslash; for DOS/Windows, all
set [ \\t\\n;<>&|()`'\"#$] is quoted with a backslash; for DOS/Windows, all
the parts of the pattern which don't include wildcard characters are
quoted with double quotes.
@ -6108,12 +6108,12 @@ need to be passed verbatim to shell commands."
;; argument has quotes, we can safely assume it is already
;; quoted by the caller.
(if (or (string-match "[\"]" pattern)
;; We quote [&()#$'] in case their shell is a port of a
;; We quote [&()#$`'] in case their shell is a port of a
;; Unixy shell. We quote [,=+] because stock DOS and
;; Windows shells require that in some cases, such as
;; passing arguments to batch files that use positional
;; arguments like %1.
(not (string-match "[ \t;&()#$',=+]" pattern)))
(not (string-match "[ \t;&()#$`',=+]" pattern)))
pattern
(let ((result "\"")
(beg 0)
@ -6128,7 +6128,7 @@ need to be passed verbatim to shell commands."
(concat result (substring pattern beg) "\""))))
(t
(let ((beg 0))
(while (string-match "[ \t\n;<>&|()'\"#$]" pattern beg)
(while (string-match "[ \t\n;<>&|()`'\"#$]" pattern beg)
(setq pattern
(concat (substring pattern 0 (match-beginning 0))
"\\"
@ -6590,35 +6590,40 @@ Runs the members of `kill-emacs-query-functions' in turn and stops
if any returns nil. If `confirm-kill-emacs' is non-nil, calls it."
(interactive "P")
(save-some-buffers arg t)
(and (or (not (memq t (mapcar (function
(lambda (buf) (and (buffer-file-name buf)
(buffer-modified-p buf))))
(buffer-list))))
(yes-or-no-p "Modified buffers exist; exit anyway? "))
(or (not (fboundp 'process-list))
;; process-list is not defined on MSDOS.
(let ((processes (process-list))
active)
(while processes
(and (memq (process-status (car processes)) '(run stop open listen))
(process-query-on-exit-flag (car processes))
(setq active t))
(setq processes (cdr processes)))
(or (not active)
(with-current-buffer-window
(get-buffer-create "*Process List*") nil
#'(lambda (window _value)
(with-selected-window window
(unwind-protect
(yes-or-no-p "Active processes exist; kill them and exit anyway? ")
(when (window-live-p window)
(quit-restore-window window 'kill)))))
(list-processes t)))))
;; Query the user for other things, perhaps.
(run-hook-with-args-until-failure 'kill-emacs-query-functions)
(or (null confirm-kill-emacs)
(funcall confirm-kill-emacs "Really exit Emacs? "))
(kill-emacs)))
(let ((confirm confirm-kill-emacs))
(and
(or (not (memq t (mapcar (function
(lambda (buf) (and (buffer-file-name buf)
(buffer-modified-p buf))))
(buffer-list))))
(progn (setq confirm nil)
(yes-or-no-p "Modified buffers exist; exit anyway? ")))
(or (not (fboundp 'process-list))
;; process-list is not defined on MSDOS.
(let ((processes (process-list))
active)
(while processes
(and (memq (process-status (car processes)) '(run stop open listen))
(process-query-on-exit-flag (car processes))
(setq active t))
(setq processes (cdr processes)))
(or (not active)
(with-current-buffer-window
(get-buffer-create "*Process List*") nil
#'(lambda (window _value)
(with-selected-window window
(unwind-protect
(progn
(setq confirm nil)
(yes-or-no-p "Active processes exist; kill them and exit anyway? "))
(when (window-live-p window)
(quit-restore-window window 'kill)))))
(list-processes t)))))
;; Query the user for other things, perhaps.
(run-hook-with-args-until-failure 'kill-emacs-query-functions)
(or (null confirm)
(funcall confirm "Really exit Emacs? "))
(kill-emacs))))
(defun save-buffers-kill-terminal (&optional arg)
"Offer to save each buffer, then kill the current connection.

View file

@ -1,3 +1,30 @@
2015-01-30 Glenn Morris <rgm@gnu.org>
* gnus-registry.el (gnus-registry-max-pruned-entries)
(gnus-registry-prune-factor, gnus-registry-default-sort-function):
Fix :version.
(gnus-registry-default-sort-function): Improve :type.
2015-01-29 Lars Ingebrigtsen <larsi@gnus.org>
* nnimap.el (nnimap-request-group): Allow running this function on
groups that don't exist in Gnus yet.
(nnimap-request-group): Revert previous patch since that made it
impossible to enter nnimap groups.
* message.el (message-smtpmail-send-it): Remove the mail header
separator before sending.
2015-01-28 Elias Oltmanns <eo@nebensachen.de>
* nnimap.el (nnimap-find-expired-articles): Fix handling of
(expiry-wait . never).
2015-01-28 Lars Ingebrigtsen <larsi@gnus.org>
* nnimap.el (nnimap-request-group): Clear the buffer before returning
the data.
2015-01-27 Lars Ingebrigtsen <larsi@gnus.org>
* nnir.el (nnir-imap-expr-to-imap): Check for literal+ capability in

View file

@ -176,7 +176,8 @@ nnmairix groups are specifically excluded because they are ephemeral."
(make-obsolete-variable 'gnus-registry-max-track-groups nil "23.4")
(make-obsolete-variable 'gnus-registry-entry-caching nil "23.4")
(make-obsolete-variable 'gnus-registry-trim-articles-without-groups nil "23.4")
(make-obsolete-variable 'gnus-registry-max-pruned-entries nil "24.4")
;; FIXME it was simply deleted.
(make-obsolete-variable 'gnus-registry-max-pruned-entries nil "25.1")
(defcustom gnus-registry-track-extra '(subject sender recipient)
"Whether the registry should track extra data about a message.
@ -253,21 +254,18 @@ exactly how much less. For example, given a maximum size of
cut the registry back to \(- 50000 \(* 50000 0.1\)\) -> 45000
entries. The pruning process is constrained by the presence of
\"precious\" entries."
:version "24.4"
:version "25.1"
:group 'gnus-registry
:type 'float)
(defcustom gnus-registry-default-sort-function
#'gnus-registry-sort-by-creation-time
"Sort function to use when pruning the registry.
Entries which sort to the front of the list will be pruned
first.
Entries that sort to the front of the list are pruned first.
This can slow pruning down. Set to nil to perform no sorting."
:version "24.4"
:version "25.1"
:group 'gnus-registry
:type 'symbol)
:type '(choice (const :tag "No sorting" nil) function))
(defun gnus-registry-sort-by-creation-time (l r)
"Sort older entries to front of list."

View file

@ -4906,6 +4906,11 @@ evaluates `message-send-mail-hook' just before sending a message.
It is useful if your ISP requires the POP-before-SMTP
authentication. See the Gnus manual for details."
(run-hooks 'message-send-mail-hook)
;; Change header-delimiter to be what smtpmail expects.
(goto-char (point-min))
(when (re-search-forward
(concat "^" (regexp-quote mail-header-separator) "\n"))
(replace-match "\n"))
(smtpmail-send-it))
(defun message-send-mail-with-mailclient ()

View file

@ -889,7 +889,7 @@ external if displayed external."
(when (and (boundp 'gnus-summary-buffer)
(bufferp gnus-summary-buffer)
(buffer-name gnus-summary-buffer))
;; So that we pop back to the right place, sortof.
;; So that we pop back to the right place, sort of.
(switch-to-buffer gnus-summary-buffer)
(switch-to-buffer mm))
(delete-other-windows)

View file

@ -812,6 +812,7 @@ textual parts.")
(nnimap-finish-retrieve-group-infos server (list info) sequences
t)
(setq active (nth 2 (assoc group nnimap-current-infos)))))
(erase-buffer)
(insert (format "211 %d %d %d %S\n"
(- (cdr active) (car active))
(car active)
@ -1020,20 +1021,20 @@ textual parts.")
(defun nnimap-find-expired-articles (group)
(let ((cutoff (nnmail-expired-article-p group nil nil)))
(with-current-buffer (nnimap-buffer)
(let ((result
(nnimap-command
"UID SEARCH SENTBEFORE %s"
(format-time-string
(format "%%d-%s-%%Y"
(upcase
(car (rassoc (nth 4 (decode-time cutoff))
parse-time-months))))
cutoff))))
(and (car result)
(delete 0 (mapcar #'string-to-number
(cdr (assoc "SEARCH" (cdr result))))))))))
(when cutoff
(with-current-buffer (nnimap-buffer)
(let ((result
(nnimap-command
"UID SEARCH SENTBEFORE %s"
(format-time-string
(format "%%d-%s-%%Y"
(upcase
(car (rassoc (nth 4 (decode-time cutoff))
parse-time-months))))
cutoff))))
(and (car result)
(delete 0 (mapcar #'string-to-number
(cdr (assoc "SEARCH" (cdr result)))))))))))
(defun nnimap-find-article-by-message-id (group server message-id
&optional limit)

View file

@ -145,7 +145,8 @@
(file-error (load "ldefs-boot.el")))
(load "emacs-lisp/nadvice")
(load "minibuffer")
(load "emacs-lisp/cl-preloaded")
(load "minibuffer") ;After loaddefs, for define-minor-mode.
(load "abbrev") ;lisp-mode.el and simple.el use define-abbrev-table.
(load "simple")

View file

@ -328,7 +328,15 @@ This variable is only used if the variable
(defun net-utils-run-program (name header program args)
"Run a network information program."
(let ((buf (get-buffer-create (concat "*" name "*"))))
(let ((buf (get-buffer-create (concat "*" name "*")))
(coding-system-for-read
;; MS-Windows versions of network utilities output text
;; encoded in the console (a.k.a. "OEM") codepage, which is
;; different from the default system (a.k.a. "ANSI")
;; codepage.
(if (eq system-type 'windows-nt)
(intern (format "cp%d" (w32-get-console-output-codepage)))
coding-system-for-read)))
(set-buffer buf)
(erase-buffer)
(insert header "\n")
@ -352,7 +360,15 @@ This variable is only used if the variable
(when proc
(set-process-filter proc nil)
(delete-process proc)))
(let ((inhibit-read-only t))
(let ((inhibit-read-only t)
(coding-system-for-read
;; MS-Windows versions of network utilities output text
;; encoded in the console (a.k.a. "OEM") codepage, which is
;; different from the default system (a.k.a. "ANSI")
;; codepage.
(if (eq system-type 'windows-nt)
(intern (format "cp%d" (w32-get-console-output-codepage)))
coding-system-for-read)))
(erase-buffer))
(net-utils-mode)
(setq-local net-utils--revert-cmd

View file

@ -1628,6 +1628,8 @@ The preference is a float determined from `shr-prefer-media-type'."
(let ((trs nil)
(shr-inhibit-decoration (not fill))
(rowspans (make-vector (length widths) 0))
(colspan-remaining 0)
colspan-width colspan-count
width colspan)
(dolist (row (dom-non-text-children dom))
(when (eq (dom-tag row) 'tr)
@ -1659,24 +1661,39 @@ The preference is a float determined from `shr-prefer-media-type'."
(if column
(aref widths width-column)
10))
(when (and fill
(setq colspan (dom-attr column 'colspan)))
(when (setq colspan (dom-attr column 'colspan))
(setq colspan (min (string-to-number colspan)
;; The colspan may be wrong, so
;; truncate it to the length of the
;; remaining columns.
(- (length widths) i)))
(dotimes (j (1- colspan))
(if (> (+ i 1 j) (1- (length widths)))
(setq width (aref widths (1- (length widths))))
(setq width (+ width
shr-table-separator-length
(aref widths (+ i 1 j))))))
(setq width-column (+ width-column (1- colspan))))
(setq width
(if (> (+ i 1 j) (1- (length widths)))
;; If we have a colspan spec that's longer
;; than the table is wide, just use the last
;; width as the width.
(aref widths (1- (length widths)))
;; Sum up the widths of the columns we're
;; spanning.
(+ width
shr-table-separator-length
(aref widths (+ i 1 j))))))
(setq width-column (+ width-column (1- colspan))
colspan-count colspan
colspan-remaining colspan))
(when (or column
(not fill))
(push (shr-render-td column width fill)
tds))
(let ((data (shr-render-td column width fill)))
(if (and (not fill)
(> colspan-remaining 0))
(progn
(when (= colspan-count colspan-remaining)
(setq colspan-width data))
(let ((this-width (/ colspan-width colspan-count)))
(push this-width tds)
(setq colspan-remaining (1- colspan-remaining))))
(push data tds))))
(setq i (1+ i)
width-column (1+ width-column))))
(push (nreverse tds) trs))))

View file

@ -64,7 +64,6 @@
(defvar bkup-backup-directory-info)
(defvar directory-sep-char)
(defvar eshell-path-env)
(defvar file-notify-descriptors)
(defvar ls-lisp-use-insert-directory-program)
(defvar outline-regexp)
@ -3415,7 +3414,7 @@ of."
(defun tramp-handle-file-notify-rm-watch (proc)
"Like `file-notify-rm-watch' for Tramp files."
;; The descriptor must be a process object.
(unless (and (processp proc) (gethash proc file-notify-descriptors))
(unless (processp proc)
(tramp-error proc 'file-notify-error "Not a valid descriptor %S" proc))
(tramp-message proc 6 "Kill %S" proc)
(kill-process proc))

View file

@ -35,9 +35,6 @@
;;; Code:
(defvar font-lock-warning-face)
(defgroup outlines nil
"Support for hierarchical outlining."
:prefix "outline-"
@ -65,73 +62,66 @@ in the file it applies to.")
(define-key map "@" 'outline-mark-subtree)
(define-key map "\C-n" 'outline-next-visible-heading)
(define-key map "\C-p" 'outline-previous-visible-heading)
(define-key map "\C-i" 'show-children)
(define-key map "\C-s" 'show-subtree)
(define-key map "\C-d" 'hide-subtree)
(define-key map "\C-i" 'outline-show-children)
(define-key map "\C-s" 'outline-show-subtree)
(define-key map "\C-d" 'outline-hide-subtree)
(define-key map "\C-u" 'outline-up-heading)
(define-key map "\C-f" 'outline-forward-same-level)
(define-key map "\C-b" 'outline-backward-same-level)
(define-key map "\C-t" 'hide-body)
(define-key map "\C-a" 'show-all)
(define-key map "\C-c" 'hide-entry)
(define-key map "\C-e" 'show-entry)
(define-key map "\C-l" 'hide-leaves)
(define-key map "\C-k" 'show-branches)
(define-key map "\C-q" 'hide-sublevels)
(define-key map "\C-o" 'hide-other)
(define-key map "\C-t" 'outline-hide-body)
(define-key map "\C-a" 'outline-show-all)
(define-key map "\C-c" 'outline-hide-entry)
(define-key map "\C-e" 'outline-show-entry)
(define-key map "\C-l" 'outline-hide-leaves)
(define-key map "\C-k" 'outline-show-branches)
(define-key map "\C-q" 'outline-hide-sublevels)
(define-key map "\C-o" 'outline-hide-other)
(define-key map "\C-^" 'outline-move-subtree-up)
(define-key map "\C-v" 'outline-move-subtree-down)
(define-key map [(control ?<)] 'outline-promote)
(define-key map [(control ?>)] 'outline-demote)
(define-key map "\C-m" 'outline-insert-heading)
;; Where to bind outline-cycle ?
map))
(defvar outline-mode-menu-bar-map
(let ((map (make-sparse-keymap)))
(define-key map [hide] (cons "Hide" (make-sparse-keymap "Hide")))
(define-key map [hide hide-other]
'(menu-item "Hide Other" hide-other
(define-key map [hide outline-hide-other]
'(menu-item "Hide Other" outline-hide-other
:help "Hide everything except current body and parent and top-level headings"))
(define-key map [hide hide-sublevels]
'(menu-item "Hide Sublevels" hide-sublevels
(define-key map [hide outline-hide-sublevels]
'(menu-item "Hide Sublevels" outline-hide-sublevels
:help "Hide everything but the top LEVELS levels of headers, in whole buffer"))
(define-key map [hide hide-subtree]
'(menu-item "Hide Subtree" hide-subtree
(define-key map [hide outline-hide-subtree]
'(menu-item "Hide Subtree" outline-hide-subtree
:help "Hide everything after this heading at deeper levels"))
(define-key map [hide hide-entry]
'(menu-item "Hide Entry" hide-entry
(define-key map [hide outline-hide-entry]
'(menu-item "Hide Entry" outline-hide-entry
:help "Hide the body directly following this heading"))
(define-key map [hide hide-body]
'(menu-item "Hide Body" hide-body
(define-key map [hide outline-hide-body]
'(menu-item "Hide Body" outline-hide-body
:help "Hide all body lines in buffer, leaving all headings visible"))
(define-key map [hide hide-leaves]
'(menu-item "Hide Leaves" hide-leaves
(define-key map [hide outline-hide-leaves]
'(menu-item "Hide Leaves" outline-hide-leaves
:help "Hide the body after this heading and at deeper levels"))
(define-key map [show] (cons "Show" (make-sparse-keymap "Show")))
(define-key map [show show-subtree]
'(menu-item "Show Subtree" show-subtree
(define-key map [show outline-show-subtree]
'(menu-item "Show Subtree" outline-show-subtree
:help "Show everything after this heading at deeper levels"))
(define-key map [show show-children]
'(menu-item "Show Children" show-children
(define-key map [show outline-show-children]
'(menu-item "Show Children" outline-show-children
:help "Show all direct subheadings of this heading"))
(define-key map [show show-branches]
'(menu-item "Show Branches" show-branches
(define-key map [show outline-show-branches]
'(menu-item "Show Branches" outline-show-branches
:help "Show all subheadings of this heading, but not their bodies"))
(define-key map [show show-entry]
'(menu-item "Show Entry" show-entry
(define-key map [show outline-show-entry]
'(menu-item "Show Entry" outline-show-entry
:help "Show the body directly following this heading"))
(define-key map [show show-all]
'(menu-item "Show All" show-all
(define-key map [show outline-show-all]
'(menu-item "Show All" outline-show-all
:help "Show all of the text in the buffer"))
(define-key map [headings]
(cons "Headings" (make-sparse-keymap "Headings")))
(define-key map [headings demote-subtree]
'(menu-item "Demote Subtree" outline-demote
:help "Demote headings lower down the tree"))
@ -152,23 +142,18 @@ in the file it applies to.")
'(menu-item "New Heading" outline-insert-heading
:help "Insert a new heading at same depth at point"))
(define-key map [headings outline-backward-same-level]
'(menu-item "Previous Same Level" outline-backward-same-level
:help "Move backward to the arg'th subheading at same level as this one."))
(define-key map [headings outline-forward-same-level]
'(menu-item "Next Same Level" outline-forward-same-level
:help "Move forward to the arg'th subheading at same level as this one"))
(define-key map [headings outline-previous-visible-heading]
'(menu-item "Previous" outline-previous-visible-heading
:help "Move to the previous heading line"))
(define-key map [headings outline-next-visible-heading]
'(menu-item "Next" outline-next-visible-heading
:help "Move to the next visible heading line"))
(define-key map [headings outline-up-heading]
'(menu-item "Up" outline-up-heading
:help "Move to the visible heading line of which the present line is a subheading"))
map))
@ -190,7 +175,6 @@ in the file it applies to.")
outline-mode-menu-bar-map))))))
map))
(defvar outline-mode-map
(let ((map (make-sparse-keymap)))
(define-key map "\C-c" outline-mode-prefix-map)
@ -198,7 +182,7 @@ in the file it applies to.")
map))
(defvar outline-font-lock-keywords
'(;;
'(
;; Highlight headings according to the level.
(eval . (list (concat "^\\(?:" outline-regexp "\\).+")
0 '(outline-font-lock-face) nil t)))
@ -248,33 +232,14 @@ in the file it applies to.")
[outline-1 outline-2 outline-3 outline-4
outline-5 outline-6 outline-7 outline-8])
;; (defvar outline-font-lock-levels nil)
;; (make-variable-buffer-local 'outline-font-lock-levels)
(defun outline-font-lock-face ()
;; (save-excursion
;; (outline-back-to-heading t)
;; (let* ((count 0)
;; (start-level (funcall outline-level))
;; (level start-level)
;; face-level)
;; (while (not (setq face-level
;; (if (or (bobp) (eq level 1)) 0
;; (cdr (assq level outline-font-lock-levels)))))
;; (outline-up-heading 1 t)
;; (setq count (1+ count))
;; (setq level (funcall outline-level)))
;; ;; Remember for later.
;; (unless (zerop count)
;; (setq face-level (+ face-level count))
;; (push (cons start-level face-level) outline-font-lock-levels))
;; (condition-case nil
;; (aref outline-font-lock-faces face-level)
;; (error font-lock-warning-face))))
"Return one of `outline-font-lock-faces' for current level."
(save-excursion
(goto-char (match-beginning 0))
(looking-at outline-regexp)
(aref outline-font-lock-faces (% (1- (funcall outline-level)) (length outline-font-lock-faces)))))
(aref outline-font-lock-faces
(% (1- (funcall outline-level))
(length outline-font-lock-faces)))))
(defvar outline-view-change-hook nil
"Normal hook to be run after outline visibility changes.")
@ -296,29 +261,11 @@ invisible, or visible again. Invisible lines are attached to the end
of the heading, so they move with it, if the line is killed and yanked
back. A heading with text hidden under it is marked with an ellipsis (...).
Commands:\\<outline-mode-map>
\\[outline-next-visible-heading] outline-next-visible-heading move by visible headings
\\[outline-previous-visible-heading] outline-previous-visible-heading
\\[outline-forward-same-level] outline-forward-same-level similar but skip subheadings
\\[outline-backward-same-level] outline-backward-same-level
\\[outline-up-heading] outline-up-heading move from subheading to heading
\\[hide-body] make all text invisible (not headings).
\\[show-all] make everything in buffer visible.
\\[hide-sublevels] make only the first N levels of headers visible.
The remaining commands are used when point is on a heading line.
They apply to some of the body or subheadings of that heading.
\\[hide-subtree] hide-subtree make body and subheadings invisible.
\\[show-subtree] show-subtree make body and subheadings visible.
\\[show-children] show-children make direct subheadings visible.
No effect on body, or subheadings 2 or more levels down.
With arg N, affects subheadings N levels down.
\\[hide-entry] make immediately following body invisible.
\\[show-entry] make it visible.
\\[hide-leaves] make body under heading and under its subheadings invisible.
The subheadings remain visible.
\\[show-branches] make all subheadings at all levels visible.
\\{outline-mode-map}
The commands `outline-hide-subtree', `outline-show-subtree',
`outline-show-children', `outline-hide-entry',
`outline-show-entry', `outline-hide-leaves', and `outline-show-branches'
are used when point is on a heading line.
The variable `outline-regexp' can be changed to control what is a heading.
A line is a heading if `outline-regexp' matches something at the
@ -340,7 +287,7 @@ Turning on outline mode calls the value of `text-mode-hook' and then of
'(outline-font-lock-keywords t nil nil backward-paragraph))
(setq imenu-generic-expression
(list (list nil (concat "^\\(?:" outline-regexp "\\).*$") 0)))
(add-hook 'change-major-mode-hook 'show-all nil t))
(add-hook 'change-major-mode-hook 'outline-show-all nil t))
(defcustom outline-minor-mode-prefix "\C-c@"
"Prefix key to use for Outline commands in Outline minor mode.
@ -373,7 +320,7 @@ See the command `outline-mode' for more information on this mode."
;; Cause use of ellipses for invisible text.
(remove-from-invisibility-spec '(outline . t))
;; When turning off outline mode, get rid of any outline hiding.
(show-all)))
(outline-show-all)))
(defvar outline-level 'outline-level
"Function of no args to compute a header's nesting level in an outline.
@ -441,7 +388,8 @@ at the end of the buffer."
nil 'move))
(defsubst outline-invisible-p (&optional pos)
"Non-nil if the character after point is invisible."
"Non-nil if the character after POS is invisible.
If POS is nil, use `point' instead."
(get-char-property (or pos (point)) 'invisible))
(defun outline-back-to-heading (&optional invisible-ok)
@ -454,7 +402,7 @@ Only visible heading lines are considered, unless INVISIBLE-OK is non-nil."
(while (not found)
(or (re-search-backward (concat "^\\(?:" outline-regexp "\\)")
nil t)
(error "before first heading"))
(error "Before first heading"))
(setq found (and (or invisible-ok (not (outline-invisible-p)))
(point)))))
(goto-char found)
@ -489,6 +437,9 @@ If INVISIBLE-OK is non-nil, an invisible heading line is ok too."
(run-hooks 'outline-insert-heading-hook)))
(defun outline-invent-heading (head up)
"Create a heading by using heading HEAD as a template.
When UP is non-nil, the created heading will be one level above.
Otherwise, it will be one level below."
(save-match-data
;; Let's try to invent one by repeating or deleting the last char.
(let ((new-head (if up (substring head 0 -1)
@ -504,7 +455,7 @@ If INVISIBLE-OK is non-nil, an invisible heading line is ok too."
(defun outline-promote (&optional which)
"Promote headings higher up the tree.
If transient-mark-mode is on, and mark is active, promote headings in
If `transient-mark-mode' is on, and mark is active, promote headings in
the region (from a Lisp program, pass `region' for WHICH). Otherwise:
without prefix argument, promote current heading and all headings in the
subtree (from a Lisp program, pass `subtree' for WHICH); with prefix
@ -543,7 +494,7 @@ nil for WHICH, or do not pass any argument)."
(defun outline-demote (&optional which)
"Demote headings lower down the tree.
If transient-mark-mode is on, and mark is active, demote headings in
If `transient-mark-mode' is on, and mark is active, demote headings in
the region (from a Lisp program, pass `region' for WHICH). Otherwise:
without prefix argument, demote current heading and all headings in the
subtree (from a Lisp program, pass `subtree' for WHICH); with prefix
@ -585,7 +536,7 @@ nil for WHICH, or do not pass any argument)."
(replace-match down-head nil t)))))
(defun outline-head-from-level (level head &optional alist)
"Get new heading with level LEVEL from ALIST.
"Get new heading with level LEVEL, closest to HEAD, from ALIST.
If there are no such entries, return nil.
ALIST defaults to `outline-heading-alist'.
Similar to (car (rassoc LEVEL ALIST)).
@ -677,16 +628,17 @@ the match data is set appropriately."
(move-marker ins-point (point))
(insert (delete-and-extract-region beg end))
(goto-char ins-point)
(if folded (hide-subtree))
(if folded (outline-hide-subtree))
(move-marker ins-point nil)))
(defun outline-end-of-heading ()
"Move to one char before the next `outline-heading-end-regexp'."
(if (re-search-forward outline-heading-end-regexp nil 'move)
(forward-char -1)))
(defun outline-next-visible-heading (arg)
"Move to the next visible heading line.
With argument, repeats or can move backward if negative.
With ARG, repeats or can move backward if negative.
A heading line is one that starts with a `*' (or that
`outline-regexp' matches)."
(interactive "p")
@ -714,7 +666,7 @@ A heading line is one that starts with a `*' (or that
(defun outline-previous-visible-heading (arg)
"Move to the previous heading line.
With argument, repeats or can move forward if negative.
With ARG, repeats or can move forward if negative.
A heading line is one that starts with a `*' (or that
`outline-regexp' matches)."
(interactive "p")
@ -739,7 +691,7 @@ This puts point at the start of the current subtree, and mark at the end."
(defvar outline-isearch-open-invisible-function nil
"Function called if `isearch' finishes in an invisible overlay.
The function is called with the overlay as its only argument.
If nil, `show-entry' is called to reveal the invisible text.")
If nil, `outline-show-entry' is called to reveal the invisible text.")
(put 'outline 'reveal-toggle-invisible 'outline-reveal-toggle-invisible)
(defun outline-flag-region (from to flag)
@ -763,51 +715,51 @@ If FLAG is nil then text is shown, while if FLAG is t the text is hidden."
(save-excursion
(goto-char (overlay-start o))
(if hidep
;; When hiding the area again, we could just clean it up and let
;; reveal do the rest, by simply doing:
;; (remove-overlays (overlay-start o) (overlay-end o)
;; 'invisible 'outline)
;;
;; That works fine as long as everything is in sync, but if the
;; structure of the document is changed while revealing parts of it,
;; the resulting behavior can be ugly. I.e. we need to make
;; sure that we hide exactly a subtree.
(progn
(let ((end (overlay-end o)))
(delete-overlay o)
(while (progn
(hide-subtree)
(outline-next-visible-heading 1)
(and (not (eobp)) (< (point) end))))))
;; When hiding the area again, we could just clean it up and let
;; reveal do the rest, by simply doing:
;; (remove-overlays (overlay-start o) (overlay-end o)
;; 'invisible 'outline)
;;
;; That works fine as long as everything is in sync, but if the
;; structure of the document is changed while revealing parts of it,
;; the resulting behavior can be ugly. I.e. we need to make
;; sure that we hide exactly a subtree.
(progn
(let ((end (overlay-end o)))
(delete-overlay o)
(while (progn
(outline-hide-subtree)
(outline-next-visible-heading 1)
(and (not (eobp)) (< (point) end))))))
;; When revealing, we just need to reveal sublevels. If point is
;; inside one of the sublevels, reveal will call us again.
;; But we need to preserve the original overlay.
(let ((o1 (copy-overlay o)))
(overlay-put o 'invisible nil) ;Show (most of) the text.
(while (progn
(show-entry)
(show-children)
;; Normally just the above is needed.
;; But in odd cases, the above might fail to show anything.
;; To avoid an infinite loop, we have to make sure that
;; *something* gets shown.
(and (equal (overlay-start o) (overlay-start o1))
(< (point) (overlay-end o))
(= 0 (forward-line 1)))))
;; If still nothing was shown, just kill the damn thing.
(when (equal (overlay-start o) (overlay-start o1))
;; I've seen it happen at the end of buffer.
(delete-overlay o1))))))
(overlay-put o 'invisible nil) ;Show (most of) the text.
(while (progn
(outline-show-entry)
(outline-show-children)
;; Normally just the above is needed.
;; But in odd cases, the above might fail to show anything.
;; To avoid an infinite loop, we have to make sure that
;; *something* gets shown.
(and (equal (overlay-start o) (overlay-start o1))
(< (point) (overlay-end o))
(= 0 (forward-line 1)))))
;; If still nothing was shown, just kill the damn thing.
(when (equal (overlay-start o) (overlay-start o1))
;; I've seen it happen at the end of buffer.
(delete-overlay o1))))))
;; Function to be set as an outline-isearch-open-invisible' property
;; to the overlay that makes the outline invisible (see
;; `outline-flag-region').
(defun outline-isearch-open-invisible (_overlay)
;; We rely on the fact that isearch places point on the matched text.
(show-entry))
(outline-show-entry))
(defun hide-entry ()
(defun outline-hide-entry ()
"Hide the body directly following this heading."
(interactive)
(save-excursion
@ -815,22 +767,31 @@ If FLAG is nil then text is shown, while if FLAG is t the text is hidden."
(outline-end-of-heading)
(outline-flag-region (point) (progn (outline-next-preface) (point)) t)))
(defun show-entry ()
(define-obsolete-function-alias
'hide-entry 'outline-hide-entry "25.1")
(defun outline-show-entry ()
"Show the body directly following this heading.
Show the heading too, if it is currently invisible."
(interactive)
(save-excursion
(outline-back-to-heading t)
(outline-flag-region (1- (point))
(progn (outline-next-preface) (point)) nil)))
(progn (outline-next-preface) (point)) nil)))
(defun hide-body ()
(define-obsolete-function-alias
'show-entry 'outline-show-entry "25.1")
(defun outline-hide-body ()
"Hide all body lines in buffer, leaving all headings visible."
(interactive)
(hide-region-body (point-min) (point-max)))
(outline-hide-region-body (point-min) (point-max)))
(defun hide-region-body (start end)
"Hide all body lines in the region, but not headings."
(define-obsolete-function-alias
'hide-body 'outline-hide-body "25.1")
(defun outline-hide-region-body (start end)
"Hide all body lines between START and END, but not headings."
;; Nullify the hook to avoid repeated calls to `outline-flag-region'
;; wasting lots of time running `lazy-lock-fontify-after-outline'
;; and run the hook finally.
@ -850,30 +811,47 @@ Show the heading too, if it is currently invisible."
(outline-end-of-heading))))))
(run-hooks 'outline-view-change-hook))
(defun show-all ()
(define-obsolete-function-alias
'hide-region-body 'outline-hide-region-body "25.1")
(defun outline-show-all ()
"Show all of the text in the buffer."
(interactive)
(outline-flag-region (point-min) (point-max) nil))
(defun hide-subtree ()
(define-obsolete-function-alias
'show-all 'outline-show-all "25.1")
(defun outline-hide-subtree ()
"Hide everything after this heading at deeper levels."
(interactive)
(outline-flag-subtree t))
(defun hide-leaves ()
(define-obsolete-function-alias
'hide-subtree 'outline-hide-subtree "25.1")
(defun outline-hide-leaves ()
"Hide the body after this heading and at deeper levels."
(interactive)
(save-excursion
(outline-back-to-heading)
;; Turned off to fix bug reported by Otto Maddox on 22 Nov 2005.
;; (outline-end-of-heading)
(hide-region-body (point) (progn (outline-end-of-subtree) (point)))))
;; Turned off to fix bug reported by Otto Maddox on 22 Nov 2005.
;; (outline-end-of-heading)
(outline-hide-region-body
(point)
(progn (outline-end-of-subtree) (point)))))
(defun show-subtree ()
(define-obsolete-function-alias
'hide-leaves 'outline-hide-leaves "25.1")
(defun outline-show-subtree ()
"Show everything after this heading at deeper levels."
(interactive)
(outline-flag-subtree nil))
(define-obsolete-function-alias
'show-subtree 'outline-show-subtree "25.1")
(defun outline-show-heading ()
"Show the current heading and move to its end."
(outline-flag-region (- (point)
@ -884,7 +862,7 @@ Show the heading too, if it is currently invisible."
(progn (outline-end-of-heading) (point))
nil))
(defun hide-sublevels (levels)
(defun outline-hide-sublevels (levels)
"Hide everything but the top LEVELS levels of headers, in whole buffer."
(interactive (list
(cond
@ -922,14 +900,17 @@ Show the heading too, if it is currently invisible."
(outline-flag-region (1- (point)) (point) nil))))
(run-hooks 'outline-view-change-hook))
(defun hide-other ()
(define-obsolete-function-alias
'hide-sublevels 'outline-hide-sublevels "25.1")
(defun outline-hide-other ()
"Hide everything except current body and parent and top-level headings."
(interactive)
(hide-sublevels 1)
(outline-hide-sublevels 1)
(let (outline-view-change-hook)
(save-excursion
(outline-back-to-heading t)
(show-entry)
(outline-show-entry)
(while (condition-case nil (progn (outline-up-heading 1 t) (not (bobp)))
(error nil))
(outline-flag-region (1- (point))
@ -937,17 +918,21 @@ Show the heading too, if it is currently invisible."
nil))))
(run-hooks 'outline-view-change-hook))
(define-obsolete-function-alias
'hide-other 'outline-hide-other "25.1")
(defun outline-toggle-children ()
"Show or hide the current subtree depending on its current state."
(interactive)
(save-excursion
(outline-back-to-heading)
(if (not (outline-invisible-p (line-end-position)))
(hide-subtree)
(show-children)
(show-entry))))
(outline-hide-subtree)
(outline-show-children)
(outline-show-entry))))
(defun outline-flag-subtree (flag)
"Assign FLAG to the current subtree."
(save-excursion
(outline-back-to-heading)
(outline-end-of-heading)
@ -956,6 +941,7 @@ Show the heading too, if it is currently invisible."
flag)))
(defun outline-end-of-subtree ()
"Move to the end of the current subtree."
(outline-back-to-heading)
(let ((first t)
(level (funcall outline-level)))
@ -972,12 +958,15 @@ Show the heading too, if it is currently invisible."
;; leave blank line before heading
(forward-char -1))))))
(defun show-branches ()
(defun outline-show-branches ()
"Show all subheadings of this heading, but not their bodies."
(interactive)
(show-children 1000))
(outline-show-children 1000))
(defun show-children (&optional level)
(define-obsolete-function-alias
'show-branches 'outline-show-branches "25.1")
(defun outline-show-children (&optional level)
"Show all direct subheadings of this heading.
Prefix arg LEVEL is how many levels below the current level should be shown.
Default is enough to cause the following heading to appear."
@ -1004,6 +993,9 @@ Default is enough to cause the following heading to appear."
(if (eobp) (point-max) (1+ (point)))))))
(run-hooks 'outline-view-change-hook))
(define-obsolete-function-alias
'show-children 'outline-show-children "25.1")
(defun outline-up-heading (arg &optional invisible-ok)
@ -1086,7 +1078,7 @@ If there is no such heading, return nil."
(point)))))
(defun outline-headers-as-kill (beg end)
"Save the visible outline headers in region at the start of the kill ring.
"Save the visible outline headers between BEG and END to the kill ring.
Text shown between the headers isn't copied. Two newlines are
inserted between saved headers. Yanking the result may be a

View file

@ -463,9 +463,14 @@ The type returned can be `comment', `string' or `paren'."
((nth 8 ppss) (if (nth 4 ppss) 'comment 'string))
((nth 1 ppss) 'paren))))
(defsubst python-syntax-comment-or-string-p ()
"Return non-nil if point is inside 'comment or 'string."
(nth 8 (syntax-ppss)))
(defsubst python-syntax-comment-or-string-p (&optional ppss)
"Return non-nil if PPSS is inside 'comment or 'string."
(nth 8 (or ppss (syntax-ppss))))
(defsubst python-syntax-closing-paren-p ()
"Return non-nil if char after point is a closing paren."
(= (syntax-class (syntax-after (point)))
(syntax-class (string-to-syntax ")"))))
(define-obsolete-function-alias
'python-info-ppss-context #'python-syntax-context "24.3")
@ -704,11 +709,28 @@ It makes underscores and dots word constituent chars.")
'python-guess-indent 'python-indent-guess-indent-offset "24.3")
(defvar python-indent-current-level 0
"Current indentation level `python-indent-line-function' is using.")
"Deprecated var available for compatibility.")
(defvar python-indent-levels '(0)
"Levels of indentation available for `python-indent-line-function'.
Can also be `noindent' if automatic indentation can't be used.")
"Deprecated var available for compatibility.")
(make-obsolete-variable
'python-indent-current-level
"The indentation API changed to avoid global state.
The function `python-indent-calculate-levels' does not use it
anymore. If you were defadvising it and or depended on this
variable for indentation customizations, refactor your code to
work on `python-indent-calculate-indentation' instead."
"24.5")
(make-obsolete-variable
'python-indent-levels
"The indentation API changed to avoid global state.
The function `python-indent-calculate-levels' does not use it
anymore. If you were defadvising it and or depended on this
variable for indentation customizations, refactor your code to
work on `python-indent-calculate-indentation' instead."
"24.5")
(defun python-indent-guess-indent-offset ()
"Guess and set `python-indent-offset' for the current buffer."
@ -748,362 +770,358 @@ Can also be `noindent' if automatic indentation can't be used.")
python-indent-offset)))))))
(defun python-indent-context ()
"Get information on indentation context.
Context information is returned with a cons with the form:
(STATUS . START)
"Get information about the current indentation context.
Context is returned in a cons with the form (STATUS . START).
Where status can be any of the following symbols:
STATUS can be one of the following:
* after-comment: When current line might continue a comment block
* inside-paren: If point in between (), {} or []
* inside-string: If point is inside a string
* after-backslash: Previous line ends in a backslash
* after-beginning-of-block: Point is after beginning of block
* after-line: Point is after normal line
* dedenter-statement: Point is on a dedenter statement.
* no-indent: Point is at beginning of buffer or other special case
START is the buffer position where the sexp starts."
keyword
-------
:after-comment
- Point is after a comment line.
- START is the position of the \"#\" character.
:inside-string
- Point is inside string.
- START is the position of the first quote that starts it.
:no-indent
- No possible indentation case matches.
- START is always zero.
:inside-paren
- Fallback case when point is inside paren.
- START is the first non space char position *after* the open paren.
:inside-paren-at-closing-nested-paren
- Point is on a line that contains a nested paren closer.
- START is the position of the open paren it closes.
:inside-paren-at-closing-paren
- Point is on a line that contains a paren closer.
- START is the position of the open paren.
:inside-paren-newline-start
- Point is inside a paren with items starting in their own line.
- START is the position of the open paren.
:inside-paren-newline-start-from-block
- Point is inside a paren with items starting in their own line
from a block start.
- START is the position of the open paren.
:after-backslash
- Fallback case when point is after backslash.
- START is the char after the position of the backslash.
:after-backslash-assignment-continuation
- Point is after a backslashed assignment.
- START is the char after the position of the backslash.
:after-backslash-block-continuation
- Point is after a backslashed block continuation.
- START is the char after the position of the backslash.
:after-backslash-dotted-continuation
- Point is after a backslashed dotted continuation. Previous
line must contain a dot to align with.
- START is the char after the position of the backslash.
:after-backslash-first-line
- First line following a backslashed continuation.
- START is the char after the position of the backslash.
:after-block-end
- Point is after a line containing a block ender.
- START is the position where the ender starts.
:after-block-start
- Point is after a line starting a block.
- START is the position where the block starts.
:after-line
- Point is after a simple line.
- START is the position where the previous line starts.
:at-dedenter-block-start
- Point is on a line starting a dedenter block.
- START is the position where the dedenter block starts."
(save-restriction
(widen)
(let ((ppss (save-excursion (beginning-of-line) (syntax-ppss)))
(start))
(cons
(cond
;; Beginning of buffer
((save-excursion
(goto-char (line-beginning-position))
(bobp))
'no-indent)
;; Comment continuation
((save-excursion
(when (and
(or
(python-info-current-line-comment-p)
(python-info-current-line-empty-p))
(progn
(forward-comment -1)
(python-info-current-line-comment-p)))
(setq start (point))
'after-comment)))
;; Inside string
((setq start (python-syntax-context 'string ppss))
'inside-string)
;; Inside a paren
((setq start (python-syntax-context 'paren ppss))
'inside-paren)
;; After backslash
((setq start (when (not (or (python-syntax-context 'string ppss)
(python-syntax-context 'comment ppss)))
(let ((line-beg-pos (line-number-at-pos)))
(python-info-line-ends-backslash-p
(1- line-beg-pos)))))
'after-backslash)
;; After beginning of block
((setq start (save-excursion
(when (progn
(back-to-indentation)
(python-util-forward-comment -1)
(equal (char-before) ?:))
;; Move to the first block start that's not in within
;; a string, comment or paren and that's not a
;; continuation line.
(while (and (re-search-backward
(python-rx block-start) nil t)
(or
(python-syntax-context-type)
(python-info-continuation-line-p))))
(when (looking-at (python-rx block-start))
(point-marker)))))
'after-beginning-of-block)
((when (setq start (python-info-dedenter-statement-p))
'dedenter-statement))
;; After normal line
((setq start (save-excursion
(let ((ppss (save-excursion
(beginning-of-line)
(syntax-ppss))))
(cond
;; Beginning of buffer.
((= (line-number-at-pos) 1)
(cons :no-indent 0))
;; Comment continuation (maybe).
((save-excursion
(when (and
(or
(python-info-current-line-comment-p)
(python-info-current-line-empty-p))
(forward-comment -1)
(python-info-current-line-comment-p))
(cons :after-comment (point)))))
;; Inside a string.
((let ((start (python-syntax-context 'string ppss)))
(when start
(cons :inside-string start))))
;; Inside a paren.
((let* ((start (python-syntax-context 'paren ppss))
(starts-in-newline
(when start
(save-excursion
(goto-char start)
(forward-char)
(not
(= (line-number-at-pos)
(progn
(python-util-forward-comment)
(line-number-at-pos))))))))
(when start
(cond
;; Current line only holds the closing paren.
((save-excursion
(skip-syntax-forward " ")
(when (and (python-syntax-closing-paren-p)
(progn
(forward-char 1)
(not (python-syntax-context 'paren))))
(cons :inside-paren-at-closing-paren start))))
;; Current line only holds a closing paren for nested.
((save-excursion
(back-to-indentation)
(python-syntax-closing-paren-p))
(cons :inside-paren-at-closing-nested-paren start))
;; This line starts from a opening block in its own line.
((save-excursion
(goto-char start)
(when (and
starts-in-newline
(save-excursion
(back-to-indentation)
(looking-at (python-rx block-start))))
(cons
:inside-paren-newline-start-from-block start))))
(starts-in-newline
(cons :inside-paren-newline-start start))
;; General case.
(t (cons :inside-paren
(save-excursion
(goto-char (1+ start))
(skip-syntax-forward "(" 1)
(skip-syntax-forward " ")
(point))))))))
;; After backslash.
((let ((start (when (not (python-syntax-comment-or-string-p ppss))
(python-info-line-ends-backslash-p
(1- (line-number-at-pos))))))
(when start
(cond
;; Continuation of dotted expression.
((save-excursion
(back-to-indentation)
(when (eq (char-after) ?\.)
;; Move point back until it's not inside a paren.
(while (prog2
(forward-line -1)
(and (not (bobp))
(python-syntax-context 'paren))))
(goto-char (line-end-position))
(while (and (search-backward
"." (line-beginning-position) t)
(python-syntax-context-type)))
;; Ensure previous statement has dot to align with.
(when (and (eq (char-after) ?\.)
(not (python-syntax-context-type)))
(cons :after-backslash-dotted-continuation (point))))))
;; Continuation of block definition.
((let ((block-continuation-start
(python-info-block-continuation-line-p)))
(when block-continuation-start
(save-excursion
(goto-char block-continuation-start)
(re-search-forward
(python-rx block-start (* space))
(line-end-position) t)
(cons :after-backslash-block-continuation (point))))))
;; Continuation of assignment.
((let ((assignment-continuation-start
(python-info-assignment-continuation-line-p)))
(when assignment-continuation-start
(save-excursion
(goto-char assignment-continuation-start)
(cons :after-backslash-assignment-continuation (point))))))
;; First line after backslash continuation start.
((save-excursion
(goto-char start)
(when (or (= (line-number-at-pos) 1)
(not (python-info-beginning-of-backslash
(1- (line-number-at-pos)))))
(cons :after-backslash-first-line start))))
;; General case.
(t (cons :after-backslash start))))))
;; After beginning of block.
((let ((start (save-excursion
(back-to-indentation)
(skip-chars-backward (rx (or whitespace ?\n)))
(python-util-forward-comment -1)
(when (equal (char-before) ?:)
(python-nav-beginning-of-block)))))
(when start
(cons :after-block-start start))))
;; At dedenter statement.
((let ((start (python-info-dedenter-statement-p)))
(when start
(cons :at-dedenter-block-start start))))
;; After normal line.
((let ((start (save-excursion
(back-to-indentation)
(skip-chars-backward " \t\n")
(python-nav-beginning-of-statement)
(point-marker)))
'after-line)
;; Do not indent
(t 'no-indent))
start))))
(point))))
(when start
(if (save-excursion
(python-util-forward-comment -1)
(python-nav-beginning-of-statement)
(looking-at (python-rx block-ender)))
(cons :after-block-end start)
(cons :after-line start)))))
;; Default case: do not indent.
(t (cons :no-indent 0))))))
(defun python-indent-calculate-indentation ()
"Calculate correct indentation offset for the current line.
Returns `noindent' if the indentation does not depend on Python syntax,
such as in strings."
(let* ((indentation-context (python-indent-context))
(context-status (car indentation-context))
(context-start (cdr indentation-context)))
(save-restriction
(widen)
(save-excursion
(pcase context-status
(`no-indent 0)
(`after-comment
(goto-char context-start)
(current-indentation))
;; When point is after beginning of block just add one level
;; of indentation relative to the context-start
(`after-beginning-of-block
(goto-char context-start)
(+ (current-indentation) python-indent-offset))
;; When after a simple line just use previous line
;; indentation.
(`after-line
(let* ((pair (save-excursion
(goto-char context-start)
(cons
(current-indentation)
(python-info-beginning-of-block-p))))
(context-indentation (car pair))
;; TODO: Separate block enders into its own case.
(adjustment
(if (save-excursion
(python-util-forward-comment -1)
(python-nav-beginning-of-statement)
(looking-at (python-rx block-ender)))
python-indent-offset
0)))
(- context-indentation adjustment)))
;; When point is on a dedenter statement, search for the
;; opening block that corresponds to it and use its
;; indentation. If no opening block is found just remove
;; indentation as this is an invalid python file.
(`dedenter-statement
(let ((block-start-point
(python-info-dedenter-opening-block-position)))
(save-excursion
(if (not block-start-point)
0
(goto-char block-start-point)
(current-indentation)))))
;; When inside of a string, do nothing. just use the current
;; indentation. XXX: perhaps it would be a good idea to
;; invoke standard text indentation here
(`inside-string 'noindent)
;; After backslash we have several possibilities.
(`after-backslash
(cond
;; Check if current line is a dot continuation. For this
;; the current line must start with a dot and previous
;; line must contain a dot too.
((save-excursion
(back-to-indentation)
(when (looking-at "\\.")
;; If after moving one line back point is inside a paren it
;; needs to move back until it's not anymore
(while (prog2
(forward-line -1)
(and (not (bobp))
(python-syntax-context 'paren))))
(goto-char (line-end-position))
(while (and (re-search-backward
"\\." (line-beginning-position) t)
(python-syntax-context-type)))
(if (and (looking-at "\\.")
(not (python-syntax-context-type)))
;; The indentation is the same column of the
;; first matching dot that's not inside a
;; comment, a string or a paren
(current-column)
;; No dot found on previous line, just add another
;; indentation level.
(+ (current-indentation) python-indent-offset)))))
;; Check if prev line is a block continuation
((let ((block-continuation-start
(python-info-block-continuation-line-p)))
(when block-continuation-start
;; If block-continuation-start is set jump to that
;; marker and use first column after the block start
;; as indentation value.
(goto-char block-continuation-start)
(re-search-forward
(python-rx block-start (* space))
(line-end-position) t)
(current-column))))
;; Check if current line is an assignment continuation
((let ((assignment-continuation-start
(python-info-assignment-continuation-line-p)))
(when assignment-continuation-start
;; If assignment-continuation is set jump to that
;; marker and use first column after the assignment
;; operator as indentation value.
(goto-char assignment-continuation-start)
(current-column))))
(t
(forward-line -1)
(goto-char (python-info-beginning-of-backslash))
(if (save-excursion
(and
(forward-line -1)
(goto-char
(or (python-info-beginning-of-backslash) (point)))
(python-info-line-ends-backslash-p)))
;; The two previous lines ended in a backslash so we must
;; respect previous line indentation.
(current-indentation)
;; What happens here is that we are dealing with the second
;; line of a backslash continuation, in that case we just going
;; to add one indentation level.
(+ (current-indentation) python-indent-offset)))))
;; When inside a paren there's a need to handle nesting
;; correctly
(`inside-paren
(cond
;; If current line closes the outermost open paren use the
;; current indentation of the context-start line.
((save-excursion
(skip-syntax-forward "\s" (line-end-position))
(when (and (looking-at (regexp-opt '(")" "]" "}")))
(progn
(forward-char 1)
(not (python-syntax-context 'paren))))
(goto-char context-start)
(current-indentation))))
;; If open paren is contained on a line by itself add another
;; indentation level, else look for the first word after the
;; opening paren and use it's column position as indentation
;; level.
((let* ((content-starts-in-newline)
(indent
(save-excursion
(if (setq content-starts-in-newline
(progn
(goto-char context-start)
(forward-char)
(save-restriction
(narrow-to-region
(line-beginning-position)
(line-end-position))
(python-util-forward-comment))
(looking-at "$")))
(+ (current-indentation) python-indent-offset)
(current-column)))))
;; Adjustments
(cond
;; If current line closes a nested open paren de-indent one
;; level.
((progn
(back-to-indentation)
(looking-at (regexp-opt '(")" "]" "}"))))
(- indent python-indent-offset))
;; If the line of the opening paren that wraps the current
;; line starts a block add another level of indentation to
;; follow new pep8 recommendation. See: http://ur1.ca/5rojx
((save-excursion
(when (and content-starts-in-newline
(progn
(goto-char context-start)
(back-to-indentation)
(looking-at (python-rx block-start))))
(+ indent python-indent-offset))))
(t indent)))))))))))
(defun python-indent--calculate-indentation ()
"Internal implementation of `python-indent-calculate-indentation'.
May return an integer for the maximum possible indentation at
current context or a list of integers. The latter case is only
happening for :at-dedenter-block-start context since the
possibilities can be narrowed to especific indentation points."
(save-restriction
(widen)
(save-excursion
(pcase (python-indent-context)
(`(:no-indent . ,_) 0)
(`(,(or :after-line
:after-comment
:inside-string
:after-backslash
:inside-paren-at-closing-paren
:inside-paren-at-closing-nested-paren) . ,start)
;; Copy previous indentation.
(goto-char start)
(current-indentation))
(`(,(or :after-block-start
:after-backslash-first-line
:inside-paren-newline-start) . ,start)
;; Add one indentation level.
(goto-char start)
(+ (current-indentation) python-indent-offset))
(`(,(or :inside-paren
:after-backslash-block-continuation
:after-backslash-assignment-continuation
:after-backslash-dotted-continuation) . ,start)
;; Use the column given by the context.
(goto-char start)
(current-column))
(`(:after-block-end . ,start)
;; Subtract one indentation level.
(goto-char start)
(- (current-indentation) python-indent-offset))
(`(:at-dedenter-block-start . ,_)
;; List all possible indentation levels from opening blocks.
(let ((opening-block-start-points
(python-info-dedenter-opening-block-positions)))
(if (not opening-block-start-points)
0 ; if not found default to first column
(mapcar (lambda (pos)
(save-excursion
(goto-char pos)
(current-indentation)))
opening-block-start-points))))
(`(,(or :inside-paren-newline-start-from-block) . ,start)
;; Add two indentation levels to make the suite stand out.
(goto-char start)
(+ (current-indentation) (* python-indent-offset 2)))))))
(defun python-indent--calculate-levels (indentation)
"Calculate levels list given INDENTATION.
Argument INDENTATION can either be an integer or a list of
integers. Levels are returned in ascending order, and in the
case INDENTATION is a list, this order is enforced."
(if (listp indentation)
(sort (copy-sequence indentation) #'<)
(let* ((remainder (% indentation python-indent-offset))
(steps (/ (- indentation remainder) python-indent-offset))
(levels (mapcar (lambda (step)
(* python-indent-offset step))
(number-sequence steps 0 -1))))
(reverse
(if (not (zerop remainder))
(cons indentation levels)
levels)))))
(defun python-indent--previous-level (levels indentation)
"Return previous level from LEVELS relative to INDENTATION."
(let* ((levels (sort (copy-sequence levels) #'>))
(default (car levels)))
(catch 'return
(dolist (level levels)
(when (funcall #'< level indentation)
(throw 'return level)))
default)))
(defun python-indent-calculate-indentation (&optional previous)
"Calculate indentation.
Get indentation of PREVIOUS level when argument is non-nil.
Return the max level of the cycle when indentation reaches the
minimum."
(let* ((indentation (python-indent--calculate-indentation))
(levels (python-indent--calculate-levels indentation)))
(if previous
(python-indent--previous-level levels (current-indentation))
(apply #'max levels))))
(defun python-indent-line (&optional previous)
"Internal implementation of `python-indent-line-function'.
Use the PREVIOUS level when argument is non-nil, otherwise indent
to the maxium available level. When indentation is the minimum
possible and PREVIOUS is non-nil, cycle back to the maximum
level."
(let ((follow-indentation-p
;; Check if point is within indentation.
(and (<= (line-beginning-position) (point))
(>= (+ (line-beginning-position)
(current-indentation))
(point)))))
(save-excursion
(indent-line-to
(python-indent-calculate-indentation previous))
(python-info-dedenter-opening-block-message))
(when follow-indentation-p
(back-to-indentation))))
(defun python-indent-calculate-levels ()
"Calculate `python-indent-levels' and reset `python-indent-current-level'."
(if (or (python-info-continuation-line-p)
(not (python-info-dedenter-statement-p)))
;; XXX: This asks for a refactor. Even if point is on a
;; dedenter statement, it could be multiline and in that case
;; the continuation lines should be indented with normal rules.
(let* ((indentation (python-indent-calculate-indentation)))
(if (not (numberp indentation))
(setq python-indent-levels indentation)
(let* ((remainder (% indentation python-indent-offset))
(steps (/ (- indentation remainder) python-indent-offset)))
(setq python-indent-levels (list 0))
(dotimes (step steps)
(push (* python-indent-offset (1+ step)) python-indent-levels))
(when (not (eq 0 remainder))
(push (+ (* python-indent-offset steps) remainder)
python-indent-levels)))))
(setq python-indent-levels
(or
(mapcar (lambda (pos)
(save-excursion
(goto-char pos)
(current-indentation)))
(python-info-dedenter-opening-block-positions))
(list 0))))
(when (listp python-indent-levels)
(setq python-indent-current-level (1- (length python-indent-levels))
python-indent-levels (nreverse python-indent-levels))))
(defun python-indent-toggle-levels ()
"Toggle `python-indent-current-level' over `python-indent-levels'."
(setq python-indent-current-level (1- python-indent-current-level))
(when (< python-indent-current-level 0)
(setq python-indent-current-level (1- (length python-indent-levels)))))
(defun python-indent-line (&optional force-toggle)
"Internal implementation of `python-indent-line-function'.
Uses the offset calculated in
`python-indent-calculate-indentation' and available levels
indicated by the variable `python-indent-levels' to set the
current indentation.
When the variable `last-command' is equal to one of the symbols
inside `python-indent-trigger-commands' or FORCE-TOGGLE is
non-nil it cycles levels indicated in the variable
`python-indent-levels' by setting the current level in the
variable `python-indent-current-level'.
When the variable `last-command' is not equal to one of the
symbols inside `python-indent-trigger-commands' and FORCE-TOGGLE
is nil it calculates possible indentation levels and saves them
in the variable `python-indent-levels'. Afterwards it sets the
variable `python-indent-current-level' correctly so offset is
equal to
(nth python-indent-current-level python-indent-levels)"
(if (and (or (and (memq this-command python-indent-trigger-commands)
(eq last-command this-command))
force-toggle)
(not (equal python-indent-levels '(0))))
(if (listp python-indent-levels)
(python-indent-toggle-levels))
(python-indent-calculate-levels))
(if (eq python-indent-levels 'noindent)
python-indent-levels
(let* ((starting-pos (point-marker))
(indent-ending-position
(+ (line-beginning-position) (current-indentation)))
(follow-indentation-p
(or (bolp)
(and (<= (line-beginning-position) starting-pos)
(>= indent-ending-position starting-pos))))
(next-indent (nth python-indent-current-level python-indent-levels)))
(unless (= next-indent (current-indentation))
(beginning-of-line)
(delete-horizontal-space)
(indent-to next-indent)
(goto-char starting-pos))
(and follow-indentation-p (back-to-indentation)))
(python-info-dedenter-opening-block-message)))
"Return possible indentation levels."
(python-indent--calculate-levels
(python-indent--calculate-indentation)))
(defun python-indent-line-function ()
"`indent-line-function' for Python mode.
See `python-indent-line' for details."
(python-indent-line))
When the variable `last-command' is equal to one of the symbols
inside `python-indent-trigger-commands' it cycles possible
indentation levels from right to left."
(python-indent-line
(and (memq this-command python-indent-trigger-commands)
(eq last-command this-command))))
(defun python-indent-dedent-line ()
"De-indent current line."
(interactive "*")
(when (and (not (python-syntax-comment-or-string-p))
(<= (point) (save-excursion
(back-to-indentation)
(point)))
(> (current-column) 0))
(python-indent-line t)
t))
(when (and (not (bolp))
(not (python-syntax-comment-or-string-p))
(= (+ (line-beginning-position)
(current-indentation))
(point)))
(python-indent-line t)
t))
(defun python-indent-dedent-line-backspace (arg)
"De-indent current line.
Argument ARG is passed to `backward-delete-char-untabify' when
point is not in between the indentation."
(interactive "*p")
(when (not (python-indent-dedent-line))
(unless (python-indent-dedent-line)
(backward-delete-char-untabify arg)))
(put 'python-indent-dedent-line-backspace 'delete-selection 'supersede)
(defun python-indent-region (start end)

View file

@ -1,7 +1,6 @@
;;; sh-script.el --- shell-script editing commands for Emacs -*- lexical-binding:t -*-
;; Copyright (C) 1993-1997, 1999, 2001-2015 Free Software Foundation,
;; Inc.
;; Copyright (C) 1993-1997, 1999, 2001-2015 Free Software Foundation, Inc.
;; Author: Daniel Pfeiffer <occitan@esperanto.org>
;; Version: 2.0f
@ -1599,7 +1598,6 @@ buffer indents as it currently is indented.
\\[backward-delete-char-untabify] Delete backward one position, even if it was a tab.
\\[newline-and-indent] Delete unquoted space and indent new line same as this one.
\\[sh-end-of-command] Go to end of successive commands.
\\[sh-beginning-of-command] Go to beginning of successive commands.
\\[sh-set-shell] Set this buffer's shell, and maybe its magic number.
@ -2501,7 +2499,8 @@ Lines containing only comments are considered empty."
(current-column)))
current)
(save-excursion
(indent-to (if (eq this-command 'newline-and-indent)
(indent-to (if (or (eq this-command 'newline-and-indent)
(and electric-indent-mode (eq this-command 'newline)))
previous
(if (< (current-column)
(setq current (progn (back-to-indentation)

View file

@ -1082,7 +1082,12 @@ The return value is a positive integer."
;;;; Extracting fields of the positions in an event.
(defun posnp (obj)
"Return non-nil if OBJ appears to be a valid `posn' object."
"Return non-nil if OBJ appears to be a valid `posn' object specifying a window.
If OBJ is a valid `posn' object, but specifies a frame rather
than a window, return nil."
;; FIXME: Correct the behavior of this function so that all valid
;; `posn' objects are recognized, after updating other code that
;; depends on its present behavior.
(and (windowp (car-safe obj))
(atom (car-safe (setq obj (cdr obj)))) ;AREA-OR-POS.
(integerp (car-safe (car-safe (setq obj (cdr obj))))) ;XOFFSET.
@ -1142,24 +1147,28 @@ For a scroll-bar event, the result column is 0, and the row
corresponds to the vertical position of the click in the scroll bar.
POSITION should be a list of the form returned by the `event-start'
and `event-end' functions."
(let* ((pair (posn-x-y position))
(window (posn-window position))
(area (posn-area position)))
(let* ((pair (posn-x-y position))
(frame-or-window (posn-window position))
(frame (if (framep frame-or-window)
frame-or-window
(window-frame frame-or-window)))
(window (when (windowp frame-or-window) frame-or-window))
(area (posn-area position)))
(cond
((null window)
((null frame-or-window)
'(0 . 0))
((eq area 'vertical-scroll-bar)
(cons 0 (scroll-bar-scale pair (1- (window-height window)))))
((eq area 'horizontal-scroll-bar)
(cons (scroll-bar-scale pair (window-width window)) 0))
(t
(let* ((frame (if (framep window) window (window-frame window)))
;; FIXME: This should take line-spacing properties on
;; newlines into account.
(spacing (when (display-graphic-p frame)
(or (with-current-buffer (window-buffer window)
line-spacing)
(frame-parameter frame 'line-spacing)))))
;; FIXME: This should take line-spacing properties on
;; newlines into account.
(let* ((spacing (when (display-graphic-p frame)
(or (with-current-buffer
(window-buffer (frame-selected-window frame))
line-spacing)
(frame-parameter frame 'line-spacing)))))
(cond ((floatp spacing)
(setq spacing (truncate (* spacing
(frame-char-height frame)))))

View file

@ -50,9 +50,6 @@
;;
;; o chmod should understand "a+x,og-w".
;;
;; o It's not possible to add a NEW file to a tar archive; not that
;; important, but still...
;;
;; o The code is less efficient that it could be - in a lot of places, I
;; pull a 512-character string out of the buffer and parse it, when I could
;; be parsing it in place, not garbaging a string. Should redo that.
@ -369,6 +366,80 @@ write-date, checksum, link-type, and link-name."
string)
(tar-parse-octal-integer string))
(defun tar-new-regular-file-header (filename &optional size time)
"Return a Tar header for a regular file.
The header will lack a proper checksum; use `tar-header-block-checksum'
to compute one, or request `tar-header-serialize' to do that.
Other tar-mode facilities may also require the data-start header
field to be set to a valid value.
If SIZE is not given or nil, it defaults to 0.
If TIME is not given or nil, assume now."
(make-tar-header
nil
filename
#o644 0 0 (or size 0)
(or time (current-time))
nil ; checksum
nil nil
nil nil nil nil nil))
(defun tar--pad-to (pos)
(make-string (+ pos (- (point)) (point-min)) 0))
(defun tar--put-at (pos val &optional fmt mask)
(when val
(insert (tar--pad-to pos)
(if fmt
(format fmt (if mask (logand mask val) val))
val))))
(defun tar-header-serialize (header &optional update-checksum)
"Return the serialization of a Tar HEADER as a string.
This function calls `tar-header-block-check-checksum' to ensure the
checksum is correct.
If UPDATE-CHECKSUM is non-nil, update HEADER with the newly-computed
checksum before doing the check."
(with-temp-buffer
(set-buffer-multibyte nil)
(let ((encoded-name
(encode-coding-string (tar-header-name header)
tar-file-name-coding-system)))
(unless (< (length encoded-name) 99)
;; FIXME: Implement it.
(error "Long file name support is not implemented"))
(insert encoded-name))
(tar--put-at tar-mode-offset (tar-header-mode header) "%6o\0 " #o777777)
(tar--put-at tar-uid-offset (tar-header-uid header) "%6o\0 " #o777777)
(tar--put-at tar-gid-offset (tar-header-gid header) "%6o\0 " #o777777)
(tar--put-at tar-size-offset (tar-header-size header) "%11o ")
(insert (tar--pad-to tar-time-offset)
(tar-octal-time (tar-header-date header))
" ")
;; Omit tar-header-checksum (tar-chk-offset) for now.
(tar--put-at tar-linkp-offset (tar-header-link-type header))
(tar--put-at tar-link-offset (tar-header-link-name header))
(when (tar-header-magic header)
(tar--put-at tar-magic-offset (tar-header-magic header))
(tar--put-at tar-uname-offset (tar-header-uname header))
(tar--put-at tar-gname-offset (tar-header-gname header))
(tar--put-at tar-dmaj-offset (tar-header-dmaj header) "%7o\0" #o7777777)
(tar--put-at tar-dmin-offset (tar-header-dmin header) "%7o\0" #o7777777))
(tar--put-at 512 "")
(let ((ck (tar-header-block-checksum (buffer-string))))
(goto-char (+ (point-min) tar-chk-offset))
(delete-char 8)
(insert (format "%6o\0 " ck))
(when update-checksum
(setf (tar-header-checksum header) ck))
(tar-header-block-check-checksum (buffer-string)
(tar-header-checksum header)
(tar-header-name header)))
;; .
(buffer-string)))
(defun tar-header-block-checksum (string)
"Compute and return a tar-acceptable checksum for this block."
@ -547,6 +618,7 @@ MODE should be an integer which is a file mode value."
(define-key map "p" 'tar-previous-line)
(define-key map "\^P" 'tar-previous-line)
(define-key map [up] 'tar-previous-line)
(define-key map "I" 'tar-new-entry)
(define-key map "R" 'tar-rename-entry)
(define-key map "u" 'tar-unflag)
(define-key map "v" 'tar-view)
@ -731,10 +803,14 @@ tar-file's buffer."
(interactive "p")
(tar-next-line (- arg)))
(defun tar-current-position ()
"Return the `tar-parse-info' index for the current line."
(count-lines (point-min) (line-beginning-position)))
(defun tar-current-descriptor (&optional noerror)
"Return the tar-descriptor of the current line, or signals an error."
;; I wish lines had plists, like in ZMACS...
(or (nth (count-lines (point-min) (line-beginning-position))
(or (nth (tar-current-position)
tar-parse-info)
(if noerror
nil
@ -948,6 +1024,37 @@ the current tar-entry."
(write-region start end to-file nil nil nil t)))
(message "Copied tar entry %s to %s" name to-file)))
(defun tar-new-entry (filename &optional index)
"Insert a new empty regular file before point."
(interactive "*sFile name: ")
(let* ((buffer (current-buffer))
(index (or index (tar-current-position)))
(d-list (and (not (zerop index))
(nthcdr (+ -1 index) tar-parse-info)))
(pos (if d-list
(tar-header-data-end (car d-list))
(point-min)))
(new-descriptor
(tar-new-regular-file-header filename)))
;; Update the data buffer; fill the missing descriptor fields.
(with-current-buffer tar-data-buffer
(goto-char pos)
(insert (tar-header-serialize new-descriptor t))
(setf (tar-header-data-start new-descriptor)
(copy-marker (point) nil)))
;; Update tar-parse-info.
(if d-list
(setcdr d-list (cons new-descriptor (cdr d-list)))
(setq tar-parse-info (cons new-descriptor tar-parse-info)))
;; Update the listing buffer.
(save-excursion
(goto-char (point-min))
(forward-line index)
(let ((inhibit-read-only t))
(insert (tar-header-block-summarize new-descriptor) ?\n)))
;; .
index))
(defun tar-flag-deleted (p &optional unflag)
"In Tar mode, mark this sub-file to be deleted from the tar file.
With a prefix argument, mark that many files."

View file

@ -4963,52 +4963,55 @@ The event, EV, is the mouse event."
(artist-funcall init-fn x1 y1)
(if (not artist-rubber-banding)
(artist-no-rb-set-point1 x1 y1))
(track-mouse
(while (or (mouse-movement-p ev)
(member 'down (event-modifiers ev)))
(setq ev-start-pos (artist-coord-win-to-buf
(posn-col-row (event-start ev))))
(setq x1 (car ev-start-pos))
(setq y1 (cdr ev-start-pos))
(unwind-protect
(track-mouse
(while (or (mouse-movement-p ev)
(member 'down (event-modifiers ev)))
(setq ev-start-pos (artist-coord-win-to-buf
(posn-col-row (event-start ev))))
(setq x1 (car ev-start-pos))
(setq y1 (cdr ev-start-pos))
;; Cancel previous timer
(if timer
(cancel-timer timer))
;; Cancel previous timer
(if timer
(cancel-timer timer))
(if (not (eq initial-win (posn-window (event-start ev))))
;; If we moved outside the window, do nothing
nil
(if (not (eq initial-win (posn-window (event-start ev))))
;; If we moved outside the window, do nothing
nil
;; Still in same window:
;;
;; Check if user presses or releases shift key
(if (artist-shift-has-changed shift-state ev)
;; Still in same window:
;;
;; Check if user presses or releases shift key
(if (artist-shift-has-changed shift-state ev)
;; First check that the draw-how is the same as we
;; already have. Otherwise, ignore the changed shift-state.
(if (not (eq draw-how
(artist-go-get-draw-how-from-symbol
(if (not shift-state) shifted unshifted))))
(message "Cannot switch to shifted operation")
;; First check that the draw-how is the same as we
;; already have. Otherwise, ignore the changed shift-state.
(if (not (eq draw-how
(artist-go-get-draw-how-from-symbol
(if (not shift-state) shifted unshifted))))
(message "Cannot switch to shifted operation")
;; progn is "implicit" since this is the else-part
(setq shift-state (not shift-state))
(setq op (if shift-state shifted unshifted))
(setq draw-how (artist-go-get-draw-how-from-symbol op))
(setq draw-fn (artist-go-get-draw-fn-from-symbol op))))
;; progn is "implicit" since this is the else-part
(setq shift-state (not shift-state))
(setq op (if shift-state shifted unshifted))
(setq draw-how (artist-go-get-draw-how-from-symbol op))
(setq draw-fn (artist-go-get-draw-fn-from-symbol op))))
;; Draw the new shape
(setq shape (artist-funcall draw-fn x1 y1))
(artist-move-to-xy x1 y1)
;; Draw the new shape
(setq shape (artist-funcall draw-fn x1 y1))
(artist-move-to-xy x1 y1)
;; Start the timer to call `draw-fn' repeatedly every
;; `interval' second
(if (and interval draw-fn)
(setq timer (run-at-time interval interval draw-fn x1 y1))))
;; Read next event
(setq ev (read-event))))
;; Start the timer to call `draw-fn' repeatedly every
;; `interval' second
(if (and interval draw-fn)
(setq timer (run-at-time interval interval draw-fn x1 y1))))
;; Read next event
(setq ev (read-event))))
;; Cleanup: get rid of any active timer.
(if timer
(cancel-timer timer)))
;; Cancel any timers
(if timer
(cancel-timer timer))

View file

@ -106,17 +106,21 @@
(defvar reftex-syntax-table nil)
(defvar reftex-syntax-table-for-bib nil)
(unless reftex-syntax-table
(defun reftex--prepare-syntax-tables ()
(setq reftex-syntax-table (copy-syntax-table))
(modify-syntax-entry ?\( "." reftex-syntax-table)
(modify-syntax-entry ?\) "." reftex-syntax-table))
(modify-syntax-entry ?\) "." reftex-syntax-table)
(unless reftex-syntax-table-for-bib
(setq reftex-syntax-table-for-bib (copy-syntax-table))
(modify-syntax-entry ?\' "." reftex-syntax-table-for-bib)
(modify-syntax-entry ?\" "." reftex-syntax-table-for-bib)
(modify-syntax-entry ?\[ "." reftex-syntax-table-for-bib)
(modify-syntax-entry ?\] "." reftex-syntax-table-for-bib))
(modify-syntax-entry ?\] "." reftex-syntax-table-for-bib)
(modify-syntax-entry ?\( "." reftex-syntax-table-for-bib)
(modify-syntax-entry ?\) "." reftex-syntax-table-for-bib))
(unless (and reftex-syntax-table reftex-syntax-table-for-bib)
(reftex--prepare-syntax-tables))
;; The following definitions are out of place, but I need them here
;; to make the compilation of reftex-mode not complain.
@ -180,15 +184,7 @@ on the menu bar.
(put 'reftex-auto-recenter-toc 'initialized t))
;; Prepare the special syntax tables.
(setq reftex-syntax-table (copy-syntax-table (syntax-table)))
(modify-syntax-entry ?\( "." reftex-syntax-table)
(modify-syntax-entry ?\) "." reftex-syntax-table)
(setq reftex-syntax-table-for-bib (copy-syntax-table))
(modify-syntax-entry ?\' "." reftex-syntax-table-for-bib)
(modify-syntax-entry ?\" "." reftex-syntax-table-for-bib)
(modify-syntax-entry ?\[ "." reftex-syntax-table-for-bib)
(modify-syntax-entry ?\] "." reftex-syntax-table-for-bib)
(reftex--prepare-syntax-tables)
(run-hooks 'reftex-mode-hook))
;; Mode was turned off

View file

@ -2,7 +2,7 @@
# Copyright (C) 2000-2001, 2003-2007, 2009-2015 Free Software Foundation, Inc.
# serial 8
# serial 9
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@ -26,7 +26,7 @@ AC_DEFUN([gl_HEADER_TIME_H_BODY],
])
dnl Check whether 'struct timespec' is declared
dnl in time.h, sys/time.h, or pthread.h.
dnl in time.h, sys/time.h, pthread.h, or unistd.h.
AC_DEFUN([gl_CHECK_TYPE_STRUCT_TIMESPEC],
[
@ -44,6 +44,7 @@ AC_DEFUN([gl_CHECK_TYPE_STRUCT_TIMESPEC],
TIME_H_DEFINES_STRUCT_TIMESPEC=0
SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=0
PTHREAD_H_DEFINES_STRUCT_TIMESPEC=0
UNISTD_H_DEFINES_STRUCT_TIMESPEC=0
if test $gl_cv_sys_struct_timespec_in_time_h = yes; then
TIME_H_DEFINES_STRUCT_TIMESPEC=1
else
@ -70,12 +71,26 @@ AC_DEFUN([gl_CHECK_TYPE_STRUCT_TIMESPEC],
[gl_cv_sys_struct_timespec_in_pthread_h=no])])
if test $gl_cv_sys_struct_timespec_in_pthread_h = yes; then
PTHREAD_H_DEFINES_STRUCT_TIMESPEC=1
else
AC_CACHE_CHECK([for struct timespec in <unistd.h>],
[gl_cv_sys_struct_timespec_in_unistd_h],
[AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM(
[[#include <unistd.h>
]],
[[static struct timespec x; x.tv_sec = x.tv_nsec;]])],
[gl_cv_sys_struct_timespec_in_unistd_h=yes],
[gl_cv_sys_struct_timespec_in_unistd_h=no])])
if test $gl_cv_sys_struct_timespec_in_unistd_h = yes; then
UNISTD_H_DEFINES_STRUCT_TIMESPEC=1
fi
fi
fi
fi
AC_SUBST([TIME_H_DEFINES_STRUCT_TIMESPEC])
AC_SUBST([SYS_TIME_H_DEFINES_STRUCT_TIMESPEC])
AC_SUBST([PTHREAD_H_DEFINES_STRUCT_TIMESPEC])
AC_SUBST([UNISTD_H_DEFINES_STRUCT_TIMESPEC])
])
AC_DEFUN([gl_TIME_MODULE_INDICATOR],

View file

@ -1,3 +1,143 @@
2015-01-31 Eli Zaretskii <eliz@gnu.org>
* coding.c (raw_text_coding_system_p): New function.
* keyboard.c (read_decoded_event_from_main_queue): Use it when the
keyboard coding-system is 'raw-text'. (Bug#19532)
* coding.h (raw_text_coding_system_p): Add prototype.
2015-01-31 Andreas Schwab <schwab@linux-m68k.org>
* Makefile.in (gl-stamp): Generate globals.h through the use of
move-if-change.
(globals.h): Replace with empty command.
2015-01-31 Eli Zaretskii <eliz@gnu.org>
* keyboard.c (kbd_buffer_store_event_hold): Ignore FOCUS_OUT_EVENT
and ICONIFY_EVENT for the purposes of breaking while-no-input
loops. (Bug#19547)
* dired.c (read_dirent): Correct the "MSDOS hacks" hack: the
special code for errno = ENOENT or EACCES is needed for WINDOWSNT,
not for MSDOS.
2015-01-31 Paul Eggert <eggert@cs.ucla.edu>
Simplify read_dirent's MSDOS hacks
* dired.c (read_dirent): Simplify by removing the need for the
DIR_ENTRY argument. All callers changed. This separates the
MS-DOS idiosyncrasies better from the rest of the code.
2015-01-30 Eli Zaretskii <eliz@gnu.org>
* dired.c (read_dirent): Accept an additional argument
FIRST_ENTRY. If readdir fails with ENOENT or EACCES the first
time it is called, report the error as if it happened in
open_directory.
(directory_files_internal, file_name_completion): Adjust callers
or read_dirent.
2015-01-30 Paul Eggert <eggert@cs.ucla.edu>
Refactor calls to opendir for simplicity
* dired.c (open_directory): Accept Lisp_Object, not char *, for
dirname. Signal an error if the open fails. All callers changed.
2015-01-29 Paul Eggert <eggert@cs.ucla.edu>
Report readdir failures
Previously, on non-MS-Windows platforms the code treated most
readdir failures as EOF. This was incorrect, e.g., when readdir
fails with errno == EOVERFLOW. Signal an error instead.
* dired.c (read_dirent):
New function, which signals an error when readdir fails.
(directory_files_internal, file_name_completion): Use it.
2015-01-29 Eli Zaretskii <eliz@gnu.org>
Use bool for boolean in w32menu.c, w32font.c, w32uniscribe.c.
* w32uniscribe.c (uniscribe_list, uniscribe_match): Use bool where
appropriate.
* w32font.c (struct font_callback_data, w32font_list_internal)
(w32font_driver, w32font_match_internal): Use bool where appropriate.
* w32menu.c (x_activate_menubar, set_frame_menubar)
(w32_dialog_show, initialize_frame_menubar, w32_menu_show)
(is_simple_dialog): Use bool where appropriate.
2015-01-28 Paul Eggert <eggert@cs.ucla.edu>
Use bool, not int, to track face changes
* xfaces.c (face_change): Rename from face_change_count, and
change from int to bool. The var is now true (instead of nonzero)
if attributes have changed; this is simpler. All uses changed.
(Bug#19698)
2015-01-28 Eli Zaretskii <eliz@gnu.org>
* dired.c (directory_files_internal, file_name_completion)
[WINDOWSNT]: Signal an error when errno is set non-zero by
'readdir', regardless of its value.
* w32.c (sys_readdir): Set errno to ENOENT when the directory
doesn't exist and to EACCES when it's not accessible to the
current user. Set errno to zero when FindNextFile exhausts the
directory, so that callers don't interpret that as an error and
don't signal a file-error.
(open_unc_volume): Set errno to ENOENT if WNetOpenEnum fails.
* dired.c (directory_files_internal) [WINDOWSNT]: If readdir
returns NULL and errno is ENOTDIR, behave as if opendir failed to
open the directory. (Bug#19701)
* w32.c (sys_readdir): If FindFirstFile fails because the
directory doesn't exist, set errno to ENOTDIR.
2015-01-28 Jan Djärv <jan.h.d@swipnet.se>
* nsterm.m (drawRect:): Add block/unblock_input (Bug#19660).
2015-01-28 Paul Eggert <eggert@cs.ucla.edu>
Fix coding.c subscript error
* coding.c (CODING_ISO_INVOKED_CHARSET):
Avoid undefined behavior if CODING_ISO_INVOCATION returns negative.
2015-01-28 Eli Zaretskii <eliz@gnu.org>
* xdisp.c (produce_image_glyph): Fix display of images in R2L
screen lines: prepend the new glyph to the ones already there
instead of appending it.
* w32fns.c (w32_set_title_bar_text): New function, including
support for titles with non-ASCII characters outside of the
current system codepage.
(x_set_name, x_set_title): Use it. (Bug#19590)
* indent.c (Fvertical_motion): Return zero if we started from ZV
and there's an overlay after-string there. (Bug#19553)
* emacs.c (usage_message): Fix the description of the -nl switch.
(Bug#19542)
* xdisp.c (move_it_to, try_cursor_movement): Don't use the window
end information if the window_end_valid flag is unset.
(try_window_id): If the call to display_line invalidated the
window end information, give up the try_window_id optimization.
(Bug#19511)
* w32fns.c (Fx_server_version, Fx_server_vendor): Doc fix.
* xfns.c (Fx_server_version, Fx_server_vendor): Doc fix.
* emacs.c (syms_of_emacs) <system-configuration>: Doc fix. (Bug#19502)
2015-01-28 Stefan Monnier <monnier@iro.umontreal.ca>
* lisp.mk (lisp): Add cl-preloaded.
2015-01-27 Paul Eggert <eggert@cs.ucla.edu>
Use bool for boolean in xfaces.c

View file

@ -504,11 +504,17 @@ buildobj.h: Makefile
GLOBAL_SOURCES = $(base_obj:.o=.c) $(NS_OBJC_OBJ:.o=.m)
gl-stamp: $(libsrc)/make-docfile$(EXEEXT) $(GLOBAL_SOURCES)
$(AM_V_GEN)$(libsrc)/make-docfile -d $(srcdir) -g $(obj) >$@
AM_V_GLOBALS = $(am__v_GLOBALS_@AM_V@)
am__v_GLOBALS_ = $(am__v_GLOBALS_@AM_DEFAULT_V@)
am__v_GLOBALS_0 = @echo " GEN " globals.h;
am__v_GLOBALS_1 =
globals.h: gl-stamp
$(AM_V_GEN)cmp $< $@ >/dev/null || cp $< $@
gl-stamp: $(libsrc)/make-docfile$(EXEEXT) $(GLOBAL_SOURCES)
$(AM_V_GLOBALS)$(libsrc)/make-docfile -d $(srcdir) -g $(obj) > globals.tmp
$(AM_V_at)$(top_srcdir)/build-aux/move-if-change globals.tmp globals.h
$(AM_V_at)echo timestamp > $@
globals.h: gl-stamp; @true
$(ALLOBJS): globals.h

View file

@ -350,7 +350,8 @@ static Lisp_Object Vbig5_coding_system;
#define CODING_ISO_BOL(coding) \
((coding)->spec.iso_2022.bol)
#define CODING_ISO_INVOKED_CHARSET(coding, plane) \
CODING_ISO_DESIGNATION ((coding), CODING_ISO_INVOCATION ((coding), (plane)))
(CODING_ISO_INVOCATION (coding, plane) < 0 ? -1 \
: CODING_ISO_DESIGNATION (coding, CODING_ISO_INVOCATION (coding, plane)))
#define CODING_ISO_CMP_STATUS(coding) \
(&(coding)->spec.iso_2022.cmp_status)
#define CODING_ISO_EXTSEGMENT_LEN(coding) \
@ -5978,6 +5979,15 @@ raw_text_coding_system (Lisp_Object coding_system)
: AREF (raw_text_eol_type, 2));
}
/* Return true if CODING corresponds to raw-text coding-system. */
bool
raw_text_coding_system_p (struct coding_system *coding)
{
return (coding->decoder == decode_coding_raw_text
&& coding->encoder == encode_coding_raw_text) ? true : false;
}
/* If CODING_SYSTEM doesn't specify end-of-line format, return one of
the subsidiary that has the same eol-spec as PARENT (if it is not

View file

@ -705,6 +705,7 @@ extern Lisp_Object code_convert_string_norecord (Lisp_Object, Lisp_Object,
extern Lisp_Object encode_file_name (Lisp_Object);
extern Lisp_Object decode_file_name (Lisp_Object);
extern Lisp_Object raw_text_coding_system (Lisp_Object);
extern bool raw_text_coding_system_p (struct coding_system *);
extern Lisp_Object coding_inherit_eol_type (Lisp_Object, Lisp_Object);
extern Lisp_Object complement_process_encoding_system (Lisp_Object);

View file

@ -66,8 +66,9 @@ dirent_namelen (struct dirent *dp)
}
static DIR *
open_directory (char const *name, int *fdp)
open_directory (Lisp_Object dirname, int *fdp)
{
char *name = SSDATA (dirname);
DIR *d;
int fd, opendir_errno;
@ -98,8 +99,9 @@ open_directory (char const *name, int *fdp)
unblock_input ();
if (!d)
report_file_errno ("Opening directory", dirname, opendir_errno);
*fdp = fd;
errno = opendir_errno;
return d;
}
@ -120,6 +122,35 @@ directory_files_internal_unwind (void *dh)
unblock_input ();
}
/* Return the next directory entry from DIR; DIR's name is DIRNAME.
If there are no more directory entries, return a null pointer.
Signal any unrecoverable errors. */
static struct dirent *
read_dirent (DIR *dir, Lisp_Object dirname)
{
while (true)
{
errno = 0;
struct dirent *dp = readdir (dir);
if (dp || errno == 0)
return dp;
if (! (errno == EAGAIN || errno == EINTR))
{
#ifdef WINDOWSNT
/* The MS-Windows implementation of 'opendir' doesn't
actually open a directory until the first call to
'readdir'. If 'readdir' fails to open the directory, it
sets errno to ENOENT or EACCES, see w32.c. */
if (errno == ENOENT || errno == EACCES)
report_file_error ("Opening directory", dirname);
#endif
report_file_error ("Reading directory", dirname);
}
QUIT;
}
}
/* Function shared by Fdirectory_files and Fdirectory_files_and_attributes.
If not ATTRS, return a list of directory filenames;
if ATTRS, return a list of directory filenames and their attributes.
@ -130,15 +161,12 @@ directory_files_internal (Lisp_Object directory, Lisp_Object full,
Lisp_Object match, Lisp_Object nosort, bool attrs,
Lisp_Object id_format)
{
DIR *d;
int fd;
ptrdiff_t directory_nbytes;
Lisp_Object list, dirfilename, encoded_directory;
struct re_pattern_buffer *bufp = NULL;
bool needsep = 0;
ptrdiff_t count = SPECPDL_INDEX ();
struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5;
struct dirent *dp;
#ifdef WINDOWSNT
Lisp_Object w32_save = Qnil;
#endif
@ -182,9 +210,8 @@ directory_files_internal (Lisp_Object directory, Lisp_Object full,
/* Now *bufp is the compiled form of MATCH; don't call anything
which might compile a new regexp until we're done with the loop! */
d = open_directory (SSDATA (dirfilename), &fd);
if (d == NULL)
report_file_error ("Opening directory", directory);
int fd;
DIR *d = open_directory (dirfilename, &fd);
/* Unfortunately, we can now invoke expand-file-name and
file-attributes on filenames, both of which can throw, so we must
@ -221,28 +248,13 @@ directory_files_internal (Lisp_Object directory, Lisp_Object full,
|| !IS_ANY_SEP (SREF (directory, directory_nbytes - 1)))
needsep = 1;
/* Loop reading blocks until EOF or error. */
for (;;)
/* Loop reading directory entries. */
for (struct dirent *dp; (dp = read_dirent (d, directory)); )
{
ptrdiff_t len;
bool wanted = 0;
Lisp_Object name, finalname;
ptrdiff_t len = dirent_namelen (dp);
Lisp_Object name = make_unibyte_string (dp->d_name, len);
Lisp_Object finalname = name;
struct gcpro gcpro1, gcpro2;
errno = 0;
dp = readdir (d);
if (!dp)
{
if (errno == EAGAIN || errno == EINTR)
{
QUIT;
continue;
}
break;
}
len = dirent_namelen (dp);
name = finalname = make_unibyte_string (dp->d_name, len);
GCPRO2 (finalname, name);
/* Note: DECODE_FILE can GC; it should protect its argument,
@ -255,9 +267,8 @@ directory_files_internal (Lisp_Object directory, Lisp_Object full,
immediate_quit = 1;
QUIT;
if (NILP (match)
|| re_search (bufp, SSDATA (name), len, 0, len, 0) >= 0)
wanted = 1;
bool wanted = (NILP (match)
|| re_search (bufp, SSDATA (name), len, 0, len, 0) >= 0);
immediate_quit = 0;
@ -446,8 +457,6 @@ static Lisp_Object
file_name_completion (Lisp_Object file, Lisp_Object dirname, bool all_flag,
Lisp_Object predicate)
{
DIR *d;
int fd;
ptrdiff_t bestmatchsize = 0;
int matchcount = 0;
/* If ALL_FLAG is 1, BESTMATCH is the list of all matches, decoded.
@ -481,37 +490,17 @@ file_name_completion (Lisp_Object file, Lisp_Object dirname, bool all_flag,
work with decoded file names, but we still do some filtering based
on the encoded file name. */
encoded_file = ENCODE_FILE (file);
encoded_dir = ENCODE_FILE (Fdirectory_file_name (dirname));
d = open_directory (SSDATA (encoded_dir), &fd);
if (!d)
report_file_error ("Opening directory", dirname);
int fd;
DIR *d = open_directory (encoded_dir, &fd);
record_unwind_protect_ptr (directory_files_internal_unwind, d);
/* Loop reading blocks */
/* (att3b compiler bug requires do a null comparison this way) */
while (1)
/* Loop reading directory entries. */
for (struct dirent *dp; (dp = read_dirent (d, dirname)); )
{
struct dirent *dp;
ptrdiff_t len;
ptrdiff_t len = dirent_namelen (dp);
bool canexclude = 0;
errno = 0;
dp = readdir (d);
if (!dp)
{
if (errno == EAGAIN || errno == EINTR)
{
QUIT;
continue;
}
break;
}
len = dirent_namelen (dp);
QUIT;
if (len < SCHARS (encoded_file)
|| (scmp (dp->d_name, SSDATA (encoded_file),

View file

@ -1860,10 +1860,10 @@ GLYPH_CODE_P (Lisp_Object gc)
: TYPE_MAXIMUM (EMACS_INT)))));
}
/* Non-zero means face attributes have been changed since the last
/* True means face attributes have been changed since the last
redisplay. Used in redisplay_internal. */
extern int face_change_count;
extern bool face_change;
/* For reordering of bidirectional text. */

View file

@ -234,7 +234,7 @@ Initialization options:\n\
"\
--no-desktop do not load a saved desktop\n\
--no-init-file, -q load neither ~/.emacs nor default.el\n\
--no-shared-memory, -nl do not use shared memory\n\
--no-loadup, -nl do not load loadup.el into bare Emacs\n\
--no-site-file do not load site-start.el\n\
--no-site-lisp, -nsl do not add site-lisp directories to load-path\n\
--no-splash do not display a splash screen on startup\n\
@ -2398,9 +2398,7 @@ hpux, irix, usg-unix-v) indicates some sort of Unix system. */);
/* See configure.ac (and config.nt) for the possible SYSTEM_TYPEs. */
DEFVAR_LISP ("system-configuration", Vsystem_configuration,
doc: /* Value is string indicating configuration Emacs was built for.
On MS-Windows, the value reflects the OS flavor and version on which
Emacs is running. */);
doc: /* Value is string indicating configuration Emacs was built for. */);
Vsystem_configuration = build_string (EMACS_CONFIGURATION);
DEFVAR_LISP ("system-configuration-options", Vsystem_configuration_options,

View file

@ -3632,7 +3632,7 @@ x_set_font_backend (struct frame *f, Lisp_Object new_value, Lisp_Object old_valu
XSETFRAME (frame, f);
x_set_font (f, Fframe_parameter (frame, Qfont), Qnil);
++face_change_count;
face_change = true;
windows_or_buffers_changed = 18;
}
}

View file

@ -2137,10 +2137,15 @@ whether or not it is currently displayed in some window. */)
if (nlines > 1)
move_it_by_lines (&it, min (PTRDIFF_MAX, nlines - 1));
}
else
else /* it_start = ZV */
{
it.vpos = 0;
move_it_by_lines (&it, min (PTRDIFF_MAX, nlines));
/* We could have some display or overlay string at ZV,
in which case it.vpos will be nonzero now, while
actually we didn't move vertically at all. */
if (IT_CHARPOS (it) == CHARPOS (pt) && CHARPOS (pt) == it_start)
it.vpos = 0;
}
}

View file

@ -1,7 +1,6 @@
/* Buffer insertion/deletion and gap motion for GNU Emacs.
Copyright (C) 1985-1986, 1993-1995, 1997-2015 Free Software Foundation,
Inc.
Copyright (C) 1985-1986, 1993-1995, 1997-2015 Free Software
Foundation, Inc.
This file is part of GNU Emacs.

View file

@ -2288,30 +2288,41 @@ read_decoded_event_from_main_queue (struct timespec *end_time,
{ /* An encoded byte sequence, let's try to decode it. */
struct coding_system *coding
= TERMINAL_KEYBOARD_CODING (terminal);
unsigned char src[MAX_ENCODED_BYTES];
unsigned char dest[MAX_ENCODED_BYTES * MAX_MULTIBYTE_LENGTH];
int i;
for (i = 0; i < n; i++)
src[i] = XINT (events[i]);
if (meta_key != 2)
for (i = 0; i < n; i++)
src[i] &= ~0x80;
coding->destination = dest;
coding->dst_bytes = sizeof dest;
decode_coding_c_string (coding, src, n, Qnil);
eassert (coding->produced_char <= n);
if (coding->produced_char == 0)
{ /* The encoded sequence is incomplete. */
if (n < MAX_ENCODED_BYTES) /* Avoid buffer overflow. */
continue; /* Read on! */
if (raw_text_coding_system_p (coding))
{
int i;
if (meta_key != 2)
for (i = 0; i < n; i++)
events[i] = make_number (XINT (events[i]) & ~0x80);
}
else
{
const unsigned char *p = coding->destination;
eassert (coding->carryover_bytes == 0);
n = 0;
while (n < coding->produced_char)
events[n++] = make_number (STRING_CHAR_ADVANCE (p));
unsigned char src[MAX_ENCODED_BYTES];
unsigned char dest[MAX_ENCODED_BYTES * MAX_MULTIBYTE_LENGTH];
int i;
for (i = 0; i < n; i++)
src[i] = XINT (events[i]);
if (meta_key != 2)
for (i = 0; i < n; i++)
src[i] &= ~0x80;
coding->destination = dest;
coding->dst_bytes = sizeof dest;
decode_coding_c_string (coding, src, n, Qnil);
eassert (coding->produced_char <= n);
if (coding->produced_char == 0)
{ /* The encoded sequence is incomplete. */
if (n < MAX_ENCODED_BYTES) /* Avoid buffer overflow. */
continue; /* Read on! */
}
else
{
const unsigned char *p = coding->destination;
eassert (coding->carryover_bytes == 0);
n = 0;
while (n < coding->produced_char)
events[n++] = make_number (STRING_CHAR_ADVANCE (p));
}
}
}
/* Now `events' should hold decoded events.
@ -3639,7 +3650,9 @@ kbd_buffer_store_event_hold (register struct input_event *event,
as input, set quit-flag to cause an interrupt. */
if (!NILP (Vthrow_on_input)
&& event->kind != FOCUS_IN_EVENT
&& event->kind != FOCUS_OUT_EVENT
&& event->kind != HELP_EVENT
&& event->kind != ICONIFY_EVENT
&& event->kind != DEICONIFY_EVENT)
{
Vquit_flag = Vthrow_on_input;

View file

@ -71,6 +71,7 @@ lisp = \
$(lispsource)/faces.elc \
$(lispsource)/button.elc \
$(lispsource)/startup.elc \
$(lispsource)/emacs-lisp/cl-preloaded.elc \
$(lispsource)/emacs-lisp/nadvice.elc \
$(lispsource)/minibuffer.elc \
$(lispsource)/abbrev.elc \

View file

@ -1733,7 +1733,7 @@ IT_set_frame_parameters (struct frame *f, Lisp_Object alist)
if (redraw)
{
face_change_count++; /* forces xdisp.c to recompute basic faces */
face_change = true; /* forces xdisp.c to recompute basic faces */
if (f == SELECTED_FRAME ())
redraw_frame (f);
}

View file

@ -6773,7 +6773,9 @@ - (void)drawRect: (NSRect)rect
return;
ns_clear_frame_area (emacsframe, x, y, width, height);
block_input ();
expose_frame (emacsframe, x, y, width, height);
unblock_input ();
/*
drawRect: may be called (at least in OS X 10.5) for invisible

View file

@ -3433,17 +3433,51 @@ sys_readdir (DIR *dirp)
}
if (dir_find_handle == INVALID_HANDLE_VALUE)
return NULL;
{
/* Any changes in the value of errno here should be in sync
with what directory_files_internal does when it calls
readdir. */
switch (GetLastError ())
{
/* Windows uses this value when FindFirstFile finds no
files that match the wildcard. This is not supposed
to happen, since our wildcard is "*", but just in
case, if there's some weird empty directory with not
even "." and ".." entries... */
case ERROR_FILE_NOT_FOUND:
errno = 0;
/* FALLTHRU */
default:
break;
case ERROR_ACCESS_DENIED:
case ERROR_NETWORK_ACCESS_DENIED:
errno = EACCES;
break;
case ERROR_PATH_NOT_FOUND:
case ERROR_INVALID_DRIVE:
case ERROR_BAD_NETPATH:
case ERROR_BAD_NET_NAME:
errno = ENOENT;
break;
}
return NULL;
}
}
else if (w32_unicode_filenames)
{
if (!FindNextFileW (dir_find_handle, &dir_find_data_w))
return NULL;
{
errno = 0;
return NULL;
}
}
else
{
if (!FindNextFileA (dir_find_handle, &dir_find_data_a))
return NULL;
{
errno = 0;
return NULL;
}
}
/* Emacs never uses this value, so don't bother making it match
@ -3545,7 +3579,11 @@ open_unc_volume (const char *path)
if (result == NO_ERROR)
return henum;
else
return INVALID_HANDLE_VALUE;
{
/* Make sure directory_files_internal reports a sensible error. */
errno = ENOENT;
return INVALID_HANDLE_VALUE;
}
}
static void *

View file

@ -1759,6 +1759,50 @@ x_change_tool_bar_height (struct frame *f, int height)
x_clear_under_internal_border (f);
}
static void
w32_set_title_bar_text (struct frame *f, Lisp_Object name)
{
if (FRAME_W32_WINDOW (f))
{
block_input ();
#ifdef __CYGWIN__
GUI_FN (SetWindowText) (FRAME_W32_WINDOW (f),
GUI_SDATA (GUI_ENCODE_SYSTEM (name)));
#else
/* The frame's title many times shows the name of the file
visited in the selected window's buffer, so it makes sense to
support non-ASCII characters outside of the current system
codepage in the title. */
if (w32_unicode_filenames)
{
Lisp_Object encoded_title = ENCODE_UTF_8 (name);
wchar_t *title_w;
int tlen = pMultiByteToWideChar (CP_UTF8, 0, SSDATA (encoded_title),
-1, NULL, 0);
if (tlen > 0)
{
/* Windows truncates the title text beyond what fits on
a single line, so we can limit the length to some
reasonably large value, and use alloca. */
if (tlen > 10000)
tlen = 10000;
title_w = alloca ((tlen + 1) * sizeof (wchar_t));
pMultiByteToWideChar (CP_UTF8, 0, SSDATA (encoded_title), -1,
title_w, tlen);
title_w[tlen] = L'\0';
SetWindowTextW (FRAME_W32_WINDOW (f), title_w);
}
else /* Conversion to UTF-16 failed, so we punt. */
SetWindowTextA (FRAME_W32_WINDOW (f),
SSDATA (ENCODE_SYSTEM (name)));
}
else
SetWindowTextA (FRAME_W32_WINDOW (f), SSDATA (ENCODE_SYSTEM (name)));
#endif
unblock_input ();
}
}
/* Change the name of frame F to NAME. If NAME is nil, set F's name to
w32_id_name.
@ -1812,13 +1856,7 @@ x_set_name (struct frame *f, Lisp_Object name, bool explicit)
if (! NILP (f->title))
name = f->title;
if (FRAME_W32_WINDOW (f))
{
block_input ();
GUI_FN (SetWindowText) (FRAME_W32_WINDOW (f),
GUI_SDATA (GUI_ENCODE_SYSTEM (name)));
unblock_input ();
}
w32_set_title_bar_text (f, name);
}
/* This function should be called when the user's lisp code has
@ -1856,13 +1894,7 @@ x_set_title (struct frame *f, Lisp_Object name, Lisp_Object old_name)
if (NILP (name))
name = f->name;
if (FRAME_W32_WINDOW (f))
{
block_input ();
GUI_FN (SetWindowText) (FRAME_W32_WINDOW (f),
GUI_SDATA (GUI_ENCODE_SYSTEM (name)));
unblock_input ();
}
w32_set_title_bar_text (f, name);
}
void
@ -4895,25 +4927,38 @@ If omitted or nil, that stands for the selected frame's display. */)
}
DEFUN ("x-server-vendor", Fx_server_vendor, Sx_server_vendor, 0, 1, 0,
doc: /* Return the "vendor ID" string of the W32 system (Microsoft).
The optional argument DISPLAY specifies which display to ask about.
DISPLAY should be either a frame or a display name (a string).
doc: /* Return the "vendor ID" string of the GUI software on TERMINAL.
\(Labeling every distributor as a "vendor" embodies the false assumption
that operating systems cannot be developed and distributed noncommercially.)
For GNU and Unix systems, this queries the X server software; for
MS-Windows, this queries the OS.
The optional argument TERMINAL specifies which display to ask about.
TERMINAL should be a terminal object, a frame or a display name (a string).
If omitted or nil, that stands for the selected frame's display. */)
(Lisp_Object display)
(Lisp_Object terminal)
{
return build_string ("Microsoft Corp.");
}
DEFUN ("x-server-version", Fx_server_version, Sx_server_version, 0, 1, 0,
doc: /* Return the version numbers of the server of DISPLAY.
The value is a list of three integers: the major and minor
version numbers of the X Protocol in use, and the distributor-specific
release number. See also the function `x-server-vendor'.
doc: /* Return the version numbers of the GUI software on TERMINAL.
The value is a list of three integers specifying the version of the GUI
software in use.
The optional argument DISPLAY specifies which display to ask about.
DISPLAY should be either a frame or a display name (a string).
For GNU and Unix system, the first 2 numbers are the version of the X
Protocol used on TERMINAL and the 3rd number is the distributor-specific
release number. For MS-Windows, the 3 numbers report the version and
the build number of the OS.
See also the function `x-server-vendor'.
The optional argument TERMINAL specifies which display to ask about.
TERMINAL should be a terminal object, a frame or a display name (a string).
If omitted or nil, that stands for the selected frame's display. */)
(Lisp_Object display)
(Lisp_Object terminal)
{
return list3i (w32_major_version, w32_minor_version, w32_build_number);
}
@ -5623,7 +5668,7 @@ x_create_tip_frame (struct w32_display_info *dpyinfo,
ptrdiff_t count = SPECPDL_INDEX ();
struct gcpro gcpro1, gcpro2, gcpro3;
struct kboard *kb;
int face_change_count_before = face_change_count;
bool face_change_before = face_change;
Lisp_Object buffer;
struct buffer *old_buffer;
@ -5835,11 +5880,11 @@ x_create_tip_frame (struct w32_display_info *dpyinfo,
f->can_x_set_window_size = true;
/* Setting attributes of faces of the tooltip frame from resources
and similar will increment face_change_count, which leads to the
and similar will set face_change, which leads to the
clearing of all current matrices. Since this isn't necessary
here, avoid it by resetting face_change_count to the value it
here, avoid it by resetting face_change to the value it
had before we created the tip frame. */
face_change_count = face_change_count_before;
face_change = face_change_before;
/* Discard the unwind_protect. */
return unbind_to (count, frame);

View file

@ -95,7 +95,7 @@ struct font_callback_data
/* The list to add matches to. */
Lisp_Object list;
/* Whether to match only opentype fonts. */
int opentype_only;
bool opentype_only;
};
/* Handles the problem that EnumFontFamiliesEx will not return all
@ -746,7 +746,8 @@ w32font_otf_drive (struct font *font, Lisp_Object features,
Additional parameter opentype_only restricts the returned fonts to
opentype fonts, which can be used with the Uniscribe backend. */
Lisp_Object
w32font_list_internal (struct frame *f, Lisp_Object font_spec, int opentype_only)
w32font_list_internal (struct frame *f, Lisp_Object font_spec,
bool opentype_only)
{
struct font_callback_data match_data;
HDC dc;
@ -798,7 +799,8 @@ w32font_list_internal (struct frame *f, Lisp_Object font_spec, int opentype_only
Additional parameter opentype_only restricts the returned fonts to
opentype fonts, which can be used with the Uniscribe backend. */
Lisp_Object
w32font_match_internal (struct frame *f, Lisp_Object font_spec, int opentype_only)
w32font_match_internal (struct frame *f, Lisp_Object font_spec,
bool opentype_only)
{
struct font_callback_data match_data;
HDC dc;
@ -2459,7 +2461,7 @@ w32font_filter_properties (Lisp_Object font, Lisp_Object alist)
struct font_driver w32font_driver =
{
LISP_INITIALLY_ZERO, /* Qgdi */
0, /* case insensitive */
false, /* case insensitive */
w32font_get_cache,
w32font_list,
w32font_match,

View file

@ -66,10 +66,10 @@ struct w32font_info
Lisp_Object w32font_get_cache (struct frame *fe);
Lisp_Object w32font_list_internal (struct frame *f,
Lisp_Object font_spec,
int opentype_only);
bool opentype_only);
Lisp_Object w32font_match_internal (struct frame *f,
Lisp_Object font_spec,
int opentype_only);
bool opentype_only);
int w32font_open_internal (struct frame *f, Lisp_Object font_entity,
int pixel_size, Lisp_Object font_object);
void w32font_close (struct font *font);

View file

@ -1,5 +1,5 @@
/* Heap management routines for GNU Emacs on the Microsoft Windows
API. Copyright (C) 1994, 2001-2015 Free Software Foundation, Inc.
/* Heap management routines for GNU Emacs on the Microsoft Windows API.
Copyright (C) 1994, 2001-2015 Free Software Foundation, Inc.
This file is part of GNU Emacs.

View file

@ -103,7 +103,7 @@ void set_frame_menubar (struct frame *, bool, bool);
#ifdef HAVE_DIALOGS
static Lisp_Object w32_dialog_show (struct frame *, Lisp_Object, Lisp_Object, char **);
#else
static int is_simple_dialog (Lisp_Object);
static bool is_simple_dialog (Lisp_Object);
static Lisp_Object simple_dialog_show (struct frame *, Lisp_Object, Lisp_Object);
#endif
@ -166,7 +166,7 @@ w32_popup_dialog (struct frame *f, Lisp_Object header, Lisp_Object contents)
void
x_activate_menubar (struct frame *f)
{
set_frame_menubar (f, 0, 1);
set_frame_menubar (f, false, true);
/* Lock out further menubar changes while active. */
f->output_data.w32->menubar_active = 1;
@ -289,7 +289,7 @@ set_frame_menubar (struct frame *f, bool first_time, bool deep_p)
XSETFRAME (Vmenu_updating_frame, f);
if (! menubar_widget)
deep_p = 1;
deep_p = true;
if (deep_p)
{
@ -388,7 +388,7 @@ set_frame_menubar (struct frame *f, bool first_time, bool deep_p)
else
first_wv->contents = wv;
/* Don't set wv->name here; GC during the loop might relocate it. */
wv->enabled = 1;
wv->enabled = true;
wv->button_type = BUTTON_TYPE_NONE;
prev_wv = wv;
}
@ -501,7 +501,7 @@ set_frame_menubar (struct frame *f, bool first_time, bool deep_p)
/* Force the window size to be recomputed so that the frame's text
area remains the same, if menubar has just been created. */
if (old_widget == NULL)
adjust_frame_size (f, -1, -1, 2, 0, Qmenu_bar_lines);
adjust_frame_size (f, -1, -1, 2, false, Qmenu_bar_lines);
}
unblock_input ();
@ -518,7 +518,7 @@ initialize_frame_menubar (struct frame *f)
/* This function is called before the first chance to redisplay
the frame. It has to be, so the frame will have the right size. */
fset_menu_bar_items (f, menu_bar_items (FRAME_MENU_BAR_ITEMS (f)));
set_frame_menubar (f, 1, 1);
set_frame_menubar (f, true, true);
}
/* Get rid of the menu bar of frame F, and free its storage.
@ -570,7 +570,7 @@ w32_menu_show (struct frame *f, int x, int y, int menuflags,
Lisp_Object *subprefix_stack
= (Lisp_Object *) alloca (menu_items_used * word_size);
int submenu_depth = 0;
int first_pane;
bool first_pane;
*error = NULL;
@ -590,7 +590,7 @@ w32_menu_show (struct frame *f, int x, int y, int menuflags,
wv = make_widget_value ("menu", NULL, true, Qnil);
wv->button_type = BUTTON_TYPE_NONE;
first_wv = wv;
first_pane = 1;
first_pane = true;
/* Loop over all panes and items, filling in the tree. */
i = 0;
@ -601,14 +601,14 @@ w32_menu_show (struct frame *f, int x, int y, int menuflags,
submenu_stack[submenu_depth++] = save_wv;
save_wv = prev_wv;
prev_wv = 0;
first_pane = 1;
first_pane = false;
i++;
}
else if (EQ (AREF (menu_items, i), Qlambda))
{
prev_wv = save_wv;
save_wv = submenu_stack[--submenu_depth];
first_pane = 0;
first_pane = false;
i++;
}
else if (EQ (AREF (menu_items, i), Qt)
@ -664,7 +664,7 @@ w32_menu_show (struct frame *f, int x, int y, int menuflags,
save_wv = wv;
prev_wv = 0;
}
first_pane = 0;
first_pane = false;
i += MENU_ITEMS_PANE_LENGTH;
}
else
@ -883,8 +883,9 @@ w32_dialog_show (struct frame *f, Lisp_Object title,
/* Number of elements seen so far, before boundary. */
int left_count = 0;
/* 1 means we've seen the boundary between left-hand elts and right-hand. */
int boundary_seen = 0;
/* true means we've seen the boundary between left-hand elts and
right-hand. */
bool boundary_seen = false;
*error = NULL;
@ -928,7 +929,7 @@ w32_dialog_show (struct frame *f, Lisp_Object title,
{
/* This is the boundary between left-side elts
and right-side elts. Stop incrementing right_count. */
boundary_seen = 1;
boundary_seen = true;
i++;
continue;
}
@ -986,7 +987,7 @@ w32_dialog_show (struct frame *f, Lisp_Object title,
/* Actually create the dialog. */
dialog_id = widget_id_tick++;
menu = lw_create_widget (first_wv->name, "dialog", dialog_id, first_wv,
f->output_data.w32->widget, 1, 0,
f->output_data.w32->widget, true, 0,
dialog_selection_callback, 0);
lw_modify_all_widgets (dialog_id, first_wv->contents, TRUE);
@ -1037,25 +1038,25 @@ w32_dialog_show (struct frame *f, Lisp_Object title,
anywhere in Emacs that uses the other specific dialog choices that
MessageBox provides. */
static int
static bool
is_simple_dialog (Lisp_Object contents)
{
Lisp_Object options;
Lisp_Object name, yes, no, other;
if (!CONSP (contents))
return 0;
return false;
options = XCDR (contents);
yes = build_string ("Yes");
no = build_string ("No");
if (!CONSP (options))
return 0;
return false;
name = XCAR (options);
if (!CONSP (name))
return 0;
return false;
name = XCAR (name);
if (!NILP (Fstring_equal (name, yes)))
@ -1063,18 +1064,18 @@ is_simple_dialog (Lisp_Object contents)
else if (!NILP (Fstring_equal (name, no)))
other = yes;
else
return 0;
return false;
options = XCDR (options);
if (!CONSP (options))
return 0;
return false;
name = XCAR (options);
if (!CONSP (name))
return 0;
return false;
name = XCAR (name);
if (NILP (Fstring_equal (name, other)))
return 0;
return false;
/* Check there are no more options. */
options = XCDR (options);

View file

@ -67,7 +67,7 @@ memq_no_quit (Lisp_Object elt, Lisp_Object list)
static Lisp_Object
uniscribe_list (struct frame *f, Lisp_Object font_spec)
{
Lisp_Object fonts = w32font_list_internal (f, font_spec, 1);
Lisp_Object fonts = w32font_list_internal (f, font_spec, true);
FONT_ADD_LOG ("uniscribe-list", font_spec, fonts);
return fonts;
}
@ -75,7 +75,7 @@ uniscribe_list (struct frame *f, Lisp_Object font_spec)
static Lisp_Object
uniscribe_match (struct frame *f, Lisp_Object font_spec)
{
Lisp_Object entity = w32font_match_internal (f, font_spec, 1);
Lisp_Object entity = w32font_match_internal (f, font_spec, true);
FONT_ADD_LOG ("uniscribe-match", font_spec, entity);
return entity;
}

View file

@ -2730,9 +2730,9 @@ init_iterator (struct it *it, struct window *w,
free realized faces now because they depend on face definitions
that might have changed. Don't free faces while there might be
desired matrices pending which reference these faces. */
if (face_change_count && !inhibit_free_realized_faces)
if (face_change && !inhibit_free_realized_faces)
{
face_change_count = 0;
face_change = false;
free_all_realized_faces (Qnil);
}
@ -9316,6 +9316,7 @@ move_it_to (struct it *it, ptrdiff_t to_charpos, int to_x, int to_y, int to_vpos
&& it->current_x == it->last_visible_x - 1
&& it->c != '\n'
&& it->c != '\t'
&& it->w->window_end_valid
&& it->vpos < it->w->window_end_vpos)
{
it->continuation_lines_width += it->current_x;
@ -13425,10 +13426,10 @@ redisplay_internal (void)
last_glyphless_glyph_frame = NULL;
last_glyphless_glyph_face_id = (1 << FACE_ID_BITS);
/* If face_change_count is non-zero, init_iterator will free all
realized faces, which includes the faces referenced from current
matrices. So, we can't reuse current matrices in this case. */
if (face_change_count)
/* If face_change, init_iterator will free all realized faces, which
includes the faces referenced from current matrices. So, we
can't reuse current matrices in this case. */
if (face_change)
windows_or_buffers_changed = 47;
if ((FRAME_TERMCAP_P (sf) || FRAME_MSDOS_P (sf))
@ -15436,7 +15437,8 @@ try_cursor_movement (Lisp_Object window, struct text_pos startp, int *scroll_ste
/* Likewise there was a check whether window_end_vpos is nil or larger
than the window. Now window_end_vpos is int and so never nil, but
let's leave eassert to check whether it fits in the window. */
eassert (w->window_end_vpos < w->current_matrix->nrows);
eassert (!w->window_end_valid
|| w->window_end_vpos < w->current_matrix->nrows);
/* Handle case where text has not changed, only point, and it has
not moved off the frame. */
@ -18183,6 +18185,21 @@ try_window_id (struct window *w)
if (f->fonts_changed)
return -1;
/* The redisplay iterations in display_line above could have
triggered font-lock, which could have done something that
invalidates IT->w window's end-point information, on which we
rely below. E.g., one package, which will remain unnamed, used
to install a font-lock-fontify-region-function that called
bury-buffer, whose side effect is to switch the buffer displayed
by IT->w, and that predictably resets IT->w's window_end_valid
flag, which we already tested at the entry to this function.
Amply punish such packages/modes by giving up on this
optimization in those cases. */
if (!w->window_end_valid)
{
clear_glyph_matrix (w->desired_matrix);
return -1;
}
/* Compute differences in buffer positions, y-positions etc. for
lines reused at the bottom of the window. Compute what we can
@ -25728,6 +25745,15 @@ produce_image_glyph (struct it *it)
enum glyph_row_area area = it->area;
glyph = it->glyph_row->glyphs[area] + it->glyph_row->used[area];
if (it->glyph_row->reversed_p)
{
struct glyph *g;
/* Make room for the new glyph. */
for (g = glyph - 1; g >= it->glyph_row->glyphs[it->area]; g--)
g[1] = *g;
glyph = it->glyph_row->glyphs[it->area];
}
if (glyph < it->glyph_row->glyphs[area + 1])
{
glyph->charpos = CHARPOS (it->position);

View file

@ -313,10 +313,10 @@ static int clear_font_table_count;
#endif /* HAVE_WINDOW_SYSTEM */
/* Non-zero means face attributes have been changed since the last
/* True means face attributes have been changed since the last
redisplay. Used in redisplay_internal. */
int face_change_count;
bool face_change;
/* True means don't display bold text if a face's foreground
and background colors are the inverse of the default colors of the
@ -694,7 +694,7 @@ Optional THOROUGHLY non-nil means try to free unused fonts, too. */)
(Lisp_Object thoroughly)
{
clear_face_cache (!NILP (thoroughly));
++face_change_count;
face_change = true;
windows_or_buffers_changed = 53;
return Qnil;
}
@ -2530,11 +2530,11 @@ Value is a vector of face attributes. */)
/* Changing a named face means that all realized faces depending on
that face are invalid. Since we cannot tell which realized faces
depend on the face, make sure they are all removed. This is done
by incrementing face_change_count. The next call to
init_iterator will then free realized faces. */
by setting face_change. The next call to init_iterator will then
free realized faces. */
if (NILP (Fget (face, Qface_no_inherit)))
{
++face_change_count;
face_change = true;
windows_or_buffers_changed = 54;
}
@ -2609,11 +2609,11 @@ The value is TO. */)
/* Changing a named face means that all realized faces depending on
that face are invalid. Since we cannot tell which realized faces
depend on the face, make sure they are all removed. This is done
by incrementing face_change_count. The next call to
init_iterator will then free realized faces. */
by setting face_change. The next call to init_iterator will then
free realized faces. */
if (NILP (Fget (to, Qface_no_inherit)))
{
++face_change_count;
face_change = true;
windows_or_buffers_changed = 55;
}
@ -3107,13 +3107,13 @@ FRAME 0 means change the face on all frames, and change the default
/* Changing a named face means that all realized faces depending on
that face are invalid. Since we cannot tell which realized faces
depend on the face, make sure they are all removed. This is done
by incrementing face_change_count. The next call to
init_iterator will then free realized faces. */
by setting face_change. The next call to init_iterator will then
free realized faces. */
if (!EQ (frame, Qt)
&& NILP (Fget (face, Qface_no_inherit))
&& NILP (Fequal (old_value, value)))
{
++face_change_count;
face_change = true;
windows_or_buffers_changed = 56;
}
@ -3281,12 +3281,12 @@ update_face_from_frame_parameter (struct frame *f, Lisp_Object param,
/* Changing a named face means that all realized faces depending on
that face are invalid. Since we cannot tell which realized faces
depend on the face, make sure they are all removed. This is done
by incrementing face_change_count. The next call to
init_iterator will then free realized faces. */
by setting face_change. The next call to init_iterator will then
free realized faces. */
if (!NILP (face)
&& NILP (Fget (face, Qface_no_inherit)))
{
++face_change_count;
face_change = true;
windows_or_buffers_changed = 57;
}
}
@ -5820,7 +5820,7 @@ is non-nil. */)
(Lisp_Object suppress)
{
tty_suppress_bold_inverse_default_colors_p = !NILP (suppress);
++face_change_count;
face_change = true;
return suppress;
}

View file

@ -3542,10 +3542,15 @@ If omitted or nil, that stands for the selected frame's display. */)
}
DEFUN ("x-server-vendor", Fx_server_vendor, Sx_server_vendor, 0, 1, 0,
doc: /* Return the "vendor ID" string of the X server of display TERMINAL.
doc: /* Return the "vendor ID" string of the GUI software on TERMINAL.
\(Labeling every distributor as a "vendor" embodies the false assumption
that operating systems cannot be developed and distributed noncommercially.)
The optional argument TERMINAL specifies which display to ask about.
For GNU and Unix systems, this queries the X server software; for
MS-Windows, this queries the OS.
TERMINAL should be a terminal object, a frame or a display name (a string).
If omitted or nil, that stands for the selected frame's display. */)
(Lisp_Object terminal)
@ -3558,10 +3563,16 @@ If omitted or nil, that stands for the selected frame's display. */)
}
DEFUN ("x-server-version", Fx_server_version, Sx_server_version, 0, 1, 0,
doc: /* Return the version numbers of the X server of display TERMINAL.
The value is a list of three integers: the major and minor
version numbers of the X Protocol in use, and the distributor-specific release
number. See also the function `x-server-vendor'.
doc: /* Return the version numbers of the GUI software on TERMINAL.
The value is a list of three integers specifying the version of the GUI
software in use.
For GNU and Unix system, the first 2 numbers are the version of the X
Protocol used on TERMINAL and the 3rd number is the distributor-specific
release number. For MS-Windows, the 3 numbers report the version and
the build number of the OS.
See also the function `x-server-vendor'.
The optional argument TERMINAL specifies which display to ask about.
TERMINAL should be a terminal object, a frame or a display name (a string).
@ -4921,7 +4932,7 @@ x_create_tip_frame (struct x_display_info *dpyinfo,
int width, height;
ptrdiff_t count = SPECPDL_INDEX ();
struct gcpro gcpro1, gcpro2, gcpro3;
int face_change_count_before = face_change_count;
bool face_change_before = face_change;
Lisp_Object buffer;
struct buffer *old_buffer;
@ -5218,11 +5229,11 @@ x_create_tip_frame (struct x_display_info *dpyinfo,
f->can_x_set_window_size = true;
/* Setting attributes of faces of the tooltip frame from resources
and similar will increment face_change_count, which leads to the
clearing of all current matrices. Since this isn't necessary
here, avoid it by resetting face_change_count to the value it
had before we created the tip frame. */
face_change_count = face_change_count_before;
and similar will set face_change, which leads to the clearing of
all current matrices. Since this isn't necessary here, avoid it
by resetting face_change to the value it had before we created
the tip frame. */
face_change = face_change_before;
/* Discard the unwind_protect. */
return unbind_to (count, frame);

View file

@ -1,3 +1,38 @@
2015-01-31 Stefan Monnier <monnier@iro.umontreal.ca>
* automated/eieio-tests.el (eieio-test-23-inheritance-check): Simplify.
2015-01-30 Stefan Monnier <monnier@iro.umontreal.ca>
* automated/core-elisp-tests.el (core-elisp-tests-3-backquote): New test.
2015-01-28 Fabián Ezequiel Gallina <fgallina@gnu.org>
* automated/python-tests.el (python-indent-pep8-1)
(python-indent-pep8-2, python-indent-pep8-3)
(python-indent-after-comment-1, python-indent-after-comment-2)
(python-indent-inside-paren-1, python-indent-inside-paren-2)
(python-indent-after-block-1, python-indent-after-block-2)
(python-indent-after-backslash-1, python-indent-after-backslash-2)
(python-indent-after-backslash-3, python-indent-block-enders-1)
(python-indent-block-enders-2, python-indent-block-enders-3)
(python-indent-block-enders-4, python-indent-block-enders-5)
(python-indent-dedenters-1, python-indent-dedenters-2)
(python-indent-dedenters-3, python-indent-dedenters-4)
(python-indent-dedenters-5, python-indent-dedenters-6)
(python-indent-dedenters-7, python-indent-dedenters-8): Fix tests.
(python-indent-base-case, python-indent-after-block-3)
(python-indent-after-backslash-5, python-indent-inside-paren-3)
(python-indent-inside-paren-4, python-indent-inside-paren-5)
(python-indent-inside-paren-6, python-indent-inside-string-1)
(python-indent-inside-string-2, python-indent-inside-string-3)
(python-indent-dedent-line-backspace-1): New Tests.
2015-01-28 Glenn Morris <rgm@gnu.org>
* automated/regexp-tests.el: Require regexp-opt, which is
not preloaded --without-x.
2015-01-26 Stefan Monnier <monnier@iro.umontreal.ca>
* automated/cl-generic-tests.el: Try and make sure cl-lib is not
@ -33,6 +68,11 @@
* automated/cl-generic-tests.el (setf cl--generic-2): Make sure
the setf can be used already in the body of the method.
2015-01-20 Jorgen Schaefer <contact@jorgenschaefer.de>
* automated/package-test.el (package-test-install-prioritized):
Remove test due to unreproducible failures.
2015-01-20 Michal Nazarewicz <mina86@mina86.com>
* automated/descr-text-test.el: New file with tests for

View file

@ -24,7 +24,7 @@
;;; Code:
(ert-deftest core-elisp-tests ()
(ert-deftest core-elisp-tests-1-defvar-in-let ()
"Test some core Elisp rules."
(with-temp-buffer
;; Check that when defvar is run within a let-binding, the toplevel default
@ -36,7 +36,7 @@
c-e-x)
'(1 2)))))
(ert-deftest core-elisp-test-window-configurations ()
(ert-deftest core-elisp-tests-2-window-configurations ()
"Test properties of window-configurations."
(let ((wc (current-window-configuration)))
(with-current-buffer (window-buffer (frame-selected-window))
@ -45,5 +45,8 @@
(set-window-configuration wc)
(should (or (not mark-active) (mark)))))
(ert-deftest core-elisp-tests-3-backquote ()
(should (eq 3 (eval ``,,'(+ 1 2)))))
(provide 'core-elisp-tests)
;;; core-elisp-tests.el ends here

View file

@ -537,9 +537,8 @@ METHOD is the method that was attempting to be called."
(should (object-of-class-p eitest-ab 'class-b))
(should (object-of-class-p eitest-ab 'class-ab))
(should (eq (eieio-class-parents 'class-a) nil))
;; FIXME: eieio-class-parents now returns class objects!
(should (equal (mapcar #'eieio-class-object (eieio-class-parents 'class-ab))
(mapcar #'eieio-class-object '(class-a class-b))))
(should (equal (eieio-class-parents 'class-ab)
(mapcar #'find-class '(class-a class-b))))
(should (same-class-p eitest-a 'class-a))
(should (class-a-p eitest-a))
(should (not (class-a-p eitest-ab)))

View file

@ -174,13 +174,13 @@ aliqua."
foo = long_function_name(var_one, var_two,
var_three, var_four)
"
(should (eq (car (python-indent-context)) 'no-indent))
(should (eq (car (python-indent-context)) :no-indent))
(should (= (python-indent-calculate-indentation) 0))
(python-tests-look-at "foo = long_function_name(var_one, var_two,")
(should (eq (car (python-indent-context)) 'after-line))
(should (eq (car (python-indent-context)) :after-line))
(should (= (python-indent-calculate-indentation) 0))
(python-tests-look-at "var_three, var_four)")
(should (eq (car (python-indent-context)) 'inside-paren))
(should (eq (car (python-indent-context)) :inside-paren))
(should (= (python-indent-calculate-indentation) 25))))
(ert-deftest python-indent-pep8-2 ()
@ -192,19 +192,22 @@ def long_function_name(
var_four):
print (var_one)
"
(should (eq (car (python-indent-context)) 'no-indent))
(should (eq (car (python-indent-context)) :no-indent))
(should (= (python-indent-calculate-indentation) 0))
(python-tests-look-at "def long_function_name(")
(should (eq (car (python-indent-context)) 'after-line))
(should (eq (car (python-indent-context)) :after-line))
(should (= (python-indent-calculate-indentation) 0))
(python-tests-look-at "var_one, var_two, var_three,")
(should (eq (car (python-indent-context)) 'inside-paren))
(should (eq (car (python-indent-context))
:inside-paren-newline-start-from-block))
(should (= (python-indent-calculate-indentation) 8))
(python-tests-look-at "var_four):")
(should (eq (car (python-indent-context)) 'inside-paren))
(should (eq (car (python-indent-context))
:inside-paren-newline-start-from-block))
(should (= (python-indent-calculate-indentation) 8))
(python-tests-look-at "print (var_one)")
(should (eq (car (python-indent-context)) 'after-beginning-of-block))
(should (eq (car (python-indent-context))
:after-block-start))
(should (= (python-indent-calculate-indentation) 4))))
(ert-deftest python-indent-pep8-3 ()
@ -215,18 +218,34 @@ foo = long_function_name(
var_one, var_two,
var_three, var_four)
"
(should (eq (car (python-indent-context)) 'no-indent))
(should (eq (car (python-indent-context)) :no-indent))
(should (= (python-indent-calculate-indentation) 0))
(python-tests-look-at "foo = long_function_name(")
(should (eq (car (python-indent-context)) 'after-line))
(should (eq (car (python-indent-context)) :after-line))
(should (= (python-indent-calculate-indentation) 0))
(python-tests-look-at "var_one, var_two,")
(should (eq (car (python-indent-context)) 'inside-paren))
(should (eq (car (python-indent-context)) :inside-paren-newline-start))
(should (= (python-indent-calculate-indentation) 4))
(python-tests-look-at "var_three, var_four)")
(should (eq (car (python-indent-context)) 'inside-paren))
(should (eq (car (python-indent-context)) :inside-paren-newline-start))
(should (= (python-indent-calculate-indentation) 4))))
(ert-deftest python-indent-base-case ()
"Check base case does not trigger errors."
(python-tests-with-temp-buffer
"
"
(goto-char (point-min))
(should (eq (car (python-indent-context)) :no-indent))
(should (= (python-indent-calculate-indentation) 0))
(forward-line 1)
(should (eq (car (python-indent-context)) :after-line))
(should (= (python-indent-calculate-indentation) 0))
(forward-line 1)
(should (eq (car (python-indent-context)) :after-line))
(should (= (python-indent-calculate-indentation) 0))))
(ert-deftest python-indent-after-comment-1 ()
"The most simple after-comment case that shouldn't fail."
(python-tests-with-temp-buffer
@ -240,23 +259,23 @@ class Blag(object):
# with the exception with which the first child failed.
"
(python-tests-look-at "# We only complete")
(should (eq (car (python-indent-context)) 'after-line))
(should (eq (car (python-indent-context)) :after-block-end))
(should (= (python-indent-calculate-indentation) 8))
(python-tests-look-at "# terminal state")
(should (eq (car (python-indent-context)) 'after-comment))
(should (eq (car (python-indent-context)) :after-comment))
(should (= (python-indent-calculate-indentation) 8))
(python-tests-look-at "# with the exception")
(should (eq (car (python-indent-context)) 'after-comment))
(should (eq (car (python-indent-context)) :after-comment))
;; This one indents relative to previous block, even given the fact
;; that it was under-indented.
(should (= (python-indent-calculate-indentation) 4))
(python-tests-look-at "# terminal state" -1)
;; It doesn't hurt to check again.
(should (eq (car (python-indent-context)) 'after-comment))
(should (eq (car (python-indent-context)) :after-comment))
(python-indent-line)
(should (= (current-indentation) 8))
(python-tests-look-at "# with the exception")
(should (eq (car (python-indent-context)) 'after-comment))
(should (eq (car (python-indent-context)) :after-comment))
;; Now everything should be lined up.
(should (= (python-indent-calculate-indentation) 8))))
@ -275,33 +294,33 @@ now_we_do_mess_cause_this_is_not_a_comment = 1
# yeah, that.
"
(python-tests-look-at "# I don't do much")
(should (eq (car (python-indent-context)) 'after-beginning-of-block))
(should (eq (car (python-indent-context)) :after-block-start))
(should (= (python-indent-calculate-indentation) 4))
(python-tests-look-at "return arg")
;; Comment here just gets ignored, this line is not a comment so
;; the rules won't apply here.
(should (eq (car (python-indent-context)) 'after-beginning-of-block))
(should (eq (car (python-indent-context)) :after-block-start))
(should (= (python-indent-calculate-indentation) 4))
(python-tests-look-at "# This comment is badly")
(should (eq (car (python-indent-context)) 'after-line))
(should (eq (car (python-indent-context)) :after-block-end))
;; The return keyword moves indentation backwards 4 spaces, but
;; let's assume this comment was placed there because the user
;; wanted to (manually adding spaces or whatever).
(should (= (python-indent-calculate-indentation) 0))
(python-tests-look-at "# but we won't mess")
(should (eq (car (python-indent-context)) 'after-comment))
(should (eq (car (python-indent-context)) :after-comment))
(should (= (python-indent-calculate-indentation) 4))
;; Behave the same for blank lines: potentially a comment.
(forward-line 1)
(should (eq (car (python-indent-context)) 'after-comment))
(should (eq (car (python-indent-context)) :after-comment))
(should (= (python-indent-calculate-indentation) 4))
(python-tests-look-at "now_we_do_mess")
;; Here is where comment indentation starts to get ignored and
;; where the user can't freely indent anymore.
(should (eq (car (python-indent-context)) 'after-line))
(should (eq (car (python-indent-context)) :after-block-end))
(should (= (python-indent-calculate-indentation) 0))
(python-tests-look-at "# yeah, that.")
(should (eq (car (python-indent-context)) 'after-line))
(should (eq (car (python-indent-context)) :after-line))
(should (= (python-indent-calculate-indentation) 0))))
(ert-deftest python-indent-inside-paren-1 ()
@ -325,49 +344,53 @@ data = {
}
"
(python-tests-look-at "data = {")
(should (eq (car (python-indent-context)) 'after-line))
(should (eq (car (python-indent-context)) :after-line))
(should (= (python-indent-calculate-indentation) 0))
(python-tests-look-at "'key':")
(should (eq (car (python-indent-context)) 'inside-paren))
(should (eq (car (python-indent-context)) :inside-paren-newline-start))
(should (= (python-indent-calculate-indentation) 4))
(python-tests-look-at "{")
(should (eq (car (python-indent-context)) 'inside-paren))
(should (eq (car (python-indent-context)) :inside-paren-newline-start))
(should (= (python-indent-calculate-indentation) 4))
(python-tests-look-at "'objlist': [")
(should (eq (car (python-indent-context)) 'inside-paren))
(should (eq (car (python-indent-context)) :inside-paren-newline-start))
(should (= (python-indent-calculate-indentation) 8))
(python-tests-look-at "{")
(should (eq (car (python-indent-context)) 'inside-paren))
(should (eq (car (python-indent-context)) :inside-paren-newline-start))
(should (= (python-indent-calculate-indentation) 12))
(python-tests-look-at "'pk': 1,")
(should (eq (car (python-indent-context)) 'inside-paren))
(should (eq (car (python-indent-context)) :inside-paren-newline-start))
(should (= (python-indent-calculate-indentation) 16))
(python-tests-look-at "'name': 'first',")
(should (eq (car (python-indent-context)) 'inside-paren))
(should (eq (car (python-indent-context)) :inside-paren-newline-start))
(should (= (python-indent-calculate-indentation) 16))
(python-tests-look-at "},")
(should (eq (car (python-indent-context)) 'inside-paren))
(should (eq (car (python-indent-context))
:inside-paren-at-closing-nested-paren))
(should (= (python-indent-calculate-indentation) 12))
(python-tests-look-at "{")
(should (eq (car (python-indent-context)) 'inside-paren))
(should (eq (car (python-indent-context)) :inside-paren-newline-start))
(should (= (python-indent-calculate-indentation) 12))
(python-tests-look-at "'pk': 2,")
(should (eq (car (python-indent-context)) 'inside-paren))
(should (eq (car (python-indent-context)) :inside-paren-newline-start))
(should (= (python-indent-calculate-indentation) 16))
(python-tests-look-at "'name': 'second',")
(should (eq (car (python-indent-context)) 'inside-paren))
(should (eq (car (python-indent-context)) :inside-paren-newline-start))
(should (= (python-indent-calculate-indentation) 16))
(python-tests-look-at "}")
(should (eq (car (python-indent-context)) 'inside-paren))
(should (eq (car (python-indent-context))
:inside-paren-at-closing-nested-paren))
(should (= (python-indent-calculate-indentation) 12))
(python-tests-look-at "]")
(should (eq (car (python-indent-context)) 'inside-paren))
(should (eq (car (python-indent-context))
:inside-paren-at-closing-nested-paren))
(should (= (python-indent-calculate-indentation) 8))
(python-tests-look-at "}")
(should (eq (car (python-indent-context)) 'inside-paren))
(should (eq (car (python-indent-context))
:inside-paren-at-closing-nested-paren))
(should (= (python-indent-calculate-indentation) 4))
(python-tests-look-at "}")
(should (eq (car (python-indent-context)) 'inside-paren))
(should (eq (car (python-indent-context)) :inside-paren-at-closing-paren))
(should (= (python-indent-calculate-indentation) 0))))
(ert-deftest python-indent-inside-paren-2 ()
@ -384,43 +407,121 @@ data = {'key': {
}}
"
(python-tests-look-at "data = {")
(should (eq (car (python-indent-context)) 'after-line))
(should (eq (car (python-indent-context)) :after-line))
(should (= (python-indent-calculate-indentation) 0))
(python-tests-look-at "'objlist': [")
(should (eq (car (python-indent-context)) 'inside-paren))
(should (eq (car (python-indent-context)) :inside-paren-newline-start))
(should (= (python-indent-calculate-indentation) 4))
(python-tests-look-at "{'pk': 1,")
(should (eq (car (python-indent-context)) 'inside-paren))
(should (eq (car (python-indent-context)) :inside-paren-newline-start))
(should (= (python-indent-calculate-indentation) 8))
(python-tests-look-at "'name': 'first'},")
(should (eq (car (python-indent-context)) 'inside-paren))
(should (eq (car (python-indent-context)) :inside-paren))
(should (= (python-indent-calculate-indentation) 9))
(python-tests-look-at "{'pk': 2,")
(should (eq (car (python-indent-context)) 'inside-paren))
(should (eq (car (python-indent-context)) :inside-paren-newline-start))
(should (= (python-indent-calculate-indentation) 8))
(python-tests-look-at "'name': 'second'}")
(should (eq (car (python-indent-context)) 'inside-paren))
(should (eq (car (python-indent-context)) :inside-paren))
(should (= (python-indent-calculate-indentation) 9))
(python-tests-look-at "]")
(should (eq (car (python-indent-context)) 'inside-paren))
(should (eq (car (python-indent-context))
:inside-paren-at-closing-nested-paren))
(should (= (python-indent-calculate-indentation) 4))
(python-tests-look-at "}}")
(should (eq (car (python-indent-context)) 'inside-paren))
(should (eq (car (python-indent-context))
:inside-paren-at-closing-nested-paren))
(should (= (python-indent-calculate-indentation) 0))
(python-tests-look-at "}")
(should (eq (car (python-indent-context)) 'inside-paren))
(should (eq (car (python-indent-context)) :inside-paren-at-closing-paren))
(should (= (python-indent-calculate-indentation) 0))))
(ert-deftest python-indent-inside-paren-3 ()
"The simplest case possible."
(python-tests-with-temp-buffer
"
data = ('these',
'are',
'the',
'tokens')
"
(python-tests-look-at "data = ('these',")
(should (eq (car (python-indent-context)) :after-line))
(should (= (python-indent-calculate-indentation) 0))
(forward-line 1)
(should (eq (car (python-indent-context)) :inside-paren))
(should (= (python-indent-calculate-indentation) 8))
(forward-line 1)
(should (eq (car (python-indent-context)) :inside-paren))
(should (= (python-indent-calculate-indentation) 8))
(forward-line 1)
(should (eq (car (python-indent-context)) :inside-paren))
(should (= (python-indent-calculate-indentation) 8))))
(ert-deftest python-indent-inside-paren-4 ()
"Respect indentation of first column."
(python-tests-with-temp-buffer
"
data = [ [ 'these', 'are'],
['the', 'tokens' ] ]
"
(python-tests-look-at "data = [ [ 'these', 'are'],")
(should (eq (car (python-indent-context)) :after-line))
(should (= (python-indent-calculate-indentation) 0))
(forward-line 1)
(should (eq (car (python-indent-context)) :inside-paren))
(should (= (python-indent-calculate-indentation) 9))))
(ert-deftest python-indent-inside-paren-5 ()
"Test when :inside-paren initial parens are skipped in context start."
(python-tests-with-temp-buffer
"
while ((not some_condition) and
another_condition):
do_something_interesting(
with_some_arg)
"
(python-tests-look-at "while ((not some_condition) and")
(should (eq (car (python-indent-context)) :after-line))
(should (= (python-indent-calculate-indentation) 0))
(forward-line 1)
(should (eq (car (python-indent-context)) :inside-paren))
(should (= (python-indent-calculate-indentation) 7))
(forward-line 1)
(should (eq (car (python-indent-context)) :after-block-start))
(should (= (python-indent-calculate-indentation) 4))
(forward-line 1)
(should (eq (car (python-indent-context)) :inside-paren-newline-start))
(should (= (python-indent-calculate-indentation) 8))))
(ert-deftest python-indent-inside-paren-6 ()
"This should be aligned.."
(python-tests-with-temp-buffer
"
CHOICES = (('some', 'choice'),
('another', 'choice'),
('more', 'choices'))
"
(python-tests-look-at "CHOICES = (('some', 'choice'),")
(should (eq (car (python-indent-context)) :after-line))
(should (= (python-indent-calculate-indentation) 0))
(forward-line 1)
(should (eq (car (python-indent-context)) :inside-paren))
(should (= (python-indent-calculate-indentation) 11))
(forward-line 1)
(should (eq (car (python-indent-context)) :inside-paren))
(should (= (python-indent-calculate-indentation) 11))))
(ert-deftest python-indent-after-block-1 ()
"The most simple after-block case that shouldn't fail."
(python-tests-with-temp-buffer
"
def foo(a, b, c=True):
"
(should (eq (car (python-indent-context)) 'no-indent))
(should (eq (car (python-indent-context)) :no-indent))
(should (= (python-indent-calculate-indentation) 0))
(goto-char (point-max))
(should (eq (car (python-indent-context)) 'after-beginning-of-block))
(should (eq (car (python-indent-context)) :after-block-start))
(should (= (python-indent-calculate-indentation) 4))))
(ert-deftest python-indent-after-block-2 ()
@ -432,9 +533,28 @@ def foo(a, b, c={
}):
"
(goto-char (point-max))
(should (eq (car (python-indent-context)) 'after-beginning-of-block))
(should (eq (car (python-indent-context)) :after-block-start))
(should (= (python-indent-calculate-indentation) 4))))
(ert-deftest python-indent-after-block-3 ()
"A weird (malformed) sample, usually found in python shells."
(python-tests-with-temp-buffer
"
In [1]:
def func():
pass
In [2]:
something
"
(python-tests-look-at "pass")
(should (eq (car (python-indent-context)) :after-block-start))
(should (= (python-indent-calculate-indentation) 4))
(python-tests-look-at "something")
(end-of-line)
(should (eq (car (python-indent-context)) :after-line))
(should (= (python-indent-calculate-indentation) 0))))
(ert-deftest python-indent-after-backslash-1 ()
"The most common case."
(python-tests-with-temp-buffer
@ -444,16 +564,16 @@ from foo.bar.baz import something, something_1 \\\\
something_4, something_5
"
(python-tests-look-at "from foo.bar.baz import something, something_1")
(should (eq (car (python-indent-context)) 'after-line))
(should (eq (car (python-indent-context)) :after-line))
(should (= (python-indent-calculate-indentation) 0))
(python-tests-look-at "something_2 something_3,")
(should (eq (car (python-indent-context)) 'after-backslash))
(should (eq (car (python-indent-context)) :after-backslash-first-line))
(should (= (python-indent-calculate-indentation) 4))
(python-tests-look-at "something_4, something_5")
(should (eq (car (python-indent-context)) 'after-backslash))
(should (eq (car (python-indent-context)) :after-backslash))
(should (= (python-indent-calculate-indentation) 4))
(goto-char (point-max))
(should (eq (car (python-indent-context)) 'after-line))
(should (eq (car (python-indent-context)) :after-line))
(should (= (python-indent-calculate-indentation) 0))))
(ert-deftest python-indent-after-backslash-2 ()
@ -471,40 +591,104 @@ objects = Thing.objects.all() \\\\
.values_list()
"
(python-tests-look-at "objects = Thing.objects.all()")
(should (eq (car (python-indent-context)) 'after-line))
(should (eq (car (python-indent-context)) :after-line))
(should (= (python-indent-calculate-indentation) 0))
(python-tests-look-at ".filter(")
(should (eq (car (python-indent-context)) 'after-backslash))
(should (eq (car (python-indent-context))
:after-backslash-dotted-continuation))
(should (= (python-indent-calculate-indentation) 23))
(python-tests-look-at "type='toy',")
(should (eq (car (python-indent-context)) 'inside-paren))
(should (eq (car (python-indent-context)) :inside-paren-newline-start))
(should (= (python-indent-calculate-indentation) 27))
(python-tests-look-at "status='bought'")
(should (eq (car (python-indent-context)) 'inside-paren))
(should (eq (car (python-indent-context)) :inside-paren-newline-start))
(should (= (python-indent-calculate-indentation) 27))
(python-tests-look-at ") \\\\")
(should (eq (car (python-indent-context)) 'inside-paren))
(should (eq (car (python-indent-context)) :inside-paren-at-closing-paren))
(should (= (python-indent-calculate-indentation) 23))
(python-tests-look-at ".aggregate(")
(should (eq (car (python-indent-context)) 'after-backslash))
(should (eq (car (python-indent-context))
:after-backslash-dotted-continuation))
(should (= (python-indent-calculate-indentation) 23))
(python-tests-look-at "Sum('amount')")
(should (eq (car (python-indent-context)) 'inside-paren))
(should (eq (car (python-indent-context)) :inside-paren-newline-start))
(should (= (python-indent-calculate-indentation) 27))
(python-tests-look-at ") \\\\")
(should (eq (car (python-indent-context)) 'inside-paren))
(should (eq (car (python-indent-context)) :inside-paren-at-closing-paren))
(should (= (python-indent-calculate-indentation) 23))
(python-tests-look-at ".values_list()")
(should (eq (car (python-indent-context)) 'after-backslash))
(should (eq (car (python-indent-context))
:after-backslash-dotted-continuation))
(should (= (python-indent-calculate-indentation) 23))
(forward-line 1)
(should (eq (car (python-indent-context)) 'after-line))
(should (eq (car (python-indent-context)) :after-line))
(should (= (python-indent-calculate-indentation) 0))))
(ert-deftest python-indent-after-backslash-3 ()
"Backslash continuation from block start."
(python-tests-with-temp-buffer
"
with open('/path/to/some/file/you/want/to/read') as file_1, \\\\
open('/path/to/some/file/being/written', 'w') as file_2:
file_2.write(file_1.read())
"
(python-tests-look-at
"with open('/path/to/some/file/you/want/to/read') as file_1, \\\\")
(should (eq (car (python-indent-context)) :after-line))
(should (= (python-indent-calculate-indentation) 0))
(python-tests-look-at
"open('/path/to/some/file/being/written', 'w') as file_2")
(should (eq (car (python-indent-context))
:after-backslash-block-continuation))
(should (= (python-indent-calculate-indentation) 5))
(python-tests-look-at "file_2.write(file_1.read())")
(should (eq (car (python-indent-context)) :after-block-start))
(should (= (python-indent-calculate-indentation) 4))))
(ert-deftest python-indent-after-backslash-4 ()
"Backslash continuation from assignment."
(python-tests-with-temp-buffer
"
super_awful_assignment = some_calculation() and \\\\
another_calculation() and \\\\
some_final_calculation()
"
(python-tests-look-at
"super_awful_assignment = some_calculation() and \\\\")
(should (eq (car (python-indent-context)) :after-line))
(should (= (python-indent-calculate-indentation) 0))
(python-tests-look-at "another_calculation() and \\\\")
(should (eq (car (python-indent-context))
:after-backslash-assignment-continuation))
(should (= (python-indent-calculate-indentation) 25))
(python-tests-look-at "some_final_calculation()")
(should (eq (car (python-indent-context)) :after-backslash))
(should (= (python-indent-calculate-indentation) 25))))
(ert-deftest python-indent-after-backslash-5 ()
"Dotted continuation bizarre example."
(python-tests-with-temp-buffer
"
def delete_all_things():
Thing \\\\
.objects.all() \\\\
.delete()
"
(python-tests-look-at "Thing \\\\")
(should (eq (car (python-indent-context)) :after-block-start))
(should (= (python-indent-calculate-indentation) 4))
(python-tests-look-at ".objects.all() \\\\")
(should (eq (car (python-indent-context)) :after-backslash-first-line))
(should (= (python-indent-calculate-indentation) 8))
(python-tests-look-at ".delete()")
(should (eq (car (python-indent-context))
:after-backslash-dotted-continuation))
(should (= (python-indent-calculate-indentation) 16))))
(ert-deftest python-indent-block-enders-1 ()
"Test de-indentation for pass keyword."
(python-tests-with-temp-buffer
"
"
Class foo(object):
def bar(self):
@ -516,17 +700,18 @@ Class foo(object):
else:
pass
"
(python-tests-look-at "3)")
(forward-line 1)
(should (= (python-indent-calculate-indentation) 8))
(python-tests-look-at "pass")
(forward-line 1)
(should (= (python-indent-calculate-indentation) 8))))
(python-tests-look-at "3)")
(forward-line 1)
(should (= (python-indent-calculate-indentation) 8))
(python-tests-look-at "pass")
(forward-line 1)
(should (eq (car (python-indent-context)) :after-block-end))
(should (= (python-indent-calculate-indentation) 8))))
(ert-deftest python-indent-block-enders-2 ()
"Test de-indentation for return keyword."
(python-tests-with-temp-buffer
"
"
Class foo(object):
'''raise lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
@ -539,64 +724,68 @@ Class foo(object):
2,
3)
"
(python-tests-look-at "def")
(should (= (python-indent-calculate-indentation) 4))
(python-tests-look-at "if")
(should (= (python-indent-calculate-indentation) 8))
(python-tests-look-at "return")
(should (= (python-indent-calculate-indentation) 12))
(goto-char (point-max))
(should (= (python-indent-calculate-indentation) 8))))
(python-tests-look-at "def")
(should (= (python-indent-calculate-indentation) 4))
(python-tests-look-at "if")
(should (= (python-indent-calculate-indentation) 8))
(python-tests-look-at "return")
(should (= (python-indent-calculate-indentation) 12))
(goto-char (point-max))
(should (eq (car (python-indent-context)) :after-block-end))
(should (= (python-indent-calculate-indentation) 8))))
(ert-deftest python-indent-block-enders-3 ()
"Test de-indentation for continue keyword."
(python-tests-with-temp-buffer
"
"
for element in lst:
if element is None:
continue
"
(python-tests-look-at "if")
(should (= (python-indent-calculate-indentation) 4))
(python-tests-look-at "continue")
(should (= (python-indent-calculate-indentation) 8))
(forward-line 1)
(should (= (python-indent-calculate-indentation) 4))))
(python-tests-look-at "if")
(should (= (python-indent-calculate-indentation) 4))
(python-tests-look-at "continue")
(should (= (python-indent-calculate-indentation) 8))
(forward-line 1)
(should (eq (car (python-indent-context)) :after-block-end))
(should (= (python-indent-calculate-indentation) 4))))
(ert-deftest python-indent-block-enders-4 ()
"Test de-indentation for break keyword."
(python-tests-with-temp-buffer
"
"
for element in lst:
if element is None:
break
"
(python-tests-look-at "if")
(should (= (python-indent-calculate-indentation) 4))
(python-tests-look-at "break")
(should (= (python-indent-calculate-indentation) 8))
(forward-line 1)
(should (= (python-indent-calculate-indentation) 4))))
(python-tests-look-at "if")
(should (= (python-indent-calculate-indentation) 4))
(python-tests-look-at "break")
(should (= (python-indent-calculate-indentation) 8))
(forward-line 1)
(should (eq (car (python-indent-context)) :after-block-end))
(should (= (python-indent-calculate-indentation) 4))))
(ert-deftest python-indent-block-enders-5 ()
"Test de-indentation for raise keyword."
(python-tests-with-temp-buffer
"
"
for element in lst:
if element is None:
raise ValueError('Element cannot be None')
"
(python-tests-look-at "if")
(should (= (python-indent-calculate-indentation) 4))
(python-tests-look-at "raise")
(should (= (python-indent-calculate-indentation) 8))
(forward-line 1)
(should (= (python-indent-calculate-indentation) 4))))
(python-tests-look-at "if")
(should (= (python-indent-calculate-indentation) 4))
(python-tests-look-at "raise")
(should (= (python-indent-calculate-indentation) 8))
(forward-line 1)
(should (eq (car (python-indent-context)) :after-block-end))
(should (= (python-indent-calculate-indentation) 4))))
(ert-deftest python-indent-dedenters-1 ()
"Test de-indentation for the elif keyword."
(python-tests-with-temp-buffer
"
"
if save:
try:
write_to_disk(data)
@ -604,15 +793,15 @@ if save:
cleanup()
elif
"
(python-tests-look-at "elif\n")
(should (eq (car (python-indent-context)) 'dedenter-statement))
(should (= (python-indent-calculate-indentation) 0))
(should (equal (python-indent-calculate-levels) '(0)))))
(python-tests-look-at "elif\n")
(should (eq (car (python-indent-context)) :at-dedenter-block-start))
(should (= (python-indent-calculate-indentation) 0))
(should (= (python-indent-calculate-indentation t) 0))))
(ert-deftest python-indent-dedenters-2 ()
"Test de-indentation for the else keyword."
(python-tests-with-temp-buffer
"
"
if save:
try:
write_to_disk(data)
@ -627,43 +816,50 @@ if save:
finally:
data.free()
"
(python-tests-look-at "else\n")
(should (eq (car (python-indent-context)) 'dedenter-statement))
(should (= (python-indent-calculate-indentation) 8))
(should (equal (python-indent-calculate-levels) '(0 4 8)))))
(python-tests-look-at "else\n")
(should (eq (car (python-indent-context)) :at-dedenter-block-start))
(should (= (python-indent-calculate-indentation) 8))
(python-indent-line t)
(should (= (python-indent-calculate-indentation t) 4))
(python-indent-line t)
(should (= (python-indent-calculate-indentation t) 0))
(python-indent-line t)
(should (= (python-indent-calculate-indentation t) 8))))
(ert-deftest python-indent-dedenters-3 ()
"Test de-indentation for the except keyword."
(python-tests-with-temp-buffer
"
"
if save:
try:
write_to_disk(data)
except
"
(python-tests-look-at "except\n")
(should (eq (car (python-indent-context)) 'dedenter-statement))
(should (= (python-indent-calculate-indentation) 4))
(should (equal (python-indent-calculate-levels) '(4)))))
(python-tests-look-at "except\n")
(should (eq (car (python-indent-context)) :at-dedenter-block-start))
(should (= (python-indent-calculate-indentation) 4))
(python-indent-line t)
(should (= (python-indent-calculate-indentation t) 4))))
(ert-deftest python-indent-dedenters-4 ()
"Test de-indentation for the finally keyword."
(python-tests-with-temp-buffer
"
"
if save:
try:
write_to_disk(data)
finally
"
(python-tests-look-at "finally\n")
(should (eq (car (python-indent-context)) 'dedenter-statement))
(should (= (python-indent-calculate-indentation) 4))
(should (equal (python-indent-calculate-levels) '(4)))))
(python-tests-look-at "finally\n")
(should (eq (car (python-indent-context)) :at-dedenter-block-start))
(should (= (python-indent-calculate-indentation) 4))
(python-indent-line t)
(should (= (python-indent-calculate-indentation) 4))))
(ert-deftest python-indent-dedenters-5 ()
"Test invalid levels are skipped in a complex example."
(python-tests-with-temp-buffer
"
"
if save:
try:
write_to_disk(data)
@ -676,29 +872,31 @@ if save:
do_cleanup()
else
"
(python-tests-look-at "else\n")
(should (eq (car (python-indent-context)) 'dedenter-statement))
(should (= (python-indent-calculate-indentation) 8))
(should (equal (python-indent-calculate-levels) '(0 8)))))
(python-tests-look-at "else\n")
(should (eq (car (python-indent-context)) :at-dedenter-block-start))
(should (= (python-indent-calculate-indentation) 8))
(should (= (python-indent-calculate-indentation t) 0))
(python-indent-line t)
(should (= (python-indent-calculate-indentation t) 8))))
(ert-deftest python-indent-dedenters-6 ()
"Test indentation is zero when no opening block for dedenter."
(python-tests-with-temp-buffer
"
"
try:
# if save:
write_to_disk(data)
else
"
(python-tests-look-at "else\n")
(should (eq (car (python-indent-context)) 'dedenter-statement))
(should (= (python-indent-calculate-indentation) 0))
(should (equal (python-indent-calculate-levels) '(0)))))
(python-tests-look-at "else\n")
(should (eq (car (python-indent-context)) :at-dedenter-block-start))
(should (= (python-indent-calculate-indentation) 0))
(should (= (python-indent-calculate-indentation t) 0))))
(ert-deftest python-indent-dedenters-7 ()
"Test indentation case from Bug#15163."
(python-tests-with-temp-buffer
"
"
if a:
if b:
pass
@ -706,10 +904,10 @@ if a:
pass
else:
"
(python-tests-look-at "else:" 2)
(should (eq (car (python-indent-context)) 'dedenter-statement))
(should (= (python-indent-calculate-indentation) 0))
(should (equal (python-indent-calculate-levels) '(0)))))
(python-tests-look-at "else:" 2)
(should (eq (car (python-indent-context)) :at-dedenter-block-start))
(should (= (python-indent-calculate-indentation) 0))
(should (= (python-indent-calculate-indentation t) 0))))
(ert-deftest python-indent-dedenters-8 ()
"Test indentation for Bug#18432."
@ -721,10 +919,99 @@ if (a == 1 or
elif (a == 3 or
a == 4):
"
(python-tests-look-at "elif (a == 3 or")
(should (eq (car (python-indent-context)) :at-dedenter-block-start))
(should (= (python-indent-calculate-indentation) 0))
(should (= (python-indent-calculate-indentation t) 0))
(python-tests-look-at "a == 4):\n")
(should (eq (car (python-indent-context)) 'inside-paren))
(should (eq (car (python-indent-context)) :inside-paren))
(should (= (python-indent-calculate-indentation) 6))
(should (equal (python-indent-calculate-levels) '(0 4 6)))))
(python-indent-line)
(should (= (python-indent-calculate-indentation t) 4))
(python-indent-line t)
(should (= (python-indent-calculate-indentation t) 0))
(python-indent-line t)
(should (= (python-indent-calculate-indentation t) 6))))
(ert-deftest python-indent-inside-string-1 ()
"Test indentation for strings."
(python-tests-with-temp-buffer
"
multiline = '''
bunch
of
lines
'''
"
(python-tests-look-at "multiline = '''")
(should (eq (car (python-indent-context)) :after-line))
(should (= (python-indent-calculate-indentation) 0))
(python-tests-look-at "bunch")
(should (eq (car (python-indent-context)) :inside-string))
(should (= (python-indent-calculate-indentation) 0))
(python-tests-look-at "of")
(should (eq (car (python-indent-context)) :inside-string))
(should (= (python-indent-calculate-indentation) 0))
(python-tests-look-at "lines")
(should (eq (car (python-indent-context)) :inside-string))
(should (= (python-indent-calculate-indentation) 0))
(python-tests-look-at "'''")
(should (eq (car (python-indent-context)) :inside-string))
(should (= (python-indent-calculate-indentation) 0))))
(ert-deftest python-indent-inside-string-2 ()
"Test indentation for docstrings."
(python-tests-with-temp-buffer
"
def fn(a, b, c=True):
'''docstring
bunch
of
lines
'''
"
(python-tests-look-at "'''docstring")
(should (eq (car (python-indent-context)) :after-block-start))
(should (= (python-indent-calculate-indentation) 4))
(python-tests-look-at "bunch")
(should (eq (car (python-indent-context)) :inside-string))
(should (= (python-indent-calculate-indentation) 4))
(python-tests-look-at "of")
(should (eq (car (python-indent-context)) :inside-string))
(should (= (python-indent-calculate-indentation) 4))
(python-tests-look-at "lines")
(should (eq (car (python-indent-context)) :inside-string))
(should (= (python-indent-calculate-indentation) 4))
(python-tests-look-at "'''")
(should (eq (car (python-indent-context)) :inside-string))
(should (= (python-indent-calculate-indentation) 4))))
(ert-deftest python-indent-inside-string-3 ()
"Test indentation for nested strings."
(python-tests-with-temp-buffer
"
def fn(a, b, c=True):
some_var = '''
bunch
of
lines
'''
"
(python-tests-look-at "some_var = '''")
(should (eq (car (python-indent-context)) :after-block-start))
(should (= (python-indent-calculate-indentation) 4))
(python-tests-look-at "bunch")
(should (eq (car (python-indent-context)) :inside-string))
(should (= (python-indent-calculate-indentation) 4))
(python-tests-look-at "of")
(should (eq (car (python-indent-context)) :inside-string))
(should (= (python-indent-calculate-indentation) 4))
(python-tests-look-at "lines")
(should (eq (car (python-indent-context)) :inside-string))
(should (= (python-indent-calculate-indentation) 4))
(python-tests-look-at "'''")
(should (eq (car (python-indent-context)) :inside-string))
(should (= (python-indent-calculate-indentation) 4))))
(ert-deftest python-indent-electric-colon-1 ()
"Test indentation case from Bug#18228."
@ -1802,6 +2089,23 @@ def f():
(python-nav-backward-up-list)
(should (looking-at "def f():"))))
(ert-deftest python-indent-dedent-line-backspace-1 ()
"Check de-indentation on first call. Bug#18319."
(python-tests-with-temp-buffer
"
if True:
x ()
if False:
"
(python-tests-look-at "if False:")
(call-interactively #'python-indent-dedent-line-backspace)
(should (zerop (current-indentation)))
;; XXX: This should be a call to `undo' but it's triggering errors.
(insert " ")
(should (= (current-indentation) 4))
(call-interactively #'python-indent-dedent-line-backspace)
(should (zerop (current-indentation)))))
;;; Shell integration

View file

@ -23,6 +23,8 @@
;;; Code:
(require 'regexp-opt)
(ert-deftest regexp-test-regexp-opt ()
"Test the `compilation-error-regexp-alist' regexps.
The test data is in `compile-tests--test-regexps-data'."