Пример #1
0
def test_resolve_uri_returns_html_for_directory():
    """Should return an html listing of contents when passed directory."""
    from server import resolve_uri
    file1 = 'sample.txt'
    file2 = 'a_web_page.html'
    assert file1 in resolve_uri('webroot')[0]
    assert file2 in resolve_uri('webroot')[0]
Пример #2
0
def test_resolve_uri_fails_given_dots():
    with pytest.raises(IOError):
        req = (
            b"GET /../heres/the/URI HTTP/1.1\r\n"
            b"Host: www.example.com\r\n"
            b"\r\n"
            b"blah blah some kind of body\r\n"
            b"\r\n"
        )
        server.resolve_uri(req)
Пример #3
0
def test_resolve_uri_directory():
    """Test resolve uri will return correct body response and content type."""
    from server import resolve_uri
    response = (
        '<html><body><a style="display:block;margin:10px" href="/a_web_page.html">a_web_page.html</a><a style="display:block;margin:10px" href="/images">images&#128194;</a><a style="display:block;margin:10px" href="/make_time.py">make_time.py</a><a style="display:block;margin:10px" href="/sample.txt">sample.txt</a></body></html>',
        None)
    assert resolve_uri("/") == response
Пример #4
0
def test_resolve_uri_accessing_py_in_root():
    """Test if can access a Python file in the root directory."""
    from server import resolve_uri
    assert resolve_uri('/make_time.py') == (b"""#!/usr/bin/env python

\"\"\"
make_time.py

simple script that returns and HTML page with the current time
\"\"\"

import datetime

time_str = datetime.datetime.now().isoformat()

html = \"\"\"
<http>
<body>
<h2> The time is: </h2>
<p> %s <p>
</body>
</http>
\"\"\" % time_str

print(html)
""", 'text/x-python')
Пример #5
0
def test_resolve_uri(msg, result):
    """Take a msg and return a body of requested resource."""
    from server import resolve_uri
    file_type, body_len, body = resolve_uri(msg)
    assert b'HTTP/1.1 200 OK\r\nContent-Type: ' + file_type.encode(
        'utf8') + b'\r\nContent-Length: ' + str(body_len).encode(
            'utf8') + b'\r\n\r\n' + body == result
Пример #6
0
def test_resolve_uri_accessing_plain_text_in_root():
    """Test if can access a plain text file in the root directory."""
    from server import resolve_uri
    assert resolve_uri('/sample.txt') == (b"""This is a very simple text file.
Just to show that we can serve it up.
It is three lines long.
""", 'text/plain')
Пример #7
0
def test_resolve_uri_python_file():
    """Resolve should return the contents of a python file."""
    from server import resolve_uri
    return_val = ("""#!/usr/bin/env python

\"\"\"
make_time.py

simple script that returns and HTML page with the current time
\"\"\"

import datetime

time_str = datetime.datetime.now().isoformat()

html = \"\"\"
<http>
<body>
<h2> The time is: </h2>
<p> %s <p>
</body>
</http>
\"\"\" % time_str

print(html)
""", 'text/x-python')
    assert resolve_uri(b'webroot/make_time.py') == return_val
Пример #8
0
def test_resolve_uri_returns_content_of_text_file():
    """Should properly return the contents of a text file in a tuple."""
    from server import resolve_uri
    return_val = ("""This is a very simple text file.
Just to show that we can serve it up.
It is three lines long.\n""", "text/plain")
    assert resolve_uri(b'webroot/sample.txt') == return_val
Пример #9
0
def send_response(conn, addr):
    """Send response to client."""
    conn.settimeout(2)
    req = b''
    try:
        packet = conn.recv(8)
        req = packet
        while b'\r\n\r\n' not in req:
            packet = conn.recv(8)
            req += packet
    except socket.timeout:
        pass

    print(req.decode('utf8'))

    try:
        uri = parse_request(req)
        uri = uri if isinstance(uri, str) else uri.decode('utf8')
        res = response_ok(*resolve_uri(uri))

    except ValueError:
        res = response_error(400, 'Bad Request')

    except NotImplementedError as error:
        if 'GET' in error.args[0]:
            res = response_error(405, 'Method Not Allowed')
        else:
            res = response_error(501, 'Not Implmented')

    except (OSError, IOError) as error:
        res = response_error(404, 'Not Found')

    conn.sendall(res)
    conn.close()
Пример #10
0
def test_file_found():
    """Test that if a file is found, it will be returned."""
    from server import resolve_uri
    path = "sample.txt"
    body = (b"This is a very simple text file.\n"
            b"Just to show that we can serve it up.\n"
            b"It is three lines long.\n"
            )
    assert resolve_uri(path) == ("text/plain", body)
Пример #11
0
def test_resolve_uri_html_sub_directory():
    """Test if returns HTML file, with the contents of a sub-directory."""
    from server import resolve_uri
    assert resolve_uri('/images') == (b"""<!DOCTYPE html>
<html>
<body>
JPEG_example.jpg
sample_1.png
Sample_Scene_Balls.jpg
</body>
</html>
""", 'text/html')
Пример #12
0
def test_valid_root_directory(monkeypatch):
    monkeypatch.setattr(os.path, 'isdir', lambda x: True)
    monkeypatch.setattr(os, 'listdir',
                        lambda x: ['foo1.html', 'foo2.html', 'foo3.html'])
    (body, cont_type) = server.resolve_uri(b'/path/to/dir')
    expected_body = (b'<head>\n<body>\n<ul>\n'
                     b'<li>foo1.html</li>\n'
                     b'<li>foo2.html</li>\n'
                     b'<li>foo3.html</li>\n</ul>\n'
                     b'</body>\n</head>')
    assert body == expected_body
    assert cont_type == 'dir'
Пример #13
0
def test_resolve_uri_html_root_directory():
    """Test if returns HTML file, with the contents of the root directory."""
    from server import resolve_uri
    assert resolve_uri('/') == (b"""<!DOCTYPE html>
<html>
<body>
a_web_page.html
images
make_time.py
sample.txt
</body>
</html>
""", 'text/html')
Пример #14
0
def test_resolve_uri_to_response_ok_working_for_html(fake_socket):
    """Test that response_ok returns the file from resolve_uri as the body."""
    from server import response_ok, resolve_uri
    if sys.version_info.major == 3:
        from http.client import HTTPResponse
    else:
        from httplib import HTTPResponse

    response_str = response_ok(*resolve_uri('/a_web_page.html'))
    source = fake_socket(response_str)
    response = HTTPResponse(source)
    response.begin()
    assert response.read(len(response_str)) == b"""<!DOCTYPE html>
Пример #15
0
def test_resolve_uri_accessing_html_in_root():
    """Test if can access HTML file in the root directory."""
    from server import resolve_uri
    assert resolve_uri('/a_web_page.html') == (b"""<!DOCTYPE html>
<html>
<body>

<h1>Code Fellows</h1>

<p>A fine place to learn Python web programming!</p>

</body>
</html>

""", 'text/html')
Пример #16
0
def test_resolve_uri_content_of_html():
    """Test to see if html file is processed correctly."""
    from server import resolve_uri
    return_val = ("""<!DOCTYPE html>
<html>
<body>

<h1>Code Fellows</h1>

<p>A fine place to learn Python web programming!</p>

</body>
</html>

""", "text/html")
    assert resolve_uri(b'webroot/a_web_page.html') == return_val
Пример #17
0
def server(conn, address):
    """Return message to client."""
    try:
        buffer_length = 8
        reply_complete = False
        full_string = u""
        while not reply_complete:
            part = conn.recv(buffer_length)
            full_string = full_string + part.decode('utf-8')
            if len(part) < buffer_length:
                reply_complete = True
        print(full_string)
        try:
            uri = parse_request(full_string)
            body_tuple = resolve_uri(uri)
            if body_tuple:
                conn.send(response_ok(body_tuple))
            else:
                conn.sendall(response_error(u'404 Page Not Found'))
            conn.close()
        except NameError('Method not GET'):
            conn.sendall(response_error(u'405 Method Not Allowed'))
            conn.close()
        except TypeError('HTTP protol incorrect'):
            conn.sendall(response_error(u'505 HTTP Version Not Supported'))
            conn.close()
        except SyntaxError('URI incorrect'):
            conn.sendall(response_error(u'404 Page Not Found'))
            conn.close()
        except IOError('File not found'):
            conn.sendall(response_error(u'404 Page Not Found'))
            conn.close()
    except SystemError('Request not fully received'):
        conn.sendall(response_error())
        conn.close()
    except KeyboardInterrupt:
        conn.close()
    finally:
        conn.close()
Пример #18
0
def send_http_response(conn, address):  # pragma: no cover
    """Send a properly formatted HTTP response to the client.

    Request sent by the client should be a properly formatted
    HTTP request.
    """
    conn.settimeout(2)

    request = b''
    try:
        packet = conn.recv(8)
        request = packet
        while b'\r\n\r\n' not in request:
            packet = conn.recv(8)
            request += packet
    except socket.timeout:
        pass

    print(request.decode('utf8'))

    try:
        uri = parse_request(request)
        uri = uri if isinstance(uri, str) else uri.decode('utf8')
        response = response_ok(*resolve_uri(uri))

    except ValueError:
        response = response_error(400, 'Bad Request')

    except NotImplementedError as error:
        if 'GET' in error.args[0]:
            response = response_error(405, 'Method Not Allowed')
        else:
            response = response_error(501, 'Not Implmented')

    except (OSError, IOError) as error:
        response = response_error(404, 'Not Found')

    conn.sendall(response)
    conn.close()
Пример #19
0
def test_valid_content_type(monkeypatch):
    monkeypatch.setattr(os.path, 'isdir', lambda x: False)
    monkeypatch.setattr(os.path, 'abspath', lambda x: '/abs/path')
    monkeypatch.setattr(os.path, 'dirname', lambda x: 'dirname')

    # This class mocks out the opened file
    class MockOpenResult(object):
        def read(self):
            return 'file.txt content 1 2 3'

    # This class mocks out what happens with 'with open(filename) as f ...'
    class MockOpenResultHelper(object):
        def __enter__(self):
            return MockOpenResult()

        def __exit__(self, *args):
            pass

    monkeypatch.setattr(__builtin__, 'open', lambda x: MockOpenResultHelper())
    (body, cont_type) = server.resolve_uri(b'/path/to/file.txt')
    expected_body = b'file.txt content 1 2 3'
    assert body == expected_body
    assert cont_type == 'txt'
Пример #20
0
def test_resolve_uri_jpeg():
    assert server.resolve_uri(b'/images/JPEG_example.jpg')[1] == CONTENT_TYPES[1]
Пример #21
0
def test_resolve_uri():
    """Test that function resolves path and returns directory content."""
    from server import resolve_uri
    path = "/"
    assert resolve_uri(path) == ("text/html", DIR_RESP)
Пример #22
0
def test_resolve_uri_dir(uri, body):
    """Test resolve uri function for a directory."""
    assert body in resolve_uri(uri)[0]
Пример #23
0
def test_resolve_uri_jpg(uri, body, content_length, file_type):
    """Test resolve uri function with a proper jpg file."""
    assert resolve_uri(uri) == (body, content_length, file_type)
Пример #24
0
def test_resolve_uri_raises_415():
    """Test unsupported file type raises 415 error."""
    from server import resolve_uri
    with pytest.raises(TypeError):
        resolve_uri('/images/sample.bmp')
Пример #25
0
def test_resolve_uri_images():
    """Test image files are present."""
    from server import resolve_uri
    our_tuple = resolve_uri('/images/Sample_Scene_Balls.jpg')
    assert our_tuple[1] == 'jpg'
Пример #26
0
def test_resolve_uri_html_type():
    """Check uri type for html file."""
    from server import resolve_uri
    contents, content_type, size = resolve_uri('/a_web_page.html')
    assert content_type == 'text/html'
Пример #27
0
def test_not_found():
    not_found = b"GET starbucks.html HTTP/1.1\r\nHost:"
    with pytest.raises(LookupError):
        resolve_uri(parse_request(not_found))
Пример #28
0
def test_uri_response():
    request = b"GET sample.txt HTTP/1.1\r\nHost:"
    uri = parse_request(request)
    response = resolve_uri(uri)
    assert b"This is a very simple text file" in response[0]
    assert b"text" in response[1]
Пример #29
0
def test_uri_dir():
    request = b"GET images HTTP/1.1\r\nHost:"
    uri = parse_request(request)
    response = resolve_uri(uri)
    assert b"JPEG" in response[0]
Пример #30
0
def test_resolve_uri_nonexistant_file():
    """Assert function returns the correct body."""
    from server import resolve_uri
    path = resolve_uri('/WTF.txt')
    result = False
    assert path == result
Пример #31
0
def test_resolve_uri_dir():
    """Test image files are present."""
    from server import resolve_uri
    our_tuple = resolve_uri('/images')
    assert our_tuple[1] == 'text/html'
Пример #32
0
def test_resolve_uri_files():
    """Test image files are present."""
    from server import resolve_uri
    our_tuple = resolve_uri('/sample.txt')
    assert our_tuple[1] == 'txt'
Пример #33
0
def test_resolve_uri_txt_type():
    """Check uri type for sample.txt file."""
    from server import resolve_uri
    contents, content_type, size = resolve_uri('/sample.txt')
    assert content_type == 'text/plain'
Пример #34
0
def test_resolve_uri_bad():
    with pytest.raises(IOError):
        server.resolve_uri(b'/badfile.txt')
Пример #35
0
def test_resolve_uri_value_error():
    with pytest.raises(ValueError):
        server.resolve_uri(b'/path/to/../')
Пример #36
0
def test_resolve_uri_directory():
    assert server.resolve_uri(b'/images')[1] == CONTENT_TYPES[3]
Пример #37
0
def test_resolve_uri_works_with_directory():
    """Test proper URI resolution with directory input."""
    from server import resolve_uri
    assert resolve_uri('/images')[0] == 'text/directory'
Пример #38
0
def test_resolve_uri_python():
    assert server.resolve_uri(b'/make_time.py')[1] == CONTENT_TYPES[4]
Пример #39
0
def test_resolve_uri_raises_404():
    """Test bad directory raises 404 error."""
    from server import resolve_uri
    with pytest.raises(IOError):
        resolve_uri('/your_mom')
Пример #40
0
def test_resolve_uri_html():
    assert server.resolve_uri(b'/a_web_page.html')[1] == CONTENT_TYPES[3]
Пример #41
0
def test_resolve_uri_py(uri, body, content_length, file_type):
    """Test resolve uri function for a py file."""
    assert resolve_uri(uri) == (body, content_length, file_type)
Пример #42
0
def test_resolve_uri_png():
    assert server.resolve_uri(b'/images/sample_1.png')[1] == CONTENT_TYPES[2]
Пример #43
0
def test_resolve_uri_error(uri):
    """Test resolve uri function for bad uri."""
    with pytest.raises(IOError):
        resolve_uri(uri)
Пример #44
0
def test_resolve_raises_error_bad_path():
    """Should raise value error when given a non existent path."""
    from server import resolve_uri
    with pytest.raises(ValueError):
        resolve_uri('webrot/make_time.py')
Пример #45
0
def test_file_not_found():
    """Test that a directory not found raises an error."""
    from server import resolve_uri
    with pytest.raises(OSError):
        resolve_uri('/webroot.html/')
Пример #46
0
def test_resolve_uri_success():
    body, content_type = server.resolve_uri(b'/sample.txt')
    assert b"simple text file" in body
    assert b"text" in content_type
Пример #47
0
def test_resolve_uri_txt():
    assert server.resolve_uri(b'/sample.txt')[1] == CONTENT_TYPES[0]
Пример #48
0
def test_resolve_uri_failure():
    with pytest.raises(IOError):
        server.resolve_uri(b"laskjdhfku")
Пример #49
0
def test_resolve_uri():
    """Test if resolve uri returns correct vals."""
    from server import resolve_uri
    resolve_uri('test.txt') == (b'txt', b'content of test file', b'20')
Пример #50
0
def test_resolve_uri_invalid():
    with pytest.raises(LookupError):
        server.resolve_uri("http://www.host.com/blah")
Пример #51
0
def test_resolve_uri_py_type():
    """Check uri type for .py file."""
    from server import resolve_uri
    contents, content_type, size = resolve_uri('/make_time.py')
    assert content_type == 'text/x-python'
Пример #52
0
def test_resolve_uri_works_with_html():
    """Test proper URI resolution with html file."""
    from server import resolve_uri
    assert resolve_uri('/a_web_page.html')[0] == 'text/html'
Пример #53
0
def test_resolve_uri_img_type():
    """Check uri type for images directory."""
    from server import resolve_uri
    contents, content_type, size = resolve_uri('/webroot/images')
    assert content_type == 'directory'
Пример #54
0
def test_resolve_uri_works_with_python_file():
    """Test proper URI resolution with .py file."""
    from server import resolve_uri
    assert resolve_uri('/make_time.py')[0] == 'text/plain'
Пример #55
0
def test_resolve_uri():
    body, resource_type = resolve_uri('/')
    assert resource_type == 'text/html'
    assert '<li>sample.txt</li>' in body
    lines = body.split()
    assert lines[0] == '<!DOCTYPE'
Пример #56
0
def bad_parse():
    request = b"""GETTER sample.txt HTTP/1.11\r\n
    Content-Type: noodles\r\nHoster: bathtime"""
    with pytest.raises(AttributeError):
        resolve_uri(request)
Пример #57
0
def test_resolve_uri_image():
    """Should return contents of the image and type."""
    from server import resolve_uri
    return_val = (b"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x04\xb0\x00\x00\x04\xb0\x08\x06\x00\x00\x00\xeb!\xb3\xcf\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\x00\tpHYs\x00\x00\x0b\x12\x00\x00\x0b\x12\x01\xd2\xdd~\xfc\x00\x00\x00\x15tEXtCreation Time\x003/28/09\xee/\xfb\xfc\x00\x00\x00\x1ctEXtSoftware\x00Adobe Fireworks CS3\x98\xd6F\x03\x00\x00 \x00IDATx\x9c\xec\xda1n\xc3@\x10\x04A\x9e\xc1\xff\x7fy\x1d:s$z\xdbR\xd5\x0b&\xe1\x81h\xec\x99\xeb\x9a\x0b\x00\x80\x979\xfe\xae\x00\x00^\xeak{\x00\x00\x00\x00\x00\xfcF\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 \xed\xde\x1e\x00<\xefl\x0f\x00\xf84\x1e^\x80\xbf5\xdb\x03\x80\xa7\xb9\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 \xed\xde\x1e\x00P33\xdb\x13\x00\x80\x0fw\xce\xd9\x9e\x00\x90\xe2\x02\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x80\xb4{{\x00\xc0G:g{\x01\xf0\xa03\xdb\x0b\x80'\xcd\xe5#\x07\xf8k.\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H\xbb\xb7\x07\x00\x00\xbc\x9d3\xdb\x0b\x80'\xf9\xc4{\xbc\xbb\xf0\xf6\\`\x01\x00\x00\x00\x90&`\x01\x00\x00\x00\x90v_3g{\x04\xf0\xe3\x9cG>I7\xd51\xe7\xba\xbc\xbd\xf0\xde\xbc\xbb\x00\x00/\xe4\x02\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x804\x01\x0b\x00\x00\x00\x80\xb4{{\x00\xc0'\x9a\x99\xd9\xde\x00\x00\x00\xf0_\xb8\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x02\x00\x00\x00 M\xc0\x82\xefv\xed\x18\x85a \x08\x82 \x07\xfa\xff\x97\xd7\xa9\x1d8\x12x\x1b\xb9\xea\x05\x137\x03\x00\x00\x00\xa4\tX\x00\x00\x00\x00\xa4\tX\x00\x00\x00\x00\xa4\tX\x00\x00\x00\x00\xa4\tX\x00\x00\x00\x00\xa4\tX\x00\x00\x00\x00\xa4\tX\x00\x00\x00\x00\xa4\tX\x00\x00\x00\x00\xa4\tX\x00\x00\x00\x00\xa4\tX\x00\x00\x00\x00\xa4\tX\x00\x00\x00\x00\xa4\tX\x00\x00\x00\x00\xa4\tX\x00\x00\x00\x00\xa4\tX\x00\x00\x00\x00\xa4\tX\x00\x00\x00\x00\xa4]\xdb\x03\x00j\xce9\xdb\x13\x00\x00\x00x\xe3\x81\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\x9a\x80\x05\x00\x00\x00@\xda\xb5=\x00\xf8\x89\xb3=\x00\xe0\xbf\xccl/\x00\x00x\x12\x0f,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\xae\xed\x01\xc0\xa7\x99\xd9\x9e\x00\xc0M\xe7l/\x00\x00x\x16\x0f,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\xbd\xde\x00\x13\x00\x00\x01\x85IDAT\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\x04,\x00\x00\x00\x00\xd2\xce\xcclo\x00\x00\x00\x00\x80\xaf<\xb0\x00\x00\x00\x00H\x13\xb0\x00\x00\x00\x00H{\x010m&k\x81\xac\xde\x1e\x00\x00\x00\x00IEND\xaeB`\x82", 'image/png')
    assert resolve_uri(b'webroot/images/sample_1.png') == return_val
Пример #58
0
def test_resolve_uri_dir():
    body, ctype = server.resolve_uri("http://www.host.com/")
    assert ctype == b'text/html'
    assert b'a_web_page.html' in body
    assert b'JPEG_example.jpg' not in body
Пример #59
0
def test_resolve_uri_file():
    body, resource_type = resolve_uri('/sample.txt')
    assert resource_type == 'text/plain'
    assert 'This is a very simple text file.' in body
Пример #60
0
def test_resolve_uri_not_found():
    with pytest.raises(LookupError):
        resolve_uri('/foo/bar.txt')