]> git.proxmox.com Git - mirror_edk2.git/blobdiff - AppPkg/Applications/Python/Python-2.7.2/Lib/test/test_wsgiref.py
edk2: Remove AppPkg, StdLib, StdLibPrivateInternalFiles
[mirror_edk2.git] / AppPkg / Applications / Python / Python-2.7.2 / Lib / test / test_wsgiref.py
diff --git a/AppPkg/Applications/Python/Python-2.7.2/Lib/test/test_wsgiref.py b/AppPkg/Applications/Python/Python-2.7.2/Lib/test/test_wsgiref.py
deleted file mode 100644 (file)
index e973a68..0000000
+++ /dev/null
@@ -1,630 +0,0 @@
-from __future__ import nested_scopes    # Backward compat for 2.1\r
-from unittest import TestCase\r
-from wsgiref.util import setup_testing_defaults\r
-from wsgiref.headers import Headers\r
-from wsgiref.handlers import BaseHandler, BaseCGIHandler\r
-from wsgiref import util\r
-from wsgiref.validate import validator\r
-from wsgiref.simple_server import WSGIServer, WSGIRequestHandler, demo_app\r
-from wsgiref.simple_server import make_server\r
-from StringIO import StringIO\r
-from SocketServer import BaseServer\r
-import os\r
-import re\r
-import sys\r
-\r
-from test import test_support\r
-\r
-class MockServer(WSGIServer):\r
-    """Non-socket HTTP server"""\r
-\r
-    def __init__(self, server_address, RequestHandlerClass):\r
-        BaseServer.__init__(self, server_address, RequestHandlerClass)\r
-        self.server_bind()\r
-\r
-    def server_bind(self):\r
-        host, port = self.server_address\r
-        self.server_name = host\r
-        self.server_port = port\r
-        self.setup_environ()\r
-\r
-\r
-class MockHandler(WSGIRequestHandler):\r
-    """Non-socket HTTP handler"""\r
-    def setup(self):\r
-        self.connection = self.request\r
-        self.rfile, self.wfile = self.connection\r
-\r
-    def finish(self):\r
-        pass\r
-\r
-\r
-\r
-\r
-\r
-def hello_app(environ,start_response):\r
-    start_response("200 OK", [\r
-        ('Content-Type','text/plain'),\r
-        ('Date','Mon, 05 Jun 2006 18:49:54 GMT')\r
-    ])\r
-    return ["Hello, world!"]\r
-\r
-def run_amock(app=hello_app, data="GET / HTTP/1.0\n\n"):\r
-    server = make_server("", 80, app, MockServer, MockHandler)\r
-    inp, out, err, olderr = StringIO(data), StringIO(), StringIO(), sys.stderr\r
-    sys.stderr = err\r
-\r
-    try:\r
-        server.finish_request((inp,out), ("127.0.0.1",8888))\r
-    finally:\r
-        sys.stderr = olderr\r
-\r
-    return out.getvalue(), err.getvalue()\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-def compare_generic_iter(make_it,match):\r
-    """Utility to compare a generic 2.1/2.2+ iterator with an iterable\r
-\r
-    If running under Python 2.2+, this tests the iterator using iter()/next(),\r
-    as well as __getitem__.  'make_it' must be a function returning a fresh\r
-    iterator to be tested (since this may test the iterator twice)."""\r
-\r
-    it = make_it()\r
-    n = 0\r
-    for item in match:\r
-        if not it[n]==item: raise AssertionError\r
-        n+=1\r
-    try:\r
-        it[n]\r
-    except IndexError:\r
-        pass\r
-    else:\r
-        raise AssertionError("Too many items from __getitem__",it)\r
-\r
-    try:\r
-        iter, StopIteration\r
-    except NameError:\r
-        pass\r
-    else:\r
-        # Only test iter mode under 2.2+\r
-        it = make_it()\r
-        if not iter(it) is it: raise AssertionError\r
-        for item in match:\r
-            if not it.next()==item: raise AssertionError\r
-        try:\r
-            it.next()\r
-        except StopIteration:\r
-            pass\r
-        else:\r
-            raise AssertionError("Too many items from .next()",it)\r
-\r
-\r
-\r
-\r
-\r
-\r
-class IntegrationTests(TestCase):\r
-\r
-    def check_hello(self, out, has_length=True):\r
-        self.assertEqual(out,\r
-            "HTTP/1.0 200 OK\r\n"\r
-            "Server: WSGIServer/0.1 Python/"+sys.version.split()[0]+"\r\n"\r
-            "Content-Type: text/plain\r\n"\r
-            "Date: Mon, 05 Jun 2006 18:49:54 GMT\r\n" +\r
-            (has_length and  "Content-Length: 13\r\n" or "") +\r
-            "\r\n"\r
-            "Hello, world!"\r
-        )\r
-\r
-    def test_plain_hello(self):\r
-        out, err = run_amock()\r
-        self.check_hello(out)\r
-\r
-    def test_validated_hello(self):\r
-        out, err = run_amock(validator(hello_app))\r
-        # the middleware doesn't support len(), so content-length isn't there\r
-        self.check_hello(out, has_length=False)\r
-\r
-    def test_simple_validation_error(self):\r
-        def bad_app(environ,start_response):\r
-            start_response("200 OK", ('Content-Type','text/plain'))\r
-            return ["Hello, world!"]\r
-        out, err = run_amock(validator(bad_app))\r
-        self.assertTrue(out.endswith(\r
-            "A server error occurred.  Please contact the administrator."\r
-        ))\r
-        self.assertEqual(\r
-            err.splitlines()[-2],\r
-            "AssertionError: Headers (('Content-Type', 'text/plain')) must"\r
-            " be of type list: <type 'tuple'>"\r
-        )\r
-\r
-\r
-\r
-\r
-\r
-\r
-class UtilityTests(TestCase):\r
-\r
-    def checkShift(self,sn_in,pi_in,part,sn_out,pi_out):\r
-        env = {'SCRIPT_NAME':sn_in,'PATH_INFO':pi_in}\r
-        util.setup_testing_defaults(env)\r
-        self.assertEqual(util.shift_path_info(env),part)\r
-        self.assertEqual(env['PATH_INFO'],pi_out)\r
-        self.assertEqual(env['SCRIPT_NAME'],sn_out)\r
-        return env\r
-\r
-    def checkDefault(self, key, value, alt=None):\r
-        # Check defaulting when empty\r
-        env = {}\r
-        util.setup_testing_defaults(env)\r
-        if isinstance(value, StringIO):\r
-            self.assertIsInstance(env[key], StringIO)\r
-        else:\r
-            self.assertEqual(env[key], value)\r
-\r
-        # Check existing value\r
-        env = {key:alt}\r
-        util.setup_testing_defaults(env)\r
-        self.assertTrue(env[key] is alt)\r
-\r
-    def checkCrossDefault(self,key,value,**kw):\r
-        util.setup_testing_defaults(kw)\r
-        self.assertEqual(kw[key],value)\r
-\r
-    def checkAppURI(self,uri,**kw):\r
-        util.setup_testing_defaults(kw)\r
-        self.assertEqual(util.application_uri(kw),uri)\r
-\r
-    def checkReqURI(self,uri,query=1,**kw):\r
-        util.setup_testing_defaults(kw)\r
-        self.assertEqual(util.request_uri(kw,query),uri)\r
-\r
-\r
-\r
-\r
-\r
-\r
-    def checkFW(self,text,size,match):\r
-\r
-        def make_it(text=text,size=size):\r
-            return util.FileWrapper(StringIO(text),size)\r
-\r
-        compare_generic_iter(make_it,match)\r
-\r
-        it = make_it()\r
-        self.assertFalse(it.filelike.closed)\r
-\r
-        for item in it:\r
-            pass\r
-\r
-        self.assertFalse(it.filelike.closed)\r
-\r
-        it.close()\r
-        self.assertTrue(it.filelike.closed)\r
-\r
-\r
-    def testSimpleShifts(self):\r
-        self.checkShift('','/', '', '/', '')\r
-        self.checkShift('','/x', 'x', '/x', '')\r
-        self.checkShift('/','', None, '/', '')\r
-        self.checkShift('/a','/x/y', 'x', '/a/x', '/y')\r
-        self.checkShift('/a','/x/',  'x', '/a/x', '/')\r
-\r
-\r
-    def testNormalizedShifts(self):\r
-        self.checkShift('/a/b', '/../y', '..', '/a', '/y')\r
-        self.checkShift('', '/../y', '..', '', '/y')\r
-        self.checkShift('/a/b', '//y', 'y', '/a/b/y', '')\r
-        self.checkShift('/a/b', '//y/', 'y', '/a/b/y', '/')\r
-        self.checkShift('/a/b', '/./y', 'y', '/a/b/y', '')\r
-        self.checkShift('/a/b', '/./y/', 'y', '/a/b/y', '/')\r
-        self.checkShift('/a/b', '///./..//y/.//', '..', '/a', '/y/')\r
-        self.checkShift('/a/b', '///', '', '/a/b/', '')\r
-        self.checkShift('/a/b', '/.//', '', '/a/b/', '')\r
-        self.checkShift('/a/b', '/x//', 'x', '/a/b/x', '/')\r
-        self.checkShift('/a/b', '/.', None, '/a/b', '')\r
-\r
-\r
-    def testDefaults(self):\r
-        for key, value in [\r
-            ('SERVER_NAME','127.0.0.1'),\r
-            ('SERVER_PORT', '80'),\r
-            ('SERVER_PROTOCOL','HTTP/1.0'),\r
-            ('HTTP_HOST','127.0.0.1'),\r
-            ('REQUEST_METHOD','GET'),\r
-            ('SCRIPT_NAME',''),\r
-            ('PATH_INFO','/'),\r
-            ('wsgi.version', (1,0)),\r
-            ('wsgi.run_once', 0),\r
-            ('wsgi.multithread', 0),\r
-            ('wsgi.multiprocess', 0),\r
-            ('wsgi.input', StringIO("")),\r
-            ('wsgi.errors', StringIO()),\r
-            ('wsgi.url_scheme','http'),\r
-        ]:\r
-            self.checkDefault(key,value)\r
-\r
-\r
-    def testCrossDefaults(self):\r
-        self.checkCrossDefault('HTTP_HOST',"foo.bar",SERVER_NAME="foo.bar")\r
-        self.checkCrossDefault('wsgi.url_scheme',"https",HTTPS="on")\r
-        self.checkCrossDefault('wsgi.url_scheme',"https",HTTPS="1")\r
-        self.checkCrossDefault('wsgi.url_scheme',"https",HTTPS="yes")\r
-        self.checkCrossDefault('wsgi.url_scheme',"http",HTTPS="foo")\r
-        self.checkCrossDefault('SERVER_PORT',"80",HTTPS="foo")\r
-        self.checkCrossDefault('SERVER_PORT',"443",HTTPS="on")\r
-\r
-\r
-    def testGuessScheme(self):\r
-        self.assertEqual(util.guess_scheme({}), "http")\r
-        self.assertEqual(util.guess_scheme({'HTTPS':"foo"}), "http")\r
-        self.assertEqual(util.guess_scheme({'HTTPS':"on"}), "https")\r
-        self.assertEqual(util.guess_scheme({'HTTPS':"yes"}), "https")\r
-        self.assertEqual(util.guess_scheme({'HTTPS':"1"}), "https")\r
-\r
-\r
-\r
-\r
-\r
-    def testAppURIs(self):\r
-        self.checkAppURI("http://127.0.0.1/")\r
-        self.checkAppURI("http://127.0.0.1/spam", SCRIPT_NAME="/spam")\r
-        self.checkAppURI("http://spam.example.com:2071/",\r
-            HTTP_HOST="spam.example.com:2071", SERVER_PORT="2071")\r
-        self.checkAppURI("http://spam.example.com/",\r
-            SERVER_NAME="spam.example.com")\r
-        self.checkAppURI("http://127.0.0.1/",\r
-            HTTP_HOST="127.0.0.1", SERVER_NAME="spam.example.com")\r
-        self.checkAppURI("https://127.0.0.1/", HTTPS="on")\r
-        self.checkAppURI("http://127.0.0.1:8000/", SERVER_PORT="8000",\r
-            HTTP_HOST=None)\r
-\r
-    def testReqURIs(self):\r
-        self.checkReqURI("http://127.0.0.1/")\r
-        self.checkReqURI("http://127.0.0.1/spam", SCRIPT_NAME="/spam")\r
-        self.checkReqURI("http://127.0.0.1/spammity/spam",\r
-            SCRIPT_NAME="/spammity", PATH_INFO="/spam")\r
-        self.checkReqURI("http://127.0.0.1/spammity/spam;ham",\r
-            SCRIPT_NAME="/spammity", PATH_INFO="/spam;ham")\r
-        self.checkReqURI("http://127.0.0.1/spammity/spam;cookie=1234,5678",\r
-            SCRIPT_NAME="/spammity", PATH_INFO="/spam;cookie=1234,5678")\r
-        self.checkReqURI("http://127.0.0.1/spammity/spam?say=ni",\r
-            SCRIPT_NAME="/spammity", PATH_INFO="/spam",QUERY_STRING="say=ni")\r
-        self.checkReqURI("http://127.0.0.1/spammity/spam", 0,\r
-            SCRIPT_NAME="/spammity", PATH_INFO="/spam",QUERY_STRING="say=ni")\r
-\r
-    def testFileWrapper(self):\r
-        self.checkFW("xyz"*50, 120, ["xyz"*40,"xyz"*10])\r
-\r
-    def testHopByHop(self):\r
-        for hop in (\r
-            "Connection Keep-Alive Proxy-Authenticate Proxy-Authorization "\r
-            "TE Trailers Transfer-Encoding Upgrade"\r
-        ).split():\r
-            for alt in hop, hop.title(), hop.upper(), hop.lower():\r
-                self.assertTrue(util.is_hop_by_hop(alt))\r
-\r
-        # Not comprehensive, just a few random header names\r
-        for hop in (\r
-            "Accept Cache-Control Date Pragma Trailer Via Warning"\r
-        ).split():\r
-            for alt in hop, hop.title(), hop.upper(), hop.lower():\r
-                self.assertFalse(util.is_hop_by_hop(alt))\r
-\r
-class HeaderTests(TestCase):\r
-\r
-    def testMappingInterface(self):\r
-        test = [('x','y')]\r
-        self.assertEqual(len(Headers([])),0)\r
-        self.assertEqual(len(Headers(test[:])),1)\r
-        self.assertEqual(Headers(test[:]).keys(), ['x'])\r
-        self.assertEqual(Headers(test[:]).values(), ['y'])\r
-        self.assertEqual(Headers(test[:]).items(), test)\r
-        self.assertFalse(Headers(test).items() is test)  # must be copy!\r
-\r
-        h=Headers([])\r
-        del h['foo']   # should not raise an error\r
-\r
-        h['Foo'] = 'bar'\r
-        for m in h.has_key, h.__contains__, h.get, h.get_all, h.__getitem__:\r
-            self.assertTrue(m('foo'))\r
-            self.assertTrue(m('Foo'))\r
-            self.assertTrue(m('FOO'))\r
-            self.assertFalse(m('bar'))\r
-\r
-        self.assertEqual(h['foo'],'bar')\r
-        h['foo'] = 'baz'\r
-        self.assertEqual(h['FOO'],'baz')\r
-        self.assertEqual(h.get_all('foo'),['baz'])\r
-\r
-        self.assertEqual(h.get("foo","whee"), "baz")\r
-        self.assertEqual(h.get("zoo","whee"), "whee")\r
-        self.assertEqual(h.setdefault("foo","whee"), "baz")\r
-        self.assertEqual(h.setdefault("zoo","whee"), "whee")\r
-        self.assertEqual(h["foo"],"baz")\r
-        self.assertEqual(h["zoo"],"whee")\r
-\r
-    def testRequireList(self):\r
-        self.assertRaises(TypeError, Headers, "foo")\r
-\r
-\r
-    def testExtras(self):\r
-        h = Headers([])\r
-        self.assertEqual(str(h),'\r\n')\r
-\r
-        h.add_header('foo','bar',baz="spam")\r
-        self.assertEqual(h['foo'], 'bar; baz="spam"')\r
-        self.assertEqual(str(h),'foo: bar; baz="spam"\r\n\r\n')\r
-\r
-        h.add_header('Foo','bar',cheese=None)\r
-        self.assertEqual(h.get_all('foo'),\r
-            ['bar; baz="spam"', 'bar; cheese'])\r
-\r
-        self.assertEqual(str(h),\r
-            'foo: bar; baz="spam"\r\n'\r
-            'Foo: bar; cheese\r\n'\r
-            '\r\n'\r
-        )\r
-\r
-\r
-class ErrorHandler(BaseCGIHandler):\r
-    """Simple handler subclass for testing BaseHandler"""\r
-\r
-    # BaseHandler records the OS environment at import time, but envvars\r
-    # might have been changed later by other tests, which trips up\r
-    # HandlerTests.testEnviron().\r
-    os_environ = dict(os.environ.items())\r
-\r
-    def __init__(self,**kw):\r
-        setup_testing_defaults(kw)\r
-        BaseCGIHandler.__init__(\r
-            self, StringIO(''), StringIO(), StringIO(), kw,\r
-            multithread=True, multiprocess=True\r
-        )\r
-\r
-class TestHandler(ErrorHandler):\r
-    """Simple handler subclass for testing BaseHandler, w/error passthru"""\r
-\r
-    def handle_error(self):\r
-        raise   # for testing, we want to see what's happening\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-class HandlerTests(TestCase):\r
-\r
-    def checkEnvironAttrs(self, handler):\r
-        env = handler.environ\r
-        for attr in [\r
-            'version','multithread','multiprocess','run_once','file_wrapper'\r
-        ]:\r
-            if attr=='file_wrapper' and handler.wsgi_file_wrapper is None:\r
-                continue\r
-            self.assertEqual(getattr(handler,'wsgi_'+attr),env['wsgi.'+attr])\r
-\r
-    def checkOSEnviron(self,handler):\r
-        empty = {}; setup_testing_defaults(empty)\r
-        env = handler.environ\r
-        from os import environ\r
-        for k,v in environ.items():\r
-            if k not in empty:\r
-                self.assertEqual(env[k],v)\r
-        for k,v in empty.items():\r
-            self.assertIn(k, env)\r
-\r
-    def testEnviron(self):\r
-        h = TestHandler(X="Y")\r
-        h.setup_environ()\r
-        self.checkEnvironAttrs(h)\r
-        self.checkOSEnviron(h)\r
-        self.assertEqual(h.environ["X"],"Y")\r
-\r
-    def testCGIEnviron(self):\r
-        h = BaseCGIHandler(None,None,None,{})\r
-        h.setup_environ()\r
-        for key in 'wsgi.url_scheme', 'wsgi.input', 'wsgi.errors':\r
-            self.assertIn(key, h.environ)\r
-\r
-    def testScheme(self):\r
-        h=TestHandler(HTTPS="on"); h.setup_environ()\r
-        self.assertEqual(h.environ['wsgi.url_scheme'],'https')\r
-        h=TestHandler(); h.setup_environ()\r
-        self.assertEqual(h.environ['wsgi.url_scheme'],'http')\r
-\r
-\r
-    def testAbstractMethods(self):\r
-        h = BaseHandler()\r
-        for name in [\r
-            '_flush','get_stdin','get_stderr','add_cgi_vars'\r
-        ]:\r
-            self.assertRaises(NotImplementedError, getattr(h,name))\r
-        self.assertRaises(NotImplementedError, h._write, "test")\r
-\r
-\r
-    def testContentLength(self):\r
-        # Demo one reason iteration is better than write()...  ;)\r
-\r
-        def trivial_app1(e,s):\r
-            s('200 OK',[])\r
-            return [e['wsgi.url_scheme']]\r
-\r
-        def trivial_app2(e,s):\r
-            s('200 OK',[])(e['wsgi.url_scheme'])\r
-            return []\r
-\r
-        def trivial_app4(e,s):\r
-            # Simulate a response to a HEAD request\r
-            s('200 OK',[('Content-Length', '12345')])\r
-            return []\r
-\r
-        h = TestHandler()\r
-        h.run(trivial_app1)\r
-        self.assertEqual(h.stdout.getvalue(),\r
-            "Status: 200 OK\r\n"\r
-            "Content-Length: 4\r\n"\r
-            "\r\n"\r
-            "http")\r
-\r
-        h = TestHandler()\r
-        h.run(trivial_app2)\r
-        self.assertEqual(h.stdout.getvalue(),\r
-            "Status: 200 OK\r\n"\r
-            "\r\n"\r
-            "http")\r
-\r
-\r
-        h = TestHandler()\r
-        h.run(trivial_app4)\r
-        self.assertEqual(h.stdout.getvalue(),\r
-            b'Status: 200 OK\r\n'\r
-            b'Content-Length: 12345\r\n'\r
-            b'\r\n')\r
-\r
-    def testBasicErrorOutput(self):\r
-\r
-        def non_error_app(e,s):\r
-            s('200 OK',[])\r
-            return []\r
-\r
-        def error_app(e,s):\r
-            raise AssertionError("This should be caught by handler")\r
-\r
-        h = ErrorHandler()\r
-        h.run(non_error_app)\r
-        self.assertEqual(h.stdout.getvalue(),\r
-            "Status: 200 OK\r\n"\r
-            "Content-Length: 0\r\n"\r
-            "\r\n")\r
-        self.assertEqual(h.stderr.getvalue(),"")\r
-\r
-        h = ErrorHandler()\r
-        h.run(error_app)\r
-        self.assertEqual(h.stdout.getvalue(),\r
-            "Status: %s\r\n"\r
-            "Content-Type: text/plain\r\n"\r
-            "Content-Length: %d\r\n"\r
-            "\r\n%s" % (h.error_status,len(h.error_body),h.error_body))\r
-\r
-        self.assertNotEqual(h.stderr.getvalue().find("AssertionError"), -1)\r
-\r
-    def testErrorAfterOutput(self):\r
-        MSG = "Some output has been sent"\r
-        def error_app(e,s):\r
-            s("200 OK",[])(MSG)\r
-            raise AssertionError("This should be caught by handler")\r
-\r
-        h = ErrorHandler()\r
-        h.run(error_app)\r
-        self.assertEqual(h.stdout.getvalue(),\r
-            "Status: 200 OK\r\n"\r
-            "\r\n"+MSG)\r
-        self.assertNotEqual(h.stderr.getvalue().find("AssertionError"), -1)\r
-\r
-\r
-    def testHeaderFormats(self):\r
-\r
-        def non_error_app(e,s):\r
-            s('200 OK',[])\r
-            return []\r
-\r
-        stdpat = (\r
-            r"HTTP/%s 200 OK\r\n"\r
-            r"Date: \w{3}, [ 0123]\d \w{3} \d{4} \d\d:\d\d:\d\d GMT\r\n"\r
-            r"%s" r"Content-Length: 0\r\n" r"\r\n"\r
-        )\r
-        shortpat = (\r
-            "Status: 200 OK\r\n" "Content-Length: 0\r\n" "\r\n"\r
-        )\r
-\r
-        for ssw in "FooBar/1.0", None:\r
-            sw = ssw and "Server: %s\r\n" % ssw or ""\r
-\r
-            for version in "1.0", "1.1":\r
-                for proto in "HTTP/0.9", "HTTP/1.0", "HTTP/1.1":\r
-\r
-                    h = TestHandler(SERVER_PROTOCOL=proto)\r
-                    h.origin_server = False\r
-                    h.http_version = version\r
-                    h.server_software = ssw\r
-                    h.run(non_error_app)\r
-                    self.assertEqual(shortpat,h.stdout.getvalue())\r
-\r
-                    h = TestHandler(SERVER_PROTOCOL=proto)\r
-                    h.origin_server = True\r
-                    h.http_version = version\r
-                    h.server_software = ssw\r
-                    h.run(non_error_app)\r
-                    if proto=="HTTP/0.9":\r
-                        self.assertEqual(h.stdout.getvalue(),"")\r
-                    else:\r
-                        self.assertTrue(\r
-                            re.match(stdpat%(version,sw), h.stdout.getvalue()),\r
-                            (stdpat%(version,sw), h.stdout.getvalue())\r
-                        )\r
-\r
-# This epilogue is needed for compatibility with the Python 2.5 regrtest module\r
-\r
-def test_main():\r
-    test_support.run_unittest(__name__)\r
-\r
-if __name__ == "__main__":\r
-    test_main()\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-# the above lines intentionally left blank\r