2000-09-15 14:35:35 -04:00
|
|
|
|
PEP: 42
|
2000-09-15 16:50:35 -04:00
|
|
|
|
Title: Feature Requests
|
2000-09-15 14:35:35 -04:00
|
|
|
|
Version: $Revision$
|
2001-08-01 16:11:56 -04:00
|
|
|
|
Author: Jeremy Hylton <jeremy@zope.com>
|
2000-09-15 14:35:35 -04:00
|
|
|
|
Status: Active
|
|
|
|
|
Type: Informational
|
|
|
|
|
Created: 12-Sep-2000
|
|
|
|
|
|
2001-06-04 14:50:40 -04:00
|
|
|
|
|
2000-09-15 14:35:35 -04:00
|
|
|
|
Introduction
|
|
|
|
|
|
2000-09-15 16:50:35 -04:00
|
|
|
|
This PEP contains a list of feature requests that may be
|
2000-09-15 14:35:35 -04:00
|
|
|
|
considered for future versions of Python. Large feature requests
|
2000-09-15 16:50:35 -04:00
|
|
|
|
should not be included here, but should be described in separate
|
|
|
|
|
PEPs; however a large feature request that doesn't have its own
|
|
|
|
|
PEP can be listed here until its own PEP is created. See
|
2000-09-15 14:35:35 -04:00
|
|
|
|
pep-0000.txt for details.
|
|
|
|
|
|
2000-09-15 22:02:45 -04:00
|
|
|
|
This PEP was created to allow us to close bug reports that are really
|
|
|
|
|
feature requests. Marked as Open, they distract from the list of real
|
|
|
|
|
bugs (which should ideally be less than a page). Marked as Closed, they
|
|
|
|
|
tend to be forgotten. The procedure now is: if a bug report is really
|
|
|
|
|
a feature request, add the feature request to this PEP; mark the bug as
|
|
|
|
|
"feature request", "later", and "closed"; and add a comment to the bug
|
|
|
|
|
saying that this is the case (mentioning the PEP explicitly). It is
|
|
|
|
|
also acceptable to move large feature requests directly from the bugs
|
|
|
|
|
database to a separate PEP.
|
2000-09-15 16:50:35 -04:00
|
|
|
|
|
2000-09-15 14:35:35 -04:00
|
|
|
|
|
2000-09-15 15:27:09 -04:00
|
|
|
|
Core Language / Builtins
|
2000-09-15 14:35:35 -04:00
|
|
|
|
|
2000-09-15 14:56:47 -04:00
|
|
|
|
- A builtin function that returns the number of bytes an object
|
|
|
|
|
uses internally. Apparently mxTools has a sizeof function that
|
|
|
|
|
returns the size of the object struct itself.
|
|
|
|
|
|
2001-08-09 12:53:49 -04:00
|
|
|
|
http://sf.net/bugs/?func=detailbug&bug_id=110835&group_id=5470
|
2000-09-15 14:35:35 -04:00
|
|
|
|
|
2000-09-15 15:22:22 -04:00
|
|
|
|
- Add C API functions to help Windows users who are building
|
|
|
|
|
embedded applications where the FILE * structure does not match
|
|
|
|
|
the FILE * the interpreter was compiled with.
|
|
|
|
|
|
2001-08-09 12:53:49 -04:00
|
|
|
|
http://sf.net/bugs/?func=detailbug&bug_id=110821&group_id=5470
|
2000-09-15 15:22:22 -04:00
|
|
|
|
|
|
|
|
|
See this bug report for a specific suggestion that will allow a
|
|
|
|
|
Borland C++ builder application to interact with a python.dll
|
|
|
|
|
build with MSVC.
|
|
|
|
|
|
2000-10-06 11:56:27 -04:00
|
|
|
|
- The parser should handle more deeply nested parse trees.
|
|
|
|
|
|
|
|
|
|
The following will fail -- eval("["*50 + "]"*50) -- because the
|
|
|
|
|
parser has a hard-coded limit on stack size. This limit should
|
|
|
|
|
be raised or removed. Removal would be hard because the
|
|
|
|
|
current compiler can overflow the C stack if the nesting is too
|
2000-11-14 15:27:54 -05:00
|
|
|
|
deep.
|
2000-10-06 11:56:27 -04:00
|
|
|
|
|
2001-08-09 12:53:49 -04:00
|
|
|
|
http://sf.net/bugs/?func=detailbug&bug_id=115555&group_id=5470
|
2000-10-05 11:36:34 -04:00
|
|
|
|
|
2000-10-12 12:17:36 -04:00
|
|
|
|
- The buffer interface could be smarter when a buffer object is
|
|
|
|
|
created that depends on another buffer object -- if the
|
|
|
|
|
original buffer object has no base, the depending object will
|
|
|
|
|
have no base either. It could be argued that the depending
|
|
|
|
|
object should have the original object as a base. Or not.
|
|
|
|
|
|
2001-08-09 12:53:49 -04:00
|
|
|
|
http://sf.net/bugs/?func=detailbug&bug_id=116405&group_id=5470
|
2000-10-12 12:17:36 -04:00
|
|
|
|
|
2001-06-04 14:50:40 -04:00
|
|
|
|
|
2000-09-15 15:27:09 -04:00
|
|
|
|
Standard Library
|
|
|
|
|
|
2000-09-15 18:02:51 -04:00
|
|
|
|
- The test suite is incomplete (and probably always will be).
|
|
|
|
|
This is a reminder to people that more regression tests are
|
|
|
|
|
needed.
|
|
|
|
|
|
2001-08-09 12:53:49 -04:00
|
|
|
|
http://sf.net/bugs/?func=detailbug&group_id=5470&bug_id=110819
|
2000-09-15 18:02:51 -04:00
|
|
|
|
|
2000-09-15 15:27:09 -04:00
|
|
|
|
- The urllib module should support proxies which require
|
|
|
|
|
authenication. See SourceForge bug #110619 for information:
|
|
|
|
|
|
2001-08-09 12:53:49 -04:00
|
|
|
|
http://sf.net/bugs/?func=detailbug&bug_id=110619&group_id=5470
|
2000-09-15 15:27:09 -04:00
|
|
|
|
|
2000-09-15 16:04:01 -04:00
|
|
|
|
- Use objects with attributes in place of tuples of values for
|
|
|
|
|
return values in several places in the library. Two specific
|
|
|
|
|
APIs which could use this treatment include os.stat() and
|
|
|
|
|
os.statvfs(); see SourceForge bug #111481:
|
|
|
|
|
|
2001-08-09 12:53:49 -04:00
|
|
|
|
http://sf.net/bugs/?func=detailbug&bug_id=111481&group_id=5470
|
2000-09-15 16:04:01 -04:00
|
|
|
|
|
|
|
|
|
which shows very specifically why this approach is better than
|
|
|
|
|
the tuple approach: additional attributes can be added as needed
|
|
|
|
|
without having as detrimental an affect on existing code.
|
|
|
|
|
|
|
|
|
|
- os.rename() should be modified to handle EXDEV errors on
|
|
|
|
|
platforms that don't allow rename() to operate across filesystem
|
|
|
|
|
boundaries by copying the file over and removing the original.
|
|
|
|
|
Linux is one system that requires this treatment.
|
|
|
|
|
|
2001-08-09 12:53:49 -04:00
|
|
|
|
http://sf.net/bugs/?func=detailbug&bug_id=112317&group_id=5470
|
2000-09-15 16:04:01 -04:00
|
|
|
|
|
2000-09-17 15:36:22 -04:00
|
|
|
|
- signal handling doesn't always work as expected. E.g. if
|
|
|
|
|
sys.stdin.readline() is interrupted by a (returning) signal
|
|
|
|
|
handler, it returns "". It would be better to make it raise an
|
|
|
|
|
exception (corresponding to EINTR) or to restart. But these
|
|
|
|
|
changes would have to applied to all places that can do blocking
|
|
|
|
|
interruptable I/O. So it's a big project.
|
|
|
|
|
|
2001-08-09 12:53:49 -04:00
|
|
|
|
http://sf.net/bugs/?func=detailbug&bug_id=110599&group_id=5470
|
2000-09-17 15:36:22 -04:00
|
|
|
|
|
2000-09-15 22:02:45 -04:00
|
|
|
|
- Ensure that all .py files in the std library use 4-space indents and
|
|
|
|
|
no hard tabs. This was actually a PEP200 precondition for the
|
|
|
|
|
release of 2.0b1, but got misinterpreted as the weaker condition that
|
|
|
|
|
tabnanny not complain. Tim Peters will do this now, but, since about
|
|
|
|
|
250 files are affected, will wait until after 2.0final is released.
|
|
|
|
|
|
2001-08-09 12:53:49 -04:00
|
|
|
|
http://sf.net/bugs/?func=detailbug&bug_id=114557&group_id=5470
|
2000-09-15 16:04:01 -04:00
|
|
|
|
|
2000-09-15 22:06:02 -04:00
|
|
|
|
- Port the Python SSL code to Windows.
|
|
|
|
|
|
2001-08-09 12:53:49 -04:00
|
|
|
|
http://sf.net/bugs/?func=detailbug&bug_id=110683&group_id=5470
|
2000-09-15 22:06:02 -04:00
|
|
|
|
|
2000-09-15 22:17:51 -04:00
|
|
|
|
- Extend Windows utime to accept directory paths.
|
|
|
|
|
|
2001-08-09 12:53:49 -04:00
|
|
|
|
http://sf.net/bugs/?func=detailbug&bug_id=114245&group_id=5470
|
2000-09-15 22:17:51 -04:00
|
|
|
|
|
2000-09-17 08:22:34 -04:00
|
|
|
|
- Extend copy.py to class, module & function types.
|
|
|
|
|
|
2001-08-09 12:53:49 -04:00
|
|
|
|
http://sf.net/bugs/?func=detailbug&bug_id=114553&group_id=5470
|
2000-09-17 08:22:34 -04:00
|
|
|
|
|
2000-09-18 21:31:30 -04:00
|
|
|
|
- Better checking for bad input to marshal.load*().
|
|
|
|
|
|
2001-08-09 12:53:49 -04:00
|
|
|
|
http://sf.net/bugs/?func=detailbug&bug_id=114754&group_id=5470
|
2000-09-18 21:31:30 -04:00
|
|
|
|
|
2000-09-23 00:17:34 -04:00
|
|
|
|
- Generalize eval to accept any mapping objects for locals and globals.
|
2000-09-23 00:40:44 -04:00
|
|
|
|
|
2001-08-09 12:53:49 -04:00
|
|
|
|
http://sf.net/bugs/?func=detailbug&bug_id=115126&group_id=5470
|
2000-09-23 00:17:34 -04:00
|
|
|
|
|
2000-09-23 00:40:44 -04:00
|
|
|
|
- Add a portable implementation of time.strptime() that works in
|
|
|
|
|
clearly defined ways on all platforms.
|
|
|
|
|
|
2001-08-09 12:53:49 -04:00
|
|
|
|
http://sf.net/bugs/?func=detailbug&bug_id=115146&group_id=5470
|
|
|
|
|
http://sf.net/bugs/?func=detailbug&bug_id=112244&group_id=5470
|
2000-09-23 00:40:44 -04:00
|
|
|
|
|
2000-09-25 11:59:01 -04:00
|
|
|
|
- rfc822.py should be more lenient than the spec in the types of
|
|
|
|
|
address fields it parses. Specifically, an invalid address of
|
|
|
|
|
the form "From: Amazon.com <delivers-news2@amazon.com>" should
|
|
|
|
|
be parsed correctly.
|
|
|
|
|
|
2001-08-09 12:53:49 -04:00
|
|
|
|
http://sf.net/bugs/?func=detailbug&bug_id=110678&group_id=5470
|
2000-09-25 11:59:01 -04:00
|
|
|
|
|
2000-09-25 18:07:45 -04:00
|
|
|
|
- cgi.py's FieldStorage class should be more conservative with
|
|
|
|
|
memory in the face of large binary file uploads.
|
|
|
|
|
|
2001-08-09 12:53:49 -04:00
|
|
|
|
http://sf.net/bugs/?func=detailbug&bug_id=110674&group_id=5470
|
2000-09-25 18:07:45 -04:00
|
|
|
|
|
|
|
|
|
There are two issues here: first, because
|
|
|
|
|
read_lines_to_outerboundary() uses readline() it is possible
|
|
|
|
|
that a large amount of data will be read into memory for a
|
|
|
|
|
binary file upload. This should probably look at the
|
|
|
|
|
Content-Type header of the section and do a chunked read if it's
|
|
|
|
|
a binary type.
|
|
|
|
|
|
2000-11-06 13:49:06 -05:00
|
|
|
|
The second issue was related to the self.lines attribute, which
|
|
|
|
|
was removed in revision 1.56 of cgi.py (see also):
|
|
|
|
|
|
2001-08-09 12:53:49 -04:00
|
|
|
|
http://sf.net/bugs/?func=detailbug&bug_id=119806&group_id=5470
|
2000-09-15 22:06:02 -04:00
|
|
|
|
|
2000-10-02 19:04:02 -04:00
|
|
|
|
- urllib should support proxy definitions that contain just the
|
2000-11-14 15:27:54 -05:00
|
|
|
|
host and port
|
2000-10-02 19:04:02 -04:00
|
|
|
|
|
2001-08-09 12:53:49 -04:00
|
|
|
|
http://sf.net/bugs/?func=detailbug&bug_id=110849&group_id=5470
|
2000-10-02 19:04:02 -04:00
|
|
|
|
|
2000-10-03 10:18:13 -04:00
|
|
|
|
- urlparse should be updated to comply with RFC 2396, which
|
|
|
|
|
defines optional parameters for each segment of the page.
|
|
|
|
|
|
2001-08-09 12:53:49 -04:00
|
|
|
|
http://sf.net/bugs/?func=detailbug&bug_id=110834&group_id=5470
|
2000-10-03 10:18:13 -04:00
|
|
|
|
|
2000-10-05 20:10:56 -04:00
|
|
|
|
- The exceptions raised by pickle and cPickle are currently
|
|
|
|
|
different; these should be unified (probably the exceptions
|
|
|
|
|
should be defined in a helper module that's imported by both).
|
|
|
|
|
[No bug report; I just thought of this.]
|
|
|
|
|
|
2000-10-12 12:13:48 -04:00
|
|
|
|
- More standard library routines should support Unicode. For
|
|
|
|
|
example, urllib.quote() could convert Unicode strings to UTF-8
|
|
|
|
|
and then do the usual %HH conversion. But this is not the only
|
|
|
|
|
one!
|
|
|
|
|
|
2001-08-09 12:53:49 -04:00
|
|
|
|
http://sf.net/bugs/?func=detailbug&bug_id=116716&group_id=5470
|
2000-10-12 12:13:48 -04:00
|
|
|
|
|
2000-10-25 16:58:27 -04:00
|
|
|
|
- There should be a way to say that you don't mind if str() or
|
|
|
|
|
__str__() return a Unicode string object. Or a different
|
|
|
|
|
function -- ustr() has been proposed. Or something...
|
|
|
|
|
|
2001-08-09 12:53:49 -04:00
|
|
|
|
http://sf.net/patch/?func=detailpatch&patch_id=101527&group_id=5470
|
2000-10-25 16:58:27 -04:00
|
|
|
|
|
2000-10-23 08:32:29 -04:00
|
|
|
|
- A UTF-7 codec. It's not a great encoding, but it's required in
|
|
|
|
|
some places (e.g. IMAP mailbox names with Asian language
|
|
|
|
|
support). [No bug report; private email from Seo Junwon
|
|
|
|
|
<linuxqna@chollian.net>.]
|
|
|
|
|
|
2000-11-13 15:21:08 -05:00
|
|
|
|
- Killing a thread from another thread. Or maybe sending a
|
|
|
|
|
signal. Or maybe raising an asynchronous exception.
|
|
|
|
|
|
2001-08-09 12:53:49 -04:00
|
|
|
|
http://sf.net/bugs/?func=detailbug&bug_id=121115&group_id=5470
|
2000-11-13 15:21:08 -05:00
|
|
|
|
|
2000-12-13 08:36:49 -05:00
|
|
|
|
- The debugger (pdb) should understand packages.
|
|
|
|
|
|
2001-08-09 12:53:49 -04:00
|
|
|
|
http://sf.net/bugs/?func=detailbug&bug_id=110631&group_id=5470
|
2000-12-13 08:36:49 -05:00
|
|
|
|
|
|
|
|
|
- The cmath library should be rewritten in Python.
|
|
|
|
|
|
2001-08-09 12:53:49 -04:00
|
|
|
|
http://sf.net/bugs/?func=detailbug&bug_id=110838&group_id=5470
|
2000-12-13 08:36:49 -05:00
|
|
|
|
|
2000-12-13 11:19:08 -05:00
|
|
|
|
- Could use a more comprehensive email module. (But then again,
|
|
|
|
|
that may be better done as a 3rd party project.)
|
|
|
|
|
|
2001-08-09 12:53:49 -04:00
|
|
|
|
http://sf.net/bugs/?func=detailbug&bug_id=121208&group_id=5470
|
2000-12-13 11:19:08 -05:00
|
|
|
|
|
2001-02-15 08:39:53 -05:00
|
|
|
|
- every built-in function or method (including all core
|
|
|
|
|
extensions) that accepts a string, dict, or list, should also
|
|
|
|
|
accept a UserString, UserDict, or UserList. (The latter two
|
|
|
|
|
should more generally accept all mappings, all sequences.)
|
|
|
|
|
|
2001-08-09 12:53:49 -04:00
|
|
|
|
http://sf.net/bugs/?func=detailbug&bug_id=132493&group_id=5470
|
2001-02-15 08:39:53 -05:00
|
|
|
|
|
2001-06-04 14:50:40 -04:00
|
|
|
|
- Fatter math module docs and docstrings.
|
|
|
|
|
|
|
|
|
|
http://sf.net/tracker/?func=detail&aid=426539&group_id=5470&atid=105470
|
|
|
|
|
|
|
|
|
|
- New math module radians() and degrees() functions.
|
|
|
|
|
|
|
|
|
|
http://sf.net/tracker/?func=detail&aid=426539&group_id=5470&atid=105470
|
|
|
|
|
|
2001-08-09 12:53:49 -04:00
|
|
|
|
- Jim Fulton suggested the following:
|
|
|
|
|
|
|
|
|
|
I wonder if it would be a good idea to have a new kind of
|
|
|
|
|
temporary file that stored data in memory unless:
|
|
|
|
|
|
|
|
|
|
- The data exceeds some size, or
|
|
|
|
|
|
|
|
|
|
- Somebody asks for a fileno.
|
|
|
|
|
|
|
|
|
|
Then the cgi module (and other apps) could use this thing in a
|
|
|
|
|
uniform way.
|
|
|
|
|
|
|
|
|
|
http://sf.net/tracker/?func=detail&aid=415692&group_id=5470&atid=355470
|
|
|
|
|
|
|
|
|
|
- Jim Fulton pointed out that binascii's b2a_base64() function
|
|
|
|
|
restricts the length of its input to 57 characters for no good
|
|
|
|
|
reason: the code would work for any input size but for this
|
|
|
|
|
check. Also, there are situations where it makes sense not to
|
|
|
|
|
append a newline, or to append something else than a newline.
|
|
|
|
|
|
|
|
|
|
Proposal:
|
|
|
|
|
|
|
|
|
|
- get rid of the input size check
|
|
|
|
|
|
|
|
|
|
- add an optional argument giving the delimiter string to be
|
|
|
|
|
appended, defaulting to "\n"
|
|
|
|
|
|
|
|
|
|
- possibly special-case None as the delimiter string to avoid
|
|
|
|
|
adding the pad bytes too???
|
|
|
|
|
|
|
|
|
|
http://sf.net/tracker/?func=detail&aid=415694&group_id=5470&atid=355470
|
|
|
|
|
|
2000-12-13 08:36:49 -05:00
|
|
|
|
|
2000-09-15 16:04:01 -04:00
|
|
|
|
Tools
|
|
|
|
|
|
|
|
|
|
- IDLE should reload & recompile modules changed externally. To
|
|
|
|
|
be done properly, scripts will have to be run in a separate
|
|
|
|
|
process.
|
|
|
|
|
|
2001-08-09 12:53:49 -04:00
|
|
|
|
http://sf.net/bugs/?func=detailbug&bug_id=110841&group_id=5470
|
2000-09-15 16:04:01 -04:00
|
|
|
|
|
2000-09-16 18:06:27 -04:00
|
|
|
|
- Python could use a GUI builder.
|
|
|
|
|
|
2001-08-09 12:53:49 -04:00
|
|
|
|
http://sf.net/bugs/?func=detailbug&bug_id=110820&group_id=5470
|
2000-09-16 18:06:27 -04:00
|
|
|
|
|
2000-10-06 13:18:55 -04:00
|
|
|
|
- IDLE's key bindings should be revised. Some of the advertised
|
|
|
|
|
bindings don't even work!
|
|
|
|
|
|
2001-08-09 12:53:49 -04:00
|
|
|
|
http://sf.net/bugs/?func=detailbug&bug_id=110659&group_id=5470
|
2000-10-06 13:18:55 -04:00
|
|
|
|
|
2000-11-14 15:27:54 -05:00
|
|
|
|
- IDLE has deep problems running threaded programs. Re-architect.
|
|
|
|
|
|
2001-08-09 12:53:49 -04:00
|
|
|
|
http://sf.net/bugs/?func=detailbug&bug_id=121963&group_id=5470
|
2000-11-14 15:27:54 -05:00
|
|
|
|
|
2001-03-17 14:52:32 -05:00
|
|
|
|
- Would be nice if IDLE showed which structure was being closed upon
|
|
|
|
|
typing one of "})]". Heck, a string too, for that matter.
|
|
|
|
|
The bug report also says something about TAB I didn't grok.
|
|
|
|
|
|
2001-08-09 12:53:49 -04:00
|
|
|
|
http://sf.net/tracker/?func=detail&aid=404444&group_id=5470&atid=105470
|
2001-03-17 14:52:32 -05:00
|
|
|
|
|
2000-09-16 18:06:27 -04:00
|
|
|
|
|
2000-10-05 11:36:34 -04:00
|
|
|
|
Building and Installing
|
|
|
|
|
|
|
|
|
|
- You should be able to configure and build Python with a
|
|
|
|
|
cross-compiler.
|
|
|
|
|
|
2001-08-09 12:53:49 -04:00
|
|
|
|
http://sf.net/bugs/?func=detailbug&bug_id=110836&group_id=5470
|
2000-10-05 11:36:34 -04:00
|
|
|
|
|
2000-10-07 11:53:43 -04:00
|
|
|
|
- Modules/makesetup should make sure the 'config.c' file it
|
|
|
|
|
generates from the various Setup files, is valid C. It currently
|
|
|
|
|
accepts module names with characters that are not allowable in
|
|
|
|
|
Python or C identifiers.
|
|
|
|
|
|
2001-08-09 12:53:49 -04:00
|
|
|
|
http://sf.net/bugs/?func=detailbug&bug_id=116326&group_id=5470
|
2000-10-07 11:53:43 -04:00
|
|
|
|
|
2000-11-13 15:21:08 -05:00
|
|
|
|
- There's a name conflict on case insensitive filesystems (in
|
|
|
|
|
particular Mac OSX) between the directory "Python" and the key
|
|
|
|
|
build target "python". That's currently solved by abusing the
|
|
|
|
|
--with-suffix option, but that's not ideal (since that also
|
|
|
|
|
causes the binary to be *installed* as python.exe). What should
|
|
|
|
|
be the solution?
|
|
|
|
|
|
2001-08-09 12:53:49 -04:00
|
|
|
|
http://sf.net/bugs/?func=detailbug&bug_id=122215&group_id=5470
|
2000-11-13 15:21:08 -05:00
|
|
|
|
|
2000-11-29 10:35:24 -05:00
|
|
|
|
- Building from source should not attempt to overwrite the
|
|
|
|
|
Include/graminit.h and Parser/graminit.c files, at least for
|
|
|
|
|
people downloading a source release rather than working from CVS
|
|
|
|
|
or snapshots. Some people find this a problem in unusual build
|
|
|
|
|
environments.
|
|
|
|
|
|
2001-08-09 12:53:49 -04:00
|
|
|
|
http://sf.net/bugs/?func=detailbug&bug_id=119221&group_id=5470
|
2000-11-29 10:35:24 -05:00
|
|
|
|
|
2001-08-09 11:42:11 -04:00
|
|
|
|
- There should be at least an option to build Python as a shared
|
|
|
|
|
library.
|
|
|
|
|
|
|
|
|
|
http://sf.net/tracker/index.php?func=detail&aid=400938&group_id=5470&atid=305470
|
|
|
|
|
|
2000-09-15 14:35:35 -04:00
|
|
|
|
|
|
|
|
|
Local Variables:
|
|
|
|
|
mode: indented-text
|
|
|
|
|
indent-tabs-mode: nil
|
|
|
|
|
End:
|