2013-07-16 22:42:44 +02:00
|
|
|
-------------------------------------------------------------------
|
|
|
|
Tue Jul 16 20:41:08 UTC 2013 - jfunk@funktronics.ca
|
|
|
|
|
|
|
|
- Add -Wformat to emperor_pg CFLAGS since pg-config --cflags returns
|
|
|
|
-Wformat-security and gcc complains about it's exclusion
|
|
|
|
|
2013-05-31 22:55:51 +02:00
|
|
|
-------------------------------------------------------------------
|
2013-07-16 22:15:04 +02:00
|
|
|
Tue Jul 16 17:15:59 UTC 2013 - jfunk@funktronics.ca
|
|
|
|
|
|
|
|
- Update to 1.9.13
|
|
|
|
* Bugfixes
|
|
|
|
* Fixed a corner case bug when response offloading is enabled, but no
|
|
|
|
request plugin is loaded
|
|
|
|
* Fixed harakiri routing when multiple rules are in place (return NEXT
|
|
|
|
instead of CONTINUE)
|
|
|
|
* Fixed curl crashing master on slow dns responses (Łukasz Mierzwa)
|
|
|
|
* Removed PTRACE check in uwsgi.h (it is no more needed since uWSGI 1.0)
|
|
|
|
* Fixed -print-sym
|
|
|
|
* Added a newline in -cflags
|
|
|
|
* Improved python3 detection and compilation
|
|
|
|
* Fixed Coro::AnyEvent loop engine (John Berthels)
|
|
|
|
* Rack api functions are now static
|
|
|
|
* Better fastcgi handling of big uploads
|
|
|
|
* Improved GCC usage on Darwin for Python non-apple builds
|
|
|
|
* Fixed XCLIENT usage in rawrouter
|
|
|
|
* Use the clang preprocessor instead of hardcoded 'cpp' when CC=clang is
|
|
|
|
used
|
|
|
|
* Set 16bit options to 65535 when higher values are requested
|
|
|
|
* Fixed virtualhosting (it is now compatible with 1.4 configurations)
|
|
|
|
* New features
|
|
|
|
* https://uwsgi-docs.readthedocs.org/en/latest/Changelog-1.9.13.html
|
|
|
|
* PyPy performance and features improvents
|
|
|
|
* Chunked input api
|
|
|
|
* Toward better third-party plugins management: the -dot-h option
|
|
|
|
* setmethod, seturi and setpathinfo routing action
|
|
|
|
* UWSGI_INCLUDES
|
|
|
|
* Improved set_user_harakiri api function
|
|
|
|
* -add-cache-item [cache ]KEY=VALUE
|
|
|
|
* the router_xmldir plugin
|
|
|
|
* Implement __call__ for @spool* decorators
|
|
|
|
* the uwsgi[lq] routing var
|
|
|
|
* -use-abort
|
|
|
|
- Changes from 1.9.12
|
|
|
|
* Bugfixes
|
|
|
|
* offloading cache writes will return the correct status code and not 202
|
|
|
|
* you can now control the path of temporary files setting the TMPDIR
|
|
|
|
environment variable (this fixes an old issue for users without control
|
|
|
|
over /tmp)
|
|
|
|
* fixed a compilation error on amqp imperial monitor
|
|
|
|
* cron commands are correctly escaped when reported in the stats server
|
|
|
|
* fixed fastcgi parser corner-case bug with big uploads
|
|
|
|
* fixed support for newest cygwin
|
|
|
|
* New Features
|
|
|
|
* https://uwsgi-docs.readthedocs.org/en/latest/Changelog-1.9.12.html
|
|
|
|
* Offloading responses
|
|
|
|
* JWSGI and JVM improvements
|
|
|
|
* -touch-signal
|
|
|
|
* The "pipe" offload engine
|
|
|
|
* The new redis router
|
|
|
|
* The "hash" router
|
|
|
|
|
|
|
|
-------------------------------------------------------------------
|
2013-05-31 22:55:51 +02:00
|
|
|
Fri May 31 18:52:08 UTC 2013 - jfunk@funktronics.ca
|
|
|
|
|
|
|
|
- Fix path to uwsgi binary in service file
|
|
|
|
- Install uwsgi.ini
|
|
|
|
- Fix signed/unsigned comparison in emperor_amqp
|
|
|
|
|
2013-05-31 20:42:21 +02:00
|
|
|
-------------------------------------------------------------------
|
|
|
|
Wed May 29 17:26:24 UTC 2013 - jfunk@funktronics.ca
|
|
|
|
|
|
|
|
- Deprecated init script and sysconfig file in favor of systemd service and a
|
|
|
|
default configuration file /etc/uwsgi/uwsgi.ini
|
|
|
|
- Update README to describe important changes
|
|
|
|
- Removed separate packages for plugins that have no uncommon requirements
|
|
|
|
- Update to 1.9.11
|
|
|
|
* Fixed Python 3 stdout/stderr buffering
|
|
|
|
* Fixed mule messages (@mulefunc is now reliable)
|
|
|
|
* Fixed SCRIPT_NAME handling in dynamic mode
|
|
|
|
* Fixed X-Sendfile with gzip static mode
|
|
|
|
* Fixed cache item maximum size with custom block size
|
|
|
|
* Fixed cache path handling
|
|
|
|
* Added the new high-performance PyPy plugin
|
|
|
|
* You can now avoid overlapping crons using --unique-cron. The uWSGI master
|
|
|
|
will track death of a single task, and until its death the same cron will
|
|
|
|
not be triggered
|
|
|
|
* A key/value variant of the --cron option is now available
|
|
|
|
* When using the cron2 option you are allowed to set a harakiri timeout for a
|
|
|
|
cron task. Just add harakiri=n to the options
|
|
|
|
* Added support for GNU Hurd
|
|
|
|
* A new offload engine named "memory" allows to offload memory transfers. The
|
|
|
|
cache router automatically supports it. To enable it just add
|
|
|
|
--offload-threads <n>
|
|
|
|
* An example websocket chat using Redis has been added to the repository
|
|
|
|
* You can now define a routing table to be executed as soon as you set the
|
|
|
|
HTTP status code in your plugin
|
|
|
|
* Generally the wsgi.file_wrapper callable expects a file-like object. PEP
|
|
|
|
333/3333 reports a special pattern when the object is not a file (call
|
|
|
|
read() until the object is consumed). uWSGI now supports this pattern (even
|
|
|
|
if in a hacky way)
|
|
|
|
* When using --http-keepalive you can now hold the connection open even if
|
|
|
|
the request has a body
|
|
|
|
* You can now set a harakiri timer for each request using internal routing
|
|
|
|
* The RPC plugin has been extended to allows interoperation with other
|
|
|
|
standards. Currently a simple HTTP wrapper and an XML-RPC one are exposed
|
|
|
|
- 1.9.10
|
|
|
|
* fixed alarm threads during reloads
|
|
|
|
* fixed uninitialized memory in --touch-* options
|
|
|
|
* fixed a regression in --attach-daemon
|
|
|
|
* Added gccgo plugin. As Go 1.1 will be no no more compatible with uWSGI,
|
|
|
|
gccgo will became the official way for running go apps
|
|
|
|
* You can now run routing rules after a request. Obviously not all of the
|
|
|
|
exposed actions make sense after the request but you should be able to
|
|
|
|
write even more complex setup
|
|
|
|
- 1.9.9
|
|
|
|
* Special warning: The router_basicauth plugin has changed its default
|
|
|
|
behaviour to return "break" if authorization fails. The "basicauth-next"
|
|
|
|
action, uses the old behaviour (returning "next"). This new approach should
|
|
|
|
reduce security problems caused by wrong configurations
|
|
|
|
* do not increment "tx" statistics counter for "unaccountable" plugins
|
|
|
|
* fixed --backtrace-depth
|
|
|
|
* fixed cache-sync parsing
|
|
|
|
* fixed mule farms initialization
|
|
|
|
* fixed multithreading bug when regexp conditional route is used
|
|
|
|
* fixed default-app usage in the psgi plugin
|
|
|
|
* fixed python dynamic mode + threads
|
|
|
|
* fixed error reporting in corerouter when retry is in place
|
|
|
|
* correctly report harakiri condition for gateways
|
|
|
|
* Added the WebDav plugin
|
|
|
|
* Added support for Go 1.1. Albeit you can successfully embed go 1.1 apps in
|
|
|
|
uWSGI, go 1.1 will be completely fork() unsafe. That means you are not able
|
|
|
|
to use multiprocessing, the master, mules and so on
|
|
|
|
* Stackless, Greenlet and Fiber support have been updated to support new
|
|
|
|
async features
|
|
|
|
* You can now authenticate over radius servers using the router_radius plugin
|
|
|
|
* Added another authentication backend, using SPNEGO (kerberos)
|
|
|
|
* Added the ldap authenticator
|
|
|
|
* Removed the GOON action, as it was messy and basically useless with the new
|
|
|
|
authentication approach
|
|
|
|
* The "setscriptname" action has been added to override the internally
|
|
|
|
computed SCRIPT_NAME (not only the var)
|
|
|
|
* The "donotlog" action forces uWSGI to not log the current request
|
|
|
|
* The "regexp" routing conditions has been improved to allows grouping. Now
|
|
|
|
you can easily manipulate strings and adding them as new request VARS
|
|
|
|
* uwsgi.atexit hook is now honoured by the gevent plugin (Author: André Cruz)
|
|
|
|
* Transformations can be applied on the fly (no buffering involved)
|
|
|
|
* The xattr plugin allows you to reference files extended attributes in the
|
|
|
|
internal routing subsystem
|
|
|
|
* Added airbrake plugin. Currently at early stage of development, it allows
|
|
|
|
sending uWSGI exceptions and alarms to airbrake servers
|
|
|
|
* Added legion daemons, allowing you to run external processes only when an
|
|
|
|
instance is a lord
|
|
|
|
* A new "touch" option (like --touch-reload) is available, triggering the
|
|
|
|
execution of a command
|
|
|
|
* You can now use the caching subsystem to store 64bit signed numbers and
|
|
|
|
apply atomic operations on them
|
|
|
|
- 1.9.8
|
|
|
|
* fixed a crash when reloading the master
|
|
|
|
* fixed a crash in async mode + uGreen
|
|
|
|
* the 'mime' routing var requires a request var (not a raw string)
|
|
|
|
- 1.9.7
|
|
|
|
* fixed teajs engine build
|
|
|
|
* fixed offloading status code (set to 202 when a request is offloaded)
|
|
|
|
* execute cron tasks within 60 second resolution, instead of 61 seconds
|
|
|
|
* fixed websocket proxy
|
|
|
|
* check for python3 unicode encoding (instead of crashing...)
|
|
|
|
* fixed ipcsem removal on reload
|
|
|
|
* fixed kqueue timer on OpenBSD, NetBSD and DragonFlyBSD
|
|
|
|
* fixed/reimplemented perl uwsgi::register_rpc
|
|
|
|
* fixed fd leak on sendfile() error
|
|
|
|
* fixed Content-Length when gzip file variant is used
|
|
|
|
* allows non-request plugins to register rpc functions
|
|
|
|
* more robust error checking for cgroups
|
|
|
|
* honour SCRIPT_NAME the in the PSGI plugin when multiple perl apps are
|
|
|
|
mounted
|
|
|
|
* Added legion cron to force only one instance of an application in legion
|
|
|
|
mode to execute cron tasks
|
|
|
|
* The curl_cron plugin has been added allowing the cron subsystem to call
|
|
|
|
urls (via libcurl) instead of unix commands
|
|
|
|
* The cachestore routing function can now directly store items in gzip format
|
|
|
|
* Added --skip-atexit to avoid calling atexit() hooks to workaround a bug in the
|
|
|
|
mongodb client library
|
|
|
|
* The http and uwsgi routing instructions are now more smart. You can cache
|
|
|
|
their output and get the right status code in the logs
|
|
|
|
* Added a generic api for manipulating the response has been added
|
|
|
|
(cachestore uses it)
|
|
|
|
* You can now trigger alarms when an fd is ready for read with --alarm-fd
|
|
|
|
* The spooler server plugin and the cheaper busyness algorithm are now
|
|
|
|
compiled in by default
|
|
|
|
- 1.9.6
|
|
|
|
* workaround for building the python plugin with gcc 4.8
|
|
|
|
* Sqlite and LDAP configuration moved to plugins
|
|
|
|
* New instructions added to allow for dynamic apps using internal routing
|
|
|
|
* You can now configure how the carbon plugin send the response average when
|
|
|
|
no requests have been managed
|
|
|
|
* Added numeric checks for the internal routing
|
|
|
|
* Added math and time support in the internal routing
|
|
|
|
* Added non-standard seek() and tell() to wsgi.input (post-buffering
|
|
|
|
required)
|
|
|
|
* You can invoke the ipython shell instead of the default one when using
|
|
|
|
--pyshell
|
|
|
|
* Added the 'rpcraw' routing instruction (dangerous)
|
|
|
|
* Added preliminary support for the HTTP Range header
|
|
|
|
* Added the 'lord' routing condition for Legion
|
|
|
|
* Added GridFS authentication
|
|
|
|
* Added the 'uwsgi' routing var for accessing internal uWSGI parameters
|
|
|
|
* Added the 'alarm' routing action for triggering alarms from the routing
|
|
|
|
subsystem
|
|
|
|
* Added --rbshell for accessing a Ruby shell
|
|
|
|
* Added --lua-shell for accessing a Lua shell
|
|
|
|
* Removed the old (and useless) probe subsystem
|
|
|
|
* Two new hooks have been added to the Legion subsystem: --legion-node-joined
|
|
|
|
and --legion-node-left
|
|
|
|
* --socket-sndbuf and --socket-rcvbuf have been added to allow tuning of the
|
|
|
|
send and receive buffers of the uWSGI sockets (use with caution)
|
|
|
|
* V8 plugin improvements
|
|
|
|
- 1.9.5
|
|
|
|
* fixed a memory leak with cachestore routing instruction (Riccardo
|
|
|
|
Magliocchetti)
|
|
|
|
* fixed a memory leak in carbon plugin (Riccardo Magliocchetti)
|
|
|
|
* fixed a memory leak in the cgi plugin (Riccardo Magliocchetti)
|
|
|
|
* fixed old-style python dynamic apps
|
|
|
|
* force the emperor to honour --max-fd for vassals
|
|
|
|
* improved PSGI seek with post-buffering
|
|
|
|
* fixed kvlist escaping
|
|
|
|
* Added the GridFS plugin
|
|
|
|
* Improved V8 plugin
|
|
|
|
* Added the 'cgi' routing instruction to call CGI scripts directly
|
|
|
|
- 1.9.4
|
|
|
|
* fixed cache statistics exported by the stats subsystem (Łukasz Mierzwa)
|
|
|
|
* fixed CoroEV bug in after_request (Tom Molesworth and John Berthels)
|
|
|
|
* update cache items after a restore from persistent storage (Łukasz Mierzwa)
|
|
|
|
* fixed signal handling in non-worker processes
|
|
|
|
* fixed thundering herd in multiple mules setup
|
|
|
|
* ported the cplusplus skeletal plugin to the new api
|
|
|
|
* fixed uWSGI reloading when build as a shared library
|
|
|
|
* From now on, SmartOS is included in the officially supported operating
|
|
|
|
systems
|
|
|
|
* Support for JavaScript routing rules and configurations using V8
|
|
|
|
* Added the rpcnext routing action
|
|
|
|
* Legion improvements
|
|
|
|
- 1.9.3
|
|
|
|
* fixed imports in the JVM build system when virtualenvs are used (Ryan
|
|
|
|
Kaskel)
|
|
|
|
* fixed mod_proxy_uwsgi with apache 2.4
|
|
|
|
* fixed php headers generation when Status is created from the php app itself
|
|
|
|
* Pluggable configuration system (with Lua support)
|
|
|
|
* Immediate setuid and setgid with new options --immediate-uid and
|
|
|
|
--immediate-gid
|
|
|
|
* The option --emperor-tyrant-nofollow has been added forcing the emperor to
|
|
|
|
now follow symlinks when searching for uid/gid in tyrant mode
|
|
|
|
* Added the "rpcret" routing action to usa Lua to write advanced rules
|
|
|
|
- 1.9.2
|
|
|
|
* Fixed python3 response headers managament (wrong refcnt)
|
|
|
|
* Fixed readline() on request body when postbuffering is in place
|
|
|
|
* Fixed ruby fiber plugin
|
|
|
|
* You can now store responses automatically in the uWSGI cache using
|
|
|
|
route-run and the cachestore routing action
|
|
|
|
* routing access to cookie and query string
|
|
|
|
* Added empty internal routing condition
|
|
|
|
* Added the Geoip plugin
|
|
|
|
* Added the SSI plugin (beta)
|
|
|
|
- 1.9.1
|
|
|
|
* Fixed --req-logger after a graceful reload
|
|
|
|
* Fixed a crash with the carbon plugin
|
|
|
|
* Fixed signal handling when multiple workers + copy on write is in place
|
|
|
|
* Fixed exception handling in the Rack plugin
|
|
|
|
* The XSLT plugin has been added. It allows to apply XML transformation via
|
|
|
|
request plugin or uWSGI internal routing
|
|
|
|
* Legion scrolls api
|
|
|
|
* On demand vassals in Emperor mode
|
|
|
|
* The --exec-post-app hook has been added allowing you to run commands after
|
|
|
|
the load of an application
|
|
|
|
* The cache router plugin has been improved
|
|
|
|
* Added a crypto logger allowing for encryption in logging to remote hosts
|
|
|
|
via UDP
|
|
|
|
* The "rpc" routing instruction has been added, allowing you to call rpc
|
|
|
|
functions directly from the routing subsystem and forward they output to
|
|
|
|
the client
|
|
|
|
* Preliminary support for name resolving in the carbon plugin
|
|
|
|
* New routing conditions have been added (equal,startswith,endswith,regexp)
|
|
|
|
* You can reference the uWSGI version string using the %V magic var in your
|
|
|
|
configurations
|
|
|
|
* Added the 'mongodb' generic plugin
|
|
|
|
- 1.9
|
|
|
|
* From now on, all of the request plugins need to be non-blocking
|
|
|
|
* Added Coro::AnyEvent plugin for Perl. Requires Coro::Anyevent package
|
|
|
|
* We have finally a truly working JVM infrastructure
|
|
|
|
* The first Mono plugin attempt (in 2010) was a total failure. Now we have a
|
|
|
|
new shining implementation
|
|
|
|
* Language independent HTTP body manage
|
|
|
|
* Faster uwsgi/HTTP/FastCGI/SCGI native sockets
|
|
|
|
* Can split request/error logging
|
|
|
|
* Chain reloading of workers
|
|
|
|
* Offloading improvements
|
|
|
|
* Better static files management/serving
|
|
|
|
* New Generation Cache subsystem (cache2)
|
|
|
|
* The Legion subsystem is a new whole addition to the uWSGI project. It has
|
|
|
|
superseeded the old Clustering subsystem
|
|
|
|
* Cygwin (windows) support
|
|
|
|
* Advanced Exceptions subsystem
|
|
|
|
* SPDY, SSL and SNI support
|
|
|
|
* HTTP router keepalive, auto-chunking, auto-gzip and transparent websockets
|
|
|
|
* The SSL router (sslrouter) for SSL virtual hosting
|
|
|
|
* New Websockets API
|
|
|
|
* New Programmable Internal Routing (turing complete ?)
|
|
|
|
* A new imperial monitor has been added allowing vassals to be governed over
|
|
|
|
zeromq messages
|
|
|
|
* Total introspection via the stats server
|
|
|
|
* Ping requests sent using nagios plugin will no longer be counted in apps
|
|
|
|
request stats
|
|
|
|
* The --app option has been removed. To load applications on specific
|
|
|
|
mountpoints use the --mount option
|
|
|
|
* The --static-offload-to-thread option has been removed. Use the more
|
|
|
|
versatile --offload-threads
|
|
|
|
* The grunt mode has been removed. To accomplish the same behaviour just use
|
|
|
|
threads or directly call fork() and uwsgi.disconnect()
|
|
|
|
* The send_message/recv_message api has been removed (use language-supplied
|
|
|
|
functions)
|
|
|
|
- 1.5
|
|
|
|
* added --not-alarm-log
|
|
|
|
* support for TCP_FASTOPEN (Linux-only)
|
|
|
|
* improved emperor reloading
|
|
|
|
* added --get
|
|
|
|
* Legion subsystem
|
|
|
|
* emperor_zeromq plugin
|
|
|
|
* SNI support
|
|
|
|
* distributed SSL session cache
|
|
|
|
- 1.4.1
|
|
|
|
* fixed typos in corerouter plugins
|
|
|
|
* fixed offloading when the number of threads is higher than 1
|
|
|
|
* fixed static_maps for non-existent paths
|
|
|
|
* fixed uwsgi_connect() on modern Linux systems to reset the socket to blocking mode
|
|
|
|
- 1.4
|
|
|
|
* gevent improvements
|
|
|
|
* improved http/https router and fastrouter
|
|
|
|
* Go official support
|
|
|
|
* a new set of infos are exported to the stats system
|
|
|
|
* improved systemd support
|
|
|
|
* log filtering and routing
|
|
|
|
* improved tracebacker
|
|
|
|
* offload transfer for static files, and network transfers
|
|
|
|
* matheval support
|
|
|
|
* plugins can be written in Obj-C
|
|
|
|
* smart attach daemon
|
|
|
|
* added support for PEP 405 virtualenvs
|
|
|
|
* rawrouter with xclient support
|
|
|
|
* internal routing plugin for cache
|
|
|
|
- 1.3
|
|
|
|
* python tracebacker
|
|
|
|
* user-governed harakiri
|
|
|
|
* simplified external plugin development
|
|
|
|
* Linux namespace mountpoint improvements
|
|
|
|
* secured subscription system
|
|
|
|
* merged routers codebase (fastrouter, http, rawrouter)
|
|
|
|
* https support in the http router
|
|
|
|
* config report at the end of uWSGI build process
|
|
|
|
* improved subscription system (multicast and unix socket)
|
|
|
|
* custom options
|
|
|
|
* graceful reloads on shared sockets
|
|
|
|
* configurable log-master buffer size
|
|
|
|
* extreme-optimizations for the stats subsystem
|
|
|
|
* redislog and mongodblog plugins
|
|
|
|
* added python logger
|
|
|
|
* mongodb and postgres imperial monitors
|
|
|
|
* implemented psgix.logger and psgix.cleanup
|
|
|
|
* full rack spec compliance
|
|
|
|
* preliminary ipv6 support
|
|
|
|
* gevent graceful reloads
|
|
|
|
* support for multiple loggers and logformat
|
|
|
|
* lazy-apps to load apps after fork() but without changing reloading subsystem
|
|
|
|
* emperor heartbeat subsystem
|
|
|
|
* cheaper busyness plugin
|
|
|
|
* pluggable clock sources
|
|
|
|
* added router_rewrite and router_http plugins
|
|
|
|
* external spoolers
|
|
|
|
* support for section:// and fd:// loaders
|
|
|
|
* alarm subsystem (with curl and xmpp plugins)
|
|
|
|
|
2012-09-12 03:15:59 +02:00
|
|
|
-------------------------------------------------------------------
|
|
|
|
Tue Sep 11 22:13:54 UTC 2012 - jfunk@funktronics.ca
|
|
|
|
|
|
|
|
- Install uwsgidecorators module for Python plugin
|
|
|
|
- Create sysconfig file for adding uwsgi options
|
|
|
|
|
2012-09-10 12:57:08 +02:00
|
|
|
-------------------------------------------------------------------
|
|
|
|
Sun Sep 9 19:11:43 UTC 2012 - jfunk@funktronics.ca
|
|
|
|
|
|
|
|
- Don't attempt to build Erlang plugins on openSUSE < 12.2
|
|
|
|
- Don't attempt to build Greenlet plugin on openSUSE < 12.1
|
|
|
|
|
|
|
|
-------------------------------------------------------------------
|
|
|
|
Sun Sep 9 18:56:43 UTC 2012 - jfunk@funktronics.ca
|
|
|
|
|
|
|
|
- Don't attempt to build Ruby 1.9 features on openSUSE < 12.2
|
|
|
|
|
|
|
|
-------------------------------------------------------------------
|
|
|
|
Sun Sep 9 00:19:40 UTC 2012 - jfunk@funktronics.ca
|
|
|
|
|
|
|
|
- Fix JVM build on i586
|
|
|
|
|
|
|
|
-------------------------------------------------------------------
|
|
|
|
Sat Sep 8 23:17:30 UTC 2012 - jfunk@funktronics.ca
|
|
|
|
|
|
|
|
- Fix lua requirement for openSUSE < 12.2
|
|
|
|
|
|
|
|
-------------------------------------------------------------------
|
|
|
|
Sat Sep 8 21:41:39 UTC 2012 - jfunk@funktronics.ca
|
|
|
|
|
|
|
|
- Initial release
|
|
|
|
|