| { |
| "metadata": { |
| "name": "", |
| "signature": "sha256:50ffc723dfcf9f5650b542c1b77933eeaa2df6f665494225ce2aba661b86885e" |
| }, |
| "nbformat": 3, |
| "nbformat_minor": 0, |
| "worksheets": [ |
| { |
| "cells": [ |
| { |
| "cell_type": "heading", |
| "level": 1, |
| "metadata": {}, |
| "source": [ |
| "HTTP/2 Tutorial" |
| ] |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "This tutorial aims at creating an HTTP/2 session using Scapy. The frontpage of Google will be fetched. The favicon will also be loaded as a dependency of the frontpage. Finally, a Google query will be submitted. The first queries will be generated using some Scapy helpers. The last one will be generated by hand, to better illustrate the low level APIs.\n", |
| "\n", |
| "This tutorial can be run without any privileges (no root, no CAP_NET_ADMIN, no CAP_NET_RAW). One can select \"Cell -> Run All\" to perform the three queries." |
| ] |
| }, |
| { |
| "cell_type": "heading", |
| "level": 2, |
| "metadata": {}, |
| "source": [ |
| "Building the socket" |
| ] |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "First, we need to build an TLS socket to the HTTP server, and to negotiate the HTTP/2 protocol as the next protocol. Doing so requires a fairly recent version of the Python ssl module. We indeed need support of ALPN (https://www.rfc-editor.org/rfc/rfc7301.txt).\n", |
| "We build our TCP socket first." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "collapsed": false, |
| "input": [ |
| "import socket\n", |
| "dn = 'www.google.fr'\n", |
| "\n", |
| "# Get the IP address of a Google HTTP endpoint\n", |
| "l = socket.getaddrinfo(dn, 443, socket.INADDR_ANY, socket.SOCK_STREAM, socket.IPPROTO_TCP)\n", |
| "assert len(l) > 0, 'No address found :('\n", |
| "\n", |
| "s = socket.socket(l[0][0], l[0][1], l[0][2])\n", |
| "s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)\n", |
| "s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)\n", |
| "ip_and_port = l[0][4]" |
| ], |
| "language": "python", |
| "metadata": {}, |
| "outputs": [], |
| "prompt_number": 99 |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "We now build our SSL context and we wrap the previously defined socket in it." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "collapsed": false, |
| "input": [ |
| "import ssl\n", |
| "# Testing support for ALPN\n", |
| "assert(ssl.HAS_ALPN)\n", |
| "\n", |
| "# Building the SSL context\n", |
| "ssl_ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)\n", |
| "ssl_ctx.set_ciphers(':'.join([ # List from ANSSI TLS guide v.1.1 p.51\n", |
| " 'ECDHE-ECDSA-AES256-GCM-SHA384',\n", |
| " 'ECDHE-RSA-AES256-GCM-SHA384',\n", |
| " 'ECDHE-ECDSA-AES128-GCM-SHA256',\n", |
| " 'ECDHE-RSA-AES128-GCM-SHA256',\n", |
| " 'ECDHE-ECDSA-AES256-SHA384',\n", |
| " 'ECDHE-RSA-AES256-SHA384',\n", |
| " 'ECDHE-ECDSA-AES128-SHA256',\n", |
| " 'ECDHE-RSA-AES128-SHA256',\n", |
| " 'ECDHE-ECDSA-CAMELLIA256-SHA384',\n", |
| " 'ECDHE-RSA-CAMELLIA256-SHA384',\n", |
| " 'ECDHE-ECDSA-CAMELLIA128-SHA256',\n", |
| " 'ECDHE-RSA-CAMELLIA128-SHA256',\n", |
| " 'DHE-RSA-AES256-GCM-SHA384',\n", |
| " 'DHE-RSA-AES128-GCM-SHA256',\n", |
| " 'DHE-RSA-AES256-SHA256',\n", |
| " 'DHE-RSA-AES128-SHA256',\n", |
| " 'AES256-GCM-SHA384',\n", |
| " 'AES128-GCM-SHA256',\n", |
| " 'AES256-SHA256',\n", |
| " 'AES128-SHA256',\n", |
| " 'CAMELLIA128-SHA256'\n", |
| " ])) \n", |
| "ssl_ctx.set_alpn_protocols(['h2']) # h2 is a RFC7540-hardcoded value\n", |
| "ssl_sock = ssl_ctx.wrap_socket(s, server_hostname=dn)" |
| ], |
| "language": "python", |
| "metadata": {}, |
| "outputs": [], |
| "prompt_number": 100 |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "We then connect the socket to the TCP endpoint." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "collapsed": false, |
| "input": [ |
| "ssl_sock.connect(ip_and_port)\n", |
| "assert('h2' == ssl_sock.selected_alpn_protocol())" |
| ], |
| "language": "python", |
| "metadata": {}, |
| "outputs": [], |
| "prompt_number": 101 |
| }, |
| { |
| "cell_type": "heading", |
| "level": 2, |
| "metadata": {}, |
| "source": [ |
| "Reading the server settings and acknowledging them." |
| ] |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "With HTTP/2, the server is the first to talk, sending its settings for the HTTP/2 session. Let's read them. For this, we wrap the TLS connection into a Scapy SuperSocket for easier management." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "collapsed": false, |
| "input": [ |
| "import scapy.supersocket as supersocket\n", |
| "import scapy.contrib.http2 as h2\n", |
| "import scapy.config\n", |
| "scapy.config.conf.debug_dissector = True\n", |
| "ss = supersocket.SSLStreamSocket(ssl_sock, basecls=h2.H2Frame)\n", |
| "srv_set = ss.recv()\n", |
| "srv_set.show()" |
| ], |
| "language": "python", |
| "metadata": {}, |
| "outputs": [ |
| { |
| "output_type": "stream", |
| "stream": "stdout", |
| "text": [ |
| "###[ HTTP/2 Frame ]### \n", |
| " len = 0x12\n", |
| " type = SetFrm\n", |
| " flags = set([])\n", |
| " reserved = 0L\n", |
| " stream_id = 0L\n", |
| "###[ HTTP/2 Settings Frame ]### \n", |
| " \\settings \\\n", |
| " |###[ HTTP/2 Setting ]### \n", |
| " | id = Max concurrent streams\n", |
| " | value = 100\n", |
| " |###[ HTTP/2 Setting ]### \n", |
| " | id = Initial window size\n", |
| " | value = 1048576\n", |
| " |###[ HTTP/2 Setting ]### \n", |
| " | id = Max header list size\n", |
| " | value = 16384\n", |
| "\n" |
| ] |
| } |
| ], |
| "prompt_number": 102 |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "Let's make a note of the server settings for later usage.\n", |
| "We define variables for the server settings. They are assigned the RFC-defined default values. These values are overwritten by the settings provided by the server, if they are provided." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "collapsed": false, |
| "input": [ |
| "srv_max_frm_sz = 1<<14\n", |
| "srv_hdr_tbl_sz = 4096\n", |
| "srv_max_hdr_tbl_sz = 0\n", |
| "srv_global_window = 1<<14\n", |
| "for setting in srv_set.payload.settings:\n", |
| " if setting.id == h2.H2Setting.SETTINGS_HEADER_TABLE_SIZE:\n", |
| " srv_hdr_tbl_sz = setting.value\n", |
| " elif setting.id == h2.H2Setting.SETTINGS_MAX_HEADER_LIST_SIZE:\n", |
| " srv_max_hdr_lst_sz = setting.value\n", |
| " elif setting.id == h2.H2Setting.SETTINGS_INITIAL_WINDOW_SIZE:\n", |
| " srv_global_window = setting.value" |
| ], |
| "language": "python", |
| "metadata": {}, |
| "outputs": [], |
| "prompt_number": 103 |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "HTTP/2 is a very polite protocol. We need to acknowledge the server settings. For this, we first need to send a constant string, which is a connection preface. This serves the purpose of confirming to the server that the HTTP/2 protocol is understood by the client. Scapy builds the appropriate packet for us to send from this constant string." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "collapsed": false, |
| "input": [ |
| "import scapy.packet as packet\n", |
| "\n", |
| "# We verify that the server window is large enough for us to send some data.\n", |
| "srv_global_window -= len(h2.H2_CLIENT_CONNECTION_PREFACE)\n", |
| "assert(srv_global_window >= 0)\n", |
| "\n", |
| "ss.send(packet.Raw(h2.H2_CLIENT_CONNECTION_PREFACE))" |
| ], |
| "language": "python", |
| "metadata": {}, |
| "outputs": [ |
| { |
| "metadata": {}, |
| "output_type": "pyout", |
| "prompt_number": 104, |
| "text": [ |
| "24" |
| ] |
| } |
| ], |
| "prompt_number": 104 |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "Then, we build the acknowledgment frame and we send our own settings in another frame. We will define very LARGE values (maximum values as defined in the RFC7540, in most cases), just so that we don't end up having to handle window management in this tutorial." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "collapsed": false, |
| "input": [ |
| "set_ack = h2.H2Frame(flags={'A'})/h2.H2SettingsFrame()\n", |
| "set_ack.show()" |
| ], |
| "language": "python", |
| "metadata": {}, |
| "outputs": [ |
| { |
| "output_type": "stream", |
| "stream": "stdout", |
| "text": [ |
| "###[ HTTP/2 Frame ]### \n", |
| " len = None\n", |
| " type = SetFrm\n", |
| " flags = set(['ACK (A)'])\n", |
| " reserved = 0\n", |
| " stream_id = 0\n", |
| "###[ HTTP/2 Settings Frame ]### \n", |
| " \\settings \\\n", |
| "\n" |
| ] |
| } |
| ], |
| "prompt_number": 105 |
| }, |
| { |
| "cell_type": "code", |
| "collapsed": false, |
| "input": [ |
| "own_set = h2.H2Frame()/h2.H2SettingsFrame()\n", |
| "max_frm_sz = (1 << 24) - 1\n", |
| "max_hdr_tbl_sz = (1 << 16) - 1\n", |
| "win_sz = (1 << 31) - 1\n", |
| "own_set.settings = [\n", |
| " h2.H2Setting(id = h2.H2Setting.SETTINGS_ENABLE_PUSH, value=0),\n", |
| " h2.H2Setting(id = h2.H2Setting.SETTINGS_INITIAL_WINDOW_SIZE, value=win_sz),\n", |
| " h2.H2Setting(id = h2.H2Setting.SETTINGS_HEADER_TABLE_SIZE, value=max_hdr_tbl_sz),\n", |
| " h2.H2Setting(id = h2.H2Setting.SETTINGS_MAX_FRAME_SIZE, value=max_frm_sz),\n", |
| "]" |
| ], |
| "language": "python", |
| "metadata": {}, |
| "outputs": [], |
| "prompt_number": 106 |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "We then send the two frames and then read the acknowledgment of our settings from the server. We set up a loop because the first frames that we may read could be PING frames or window management frames." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "collapsed": false, |
| "input": [ |
| "h2seq = h2.H2Seq()\n", |
| "h2seq.frames = [\n", |
| " set_ack,\n", |
| " own_set\n", |
| "]\n", |
| "# We verify that the server window is large enough for us to send our frames.\n", |
| "srv_global_window -= len(str(h2seq))\n", |
| "assert(srv_global_window >= 0)\n", |
| "ss.send(h2seq)\n", |
| "\n", |
| "# Loop until an acknowledgement for our settings is received\n", |
| "new_frame = None\n", |
| "while isinstance(new_frame, type(None)) or not (\n", |
| " new_frame.type == h2.H2SettingsFrame.type_id \n", |
| " and 'A' in new_frame.flags\n", |
| " ):\n", |
| " if not isinstance(new_frame, type(None)):\n", |
| " # If we received a frame about window management \n", |
| " if new_frame.type == h2.H2WindowUpdateFrame.type_id:\n", |
| " # For this tutorial, we don't care about stream-specific windows, but we should :)\n", |
| " if new_frame.stream_id == 0:\n", |
| " srv_global_window += new_frame.payload.win_size_incr\n", |
| " # If we received a Ping frame, we acknowledge the ping, \n", |
| " # just by setting the ACK flag (A), and sending back the query\n", |
| " elif new_frame.type == h2.H2PingFrame.type_id:\n", |
| " new_flags = new_frame.getfieldval('flags')\n", |
| " new_flags.add('A')\n", |
| " new_frame.flags = new_flags\n", |
| " srv_global_window -= len(str(new_frame))\n", |
| " assert(srv_global_window >= 0)\n", |
| " ss.send(new_frame)\n", |
| " else:\n", |
| " assert new_frame.type != h2.H2ResetFrame.type_id \\\n", |
| " and new_frame.type != h2.H2GoAwayFrame.type_id, \\\n", |
| " \"Error received; something is not right!\"\n", |
| " try:\n", |
| " new_frame = ss.recv()\n", |
| " new_frame.show()\n", |
| " except:\n", |
| " import time\n", |
| " time.sleep(1)\n", |
| " new_frame = None" |
| ], |
| "language": "python", |
| "metadata": {}, |
| "outputs": [ |
| { |
| "output_type": "stream", |
| "stream": "stdout", |
| "text": [ |
| "###[ HTTP/2 Frame ]### \n", |
| " len = 0x4\n", |
| " type = WinFrm\n", |
| " flags = set([])\n", |
| " reserved = 0L\n", |
| " stream_id = 0L\n", |
| "###[ HTTP/2 Window Update Frame ]### \n", |
| " reserved = 0L\n", |
| " win_size_incr= 983041L\n", |
| "\n", |
| "###[ HTTP/2 Frame ]### \n", |
| " len = 0x0\n", |
| " type = SetFrm\n", |
| " flags = set(['ACK (A)'])\n", |
| " reserved = 0L\n", |
| " stream_id = 0L\n", |
| "\n" |
| ] |
| } |
| ], |
| "prompt_number": 107 |
| }, |
| { |
| "cell_type": "heading", |
| "level": 2, |
| "metadata": {}, |
| "source": [ |
| "Build the form query with the helpers" |
| ] |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "We are now building a query for the frontpage https://www.google.fr/. We use the HTTP/2 Scapy Module helpers to build this query. The parse_txt_hdrs helper receives various parameters regarding the size of the header blocks and the frame to automatically split the values on multiple frames, if need be. It also receives two callbacks to know which flavour of HPack header encoding we should apply.\n", |
| "\n", |
| "We either use the server settings if they were specified or the default values.\n", |
| "\n", |
| "You may note that we say that cookies are sensitive, regardless of their content. We would do something a bit smarter, if we knew what is the name of the cookies that are sensitive, and those that are merely informative. In HTTP/2 cookies are split into multiple \"cookie\" headers, while in HTTP/1.1, they are all stored inside the same header.\n", |
| "\n", |
| "As the client of this HTTP/2 connection, we need to use odd stream ids, per RFC7540. Since this is the first query, we will use the stream id 1." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "collapsed": false, |
| "input": [ |
| "tblhdr = h2.HPackHdrTable()\n", |
| "qry_frontpage = tblhdr.parse_txt_hdrs(\n", |
| " ''':method GET\n", |
| ":path /\n", |
| ":authority www.google.fr\n", |
| ":scheme https\n", |
| "accept-encoding: gzip, deflate\n", |
| "accept-language: fr-FR\n", |
| "accept: text/html\n", |
| "user-agent: Scapy HTTP/2 Module\n", |
| "''',\n", |
| " stream_id=1,\n", |
| " max_frm_sz=srv_max_frm_sz,\n", |
| " max_hdr_lst_sz=srv_max_hdr_lst_sz,\n", |
| " is_sensitive=lambda hdr_name, hdr_val: hdr_name in ['cookie'],\n", |
| " should_index=lambda x: x in [\n", |
| " 'x-requested-with', \n", |
| " 'user-agent', \n", |
| " 'accept-language',\n", |
| " ':authority',\n", |
| " 'accept',\n", |
| " ]\n", |
| ")\n", |
| "qry_frontpage.show()" |
| ], |
| "language": "python", |
| "metadata": {}, |
| "outputs": [ |
| { |
| "output_type": "stream", |
| "stream": "stdout", |
| "text": [ |
| "###[ HTTP/2 Frame Sequence ]### \n", |
| " \\frames \\\n", |
| " |###[ HTTP/2 Frame ]### \n", |
| " | len = None\n", |
| " | type = HdrsFrm\n", |
| " | flags = set(['End Stream (ES)', 'End Headers (EH)'])\n", |
| " | reserved = 0\n", |
| " | stream_id = 1\n", |
| " |###[ HTTP/2 Headers Frame ]### \n", |
| " | \\hdrs \\\n", |
| " | |###[ HPack Indexed Header Field ]### \n", |
| " | | magic = 1\n", |
| " | | index = 2\n", |
| " | |###[ HPack Indexed Header Field ]### \n", |
| " | | magic = 1\n", |
| " | | index = 4\n", |
| " | |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | | magic = 1\n", |
| " | | index = 1\n", |
| " | | \\hdr_value \\\n", |
| " | | |###[ HPack Header String ]### \n", |
| " | | | type = None\n", |
| " | | | len = None\n", |
| " | | | data = 'HPackZString(www.google.fr)'\n", |
| " | |###[ HPack Indexed Header Field ]### \n", |
| " | | magic = 1\n", |
| " | | index = 7\n", |
| " | |###[ HPack Indexed Header Field ]### \n", |
| " | | magic = 1\n", |
| " | | index = 16\n", |
| " | |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | | magic = 1\n", |
| " | | index = 17\n", |
| " | | \\hdr_value \\\n", |
| " | | |###[ HPack Header String ]### \n", |
| " | | | type = None\n", |
| " | | | len = None\n", |
| " | | | data = 'HPackZString(fr-FR)'\n", |
| " | |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | | magic = 1\n", |
| " | | index = 19\n", |
| " | | \\hdr_value \\\n", |
| " | | |###[ HPack Header String ]### \n", |
| " | | | type = None\n", |
| " | | | len = None\n", |
| " | | | data = 'HPackZString(text/html)'\n", |
| " | |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | | magic = 1\n", |
| " | | index = 58\n", |
| " | | \\hdr_value \\\n", |
| " | | |###[ HPack Header String ]### \n", |
| " | | | type = None\n", |
| " | | | len = None\n", |
| " | | | data = 'HPackZString(Scapy HTTP/2 Module)'\n", |
| "\n" |
| ] |
| } |
| ], |
| "prompt_number": 108 |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "The previous helper updated the HPackHdrTable structure with the headers that should be indexed. We don't need to look inside that table if we only use helpers. For the sake of this tutorial, though, we will." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "collapsed": false, |
| "input": [ |
| "for i in xrange(max(tblhdr._static_entries.keys()) + 1, max(tblhdr._static_entries.keys()) + 1 + len(tblhdr._dynamic_table)):\n", |
| " print('Header: {} Value: {}'.format(tblhdr[i].name(), tblhdr[i].value()))" |
| ], |
| "language": "python", |
| "metadata": {}, |
| "outputs": [ |
| { |
| "output_type": "stream", |
| "stream": "stdout", |
| "text": [ |
| "Header: user-agent Value: Scapy HTTP/2 Module\n", |
| "Header: accept Value: text/html\n", |
| "Header: accept-language Value: fr-FR\n", |
| "Header: :authority Value: www.google.fr\n" |
| ] |
| } |
| ], |
| "prompt_number": 109 |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "We also build a query for the favicon." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "collapsed": false, |
| "input": [ |
| "qry_icon = tblhdr.parse_txt_hdrs(\n", |
| " ''':method GET\n", |
| ":path /favicon.ico\n", |
| ":authority www.google.fr\n", |
| ":scheme https\n", |
| "accept-encoding: gzip, deflate\n", |
| "accept-language: fr-FR\n", |
| "accept: image/x-icon; image/vnd.microsoft.icon\n", |
| "user-agent: Scapy HTTP/2 Module\n", |
| "''',\n", |
| " stream_id=3,\n", |
| " max_frm_sz=srv_max_frm_sz,\n", |
| " max_hdr_lst_sz=srv_max_hdr_tbl_sz,\n", |
| " is_sensitive=lambda hdr_name, hdr_val: hdr_name in ['cookie'],\n", |
| " should_index=lambda x: x in [\n", |
| " 'x-requested-with', \n", |
| " 'user-agent', \n", |
| " 'accept-language',\n", |
| " ':authority',\n", |
| " 'accept',\n", |
| " ]\n", |
| ")\n", |
| "qry_icon.show()" |
| ], |
| "language": "python", |
| "metadata": {}, |
| "outputs": [ |
| { |
| "output_type": "stream", |
| "stream": "stdout", |
| "text": [ |
| "###[ HTTP/2 Frame Sequence ]### \n", |
| " \\frames \\\n", |
| " |###[ HTTP/2 Frame ]### \n", |
| " | len = None\n", |
| " | type = HdrsFrm\n", |
| " | flags = set(['End Stream (ES)', 'End Headers (EH)'])\n", |
| " | reserved = 0\n", |
| " | stream_id = 3\n", |
| " |###[ HTTP/2 Headers Frame ]### \n", |
| " | \\hdrs \\\n", |
| " | |###[ HPack Indexed Header Field ]### \n", |
| " | | magic = 1\n", |
| " | | index = 2\n", |
| " | |###[ HPack Literal Header Without Indexing (or Never Indexing) ]### \n", |
| " | | magic = 0\n", |
| " | | never_index= Don't Index\n", |
| " | | index = 4\n", |
| " | | \\hdr_value \\\n", |
| " | | |###[ HPack Header String ]### \n", |
| " | | | type = None\n", |
| " | | | len = None\n", |
| " | | | data = 'HPackZString(/favicon.ico)'\n", |
| " | |###[ HPack Indexed Header Field ]### \n", |
| " | | magic = 1\n", |
| " | | index = 65\n", |
| " | |###[ HPack Indexed Header Field ]### \n", |
| " | | magic = 1\n", |
| " | | index = 7\n", |
| " | |###[ HPack Indexed Header Field ]### \n", |
| " | | magic = 1\n", |
| " | | index = 16\n", |
| " | |###[ HPack Indexed Header Field ]### \n", |
| " | | magic = 1\n", |
| " | | index = 64\n", |
| " | |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | | magic = 1\n", |
| " | | index = 19\n", |
| " | | \\hdr_value \\\n", |
| " | | |###[ HPack Header String ]### \n", |
| " | | | type = None\n", |
| " | | | len = None\n", |
| " | | | data = 'HPackZString(image/x-icon; image/vnd.microsoft.icon)'\n", |
| " | |###[ HPack Indexed Header Field ]### \n", |
| " | | magic = 1\n", |
| " | | index = 63\n", |
| "\n" |
| ] |
| } |
| ], |
| "prompt_number": 110 |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "You may note that several of the headers that are in common between the two queries (the one for the frontpage and the one for the /favicon.ico) are compressed in the second query. They are only refered to by an index number of the dynamic HPack Header Table.\n", |
| "We now alter the favicon query to be dependent of the query for the form." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "collapsed": false, |
| "input": [ |
| "real_qry_icon = h2.H2Frame(\n", |
| " stream_id=qry_icon.frames[0][h2.H2Frame].stream_id,\n", |
| " flags={'+'}.union(qry_icon.frames[0][h2.H2Frame].flags),\n", |
| ") / h2.H2PriorityHeadersFrame(\n", |
| " hdrs=qry_icon.frames[0][h2.H2HeadersFrame].hdrs,\n", |
| " stream_dependency=1,\n", |
| " weight=32,\n", |
| " exclusive=0\n", |
| ")\n", |
| "real_qry_icon.show()" |
| ], |
| "language": "python", |
| "metadata": {}, |
| "outputs": [ |
| { |
| "output_type": "stream", |
| "stream": "stdout", |
| "text": [ |
| "###[ HTTP/2 Frame ]### \n", |
| " len = None\n", |
| " type = HdrsFrm\n", |
| " flags = set(['End Stream (ES)', 'End Headers (EH)', 'Priority (+)'])\n", |
| " reserved = 0\n", |
| " stream_id = 3\n", |
| "###[ HTTP/2 Headers Frame with Priority ]### \n", |
| " exclusive = 0\n", |
| " stream_dependency= 1\n", |
| " weight = 32\n", |
| " \\hdrs \\\n", |
| " |###[ HPack Indexed Header Field ]### \n", |
| " | magic = 1\n", |
| " | index = 2\n", |
| " |###[ HPack Literal Header Without Indexing (or Never Indexing) ]### \n", |
| " | magic = 0\n", |
| " | never_index= Don't Index\n", |
| " | index = 4\n", |
| " | \\hdr_value \\\n", |
| " | |###[ HPack Header String ]### \n", |
| " | | type = None\n", |
| " | | len = None\n", |
| " | | data = 'HPackZString(/favicon.ico)'\n", |
| " |###[ HPack Indexed Header Field ]### \n", |
| " | magic = 1\n", |
| " | index = 65\n", |
| " |###[ HPack Indexed Header Field ]### \n", |
| " | magic = 1\n", |
| " | index = 7\n", |
| " |###[ HPack Indexed Header Field ]### \n", |
| " | magic = 1\n", |
| " | index = 16\n", |
| " |###[ HPack Indexed Header Field ]### \n", |
| " | magic = 1\n", |
| " | index = 64\n", |
| " |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | magic = 1\n", |
| " | index = 19\n", |
| " | \\hdr_value \\\n", |
| " | |###[ HPack Header String ]### \n", |
| " | | type = None\n", |
| " | | len = None\n", |
| " | | data = 'HPackZString(image/x-icon; image/vnd.microsoft.icon)'\n", |
| " |###[ HPack Indexed Header Field ]### \n", |
| " | magic = 1\n", |
| " | index = 63\n", |
| "\n" |
| ] |
| } |
| ], |
| "prompt_number": 111 |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "We can now send both queries to the server." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "collapsed": false, |
| "input": [ |
| "h2seq = h2.H2Seq()\n", |
| "h2seq.frames = [\n", |
| " qry_frontpage.frames[0],\n", |
| " real_qry_icon\n", |
| "]\n", |
| "srv_global_window -= len(str(h2seq))\n", |
| "assert(srv_global_window >= 0)\n", |
| "ss.send(h2seq)" |
| ], |
| "language": "python", |
| "metadata": {}, |
| "outputs": [ |
| { |
| "metadata": {}, |
| "output_type": "pyout", |
| "prompt_number": 112, |
| "text": [ |
| "117" |
| ] |
| } |
| ], |
| "prompt_number": 112 |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "Let's read the answers!" |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "collapsed": false, |
| "input": [ |
| "# The stream variable will contain all read frames; we will read on until stream 1 and stream 3 are closed by the server.\n", |
| "stream = h2.H2Seq()\n", |
| "# Number of streams closed by the server\n", |
| "closed_stream = 0\n", |
| "\n", |
| "new_frame = None\n", |
| "while True:\n", |
| " if not isinstance(new_frame, type(None)):\n", |
| " if new_frame.stream_id in [1, 3]:\n", |
| " stream.frames.append(new_frame)\n", |
| " if 'ES' in new_frame.flags:\n", |
| " closed_stream += 1\n", |
| " # If we read a PING frame, we acknowledge it by sending the same frame back, with the ACK flag set.\n", |
| " elif new_frame.stream_id == 0 and new_frame.type == h2.H2PingFrame.type_id:\n", |
| " new_flags = new_frame.getfieldval('flags')\n", |
| " new_flags.add('A')\n", |
| " new_frame.flags = new_flags\n", |
| " ss.send(new_frame)\n", |
| " \n", |
| " # If two streams were closed, we don't need to perform the next operations\n", |
| " if closed_stream >= 2:\n", |
| " break\n", |
| " try:\n", |
| " new_frame = ss.recv()\n", |
| " new_frame.show()\n", |
| " except:\n", |
| " import time\n", |
| " time.sleep(1)\n", |
| " new_frame = None\n", |
| "\n", |
| "stream.show()" |
| ], |
| "language": "python", |
| "metadata": {}, |
| "outputs": [ |
| { |
| "output_type": "stream", |
| "stream": "stdout", |
| "text": [ |
| "###[ HTTP/2 Frame ]### \n", |
| " len = 0xe1\n", |
| " type = HdrsFrm\n", |
| " flags = set(['End Headers (EH)'])\n", |
| " reserved = 0L\n", |
| " stream_id = 3L\n", |
| "###[ HTTP/2 Headers Frame ]### \n", |
| " \\hdrs \\\n", |
| " |###[ HPack Dynamic Size Update ]### \n", |
| " | magic = 1\n", |
| " | max_size = 12288\n", |
| " |###[ HPack Indexed Header Field ]### \n", |
| " | magic = 1\n", |
| " | index = 8\n", |
| " |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | magic = 1\n", |
| " | index = 59\n", |
| " | \\hdr_value \\\n", |
| " | |###[ HPack Header String ]### \n", |
| " | | type = Compressed\n", |
| " | | len = 11\n", |
| " | | data = 'HPackZString(Accept-Encoding)'\n", |
| " |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | magic = 1\n", |
| " | index = 26\n", |
| " | \\hdr_value \\\n", |
| " | |###[ HPack Header String ]### \n", |
| " | | type = Compressed\n", |
| " | | len = 3\n", |
| " | | data = 'HPackZString(gzip)'\n", |
| " |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | magic = 1\n", |
| " | index = 31\n", |
| " | \\hdr_value \\\n", |
| " | |###[ HPack Header String ]### \n", |
| " | | type = Compressed\n", |
| " | | len = 9\n", |
| " | | data = 'HPackZString(image/x-icon)'\n", |
| " |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | magic = 1\n", |
| " | index = 33\n", |
| " | \\hdr_value \\\n", |
| " | |###[ HPack Header String ]### \n", |
| " | | type = Compressed\n", |
| " | | len = 22\n", |
| " | | data = 'HPackZString(Thu, 08 Dec 2016 06:23:59 GMT)'\n", |
| " |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | magic = 1\n", |
| " | index = 36\n", |
| " | \\hdr_value \\\n", |
| " | |###[ HPack Header String ]### \n", |
| " | | type = Compressed\n", |
| " | | len = 22\n", |
| " | | data = 'HPackZString(Fri, 16 Dec 2016 06:23:59 GMT)'\n", |
| " |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | magic = 1\n", |
| " | index = 44\n", |
| " | \\hdr_value \\\n", |
| " | |###[ HPack Header String ]### \n", |
| " | | type = Compressed\n", |
| " | | len = 22\n", |
| " | | data = 'HPackZString(Thu, 08 Dec 2016 01:00:57 GMT)'\n", |
| " |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | magic = 1\n", |
| " | index = 0\n", |
| " | \\hdr_name \\\n", |
| " | |###[ HPack Header String ]### \n", |
| " | | type = Compressed\n", |
| " | | len = 16\n", |
| " | | data = 'HPackZString(x-content-type-options)'\n", |
| " | \\hdr_value \\\n", |
| " | |###[ HPack Header String ]### \n", |
| " | | type = Compressed\n", |
| " | | len = 5\n", |
| " | | data = 'HPackZString(nosniff)'\n", |
| " |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | magic = 1\n", |
| " | index = 54\n", |
| " | \\hdr_value \\\n", |
| " | |###[ HPack Header String ]### \n", |
| " | | type = Compressed\n", |
| " | | len = 3\n", |
| " | | data = 'HPackZString(sffe)'\n", |
| " |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | magic = 1\n", |
| " | index = 28\n", |
| " | \\hdr_value \\\n", |
| " | |###[ HPack Header String ]### \n", |
| " | | type = Compressed\n", |
| " | | len = 3\n", |
| " | | data = 'HPackZString(1494)'\n", |
| " |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | magic = 1\n", |
| " | index = 0\n", |
| " | \\hdr_name \\\n", |
| " | |###[ HPack Header String ]### \n", |
| " | | type = Compressed\n", |
| " | | len = 12\n", |
| " | | data = 'HPackZString(x-xss-protection)'\n", |
| " | \\hdr_value \\\n", |
| " | |###[ HPack Header String ]### \n", |
| " | | type = Compressed\n", |
| " | | len = 10\n", |
| " | | data = 'HPackZString(1; mode=block)'\n", |
| " |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | magic = 1\n", |
| " | index = 24\n", |
| " | \\hdr_value \\\n", |
| " | |###[ HPack Header String ]### \n", |
| " | | type = Compressed\n", |
| " | | len = 16\n", |
| " | | data = 'HPackZString(public, max-age=691200)'\n", |
| " |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | magic = 1\n", |
| " | index = 21\n", |
| " | \\hdr_value \\\n", |
| " | |###[ HPack Header String ]### \n", |
| " | | type = Compressed\n", |
| " | | len = 5\n", |
| " | | data = 'HPackZString(472252)'\n", |
| " |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | magic = 1\n", |
| " | index = 0\n", |
| " | \\hdr_name \\\n", |
| " | |###[ HPack Header String ]### \n", |
| " | | type = Compressed\n", |
| " | | len = 5\n", |
| " | | data = 'HPackZString(alt-svc)'\n", |
| " | \\hdr_value \\\n", |
| " | |###[ HPack Header String ]### \n", |
| " | | type = Compressed\n", |
| " | | len = 28\n", |
| " | | data = 'HPackZString(quic=\":443\"; ma=2592000; v=\"35,34\")'\n", |
| "\n", |
| "###[ HTTP/2 Frame ]### \n", |
| " len = 0x5d6\n", |
| " type = DataFrm\n", |
| " flags = set(['End Stream (ES)'])\n", |
| " reserved = 0L\n", |
| " stream_id = 3L\n", |
| "###[ HTTP/2 Data Frame ]### \n", |
| " data = '\\x1f\\x8b\\x08\\x00\\x00\\tn\\x88\\x02\\xff\\xbcX{PTU\\x18?\\xa6\\x8d\\x89\\xa5\\xf4G\\xff5\\x13\\xf60\\xffh\\xcc1\\x11\\xc7L\\xb3\\x07>\\xffp\\x94\\x10L\\x1b\\xd3L+kF\\'\\xb5\\x19\\xc7Rg\\xc2\\xb4@KtD _\\x91\\x80\\x8e\\x82\\x8a\\xa8\\x83\\nhI\\xa9\\xa8\\x08B\\x98\\xaf|\\xdf]`\\xc1}\\xb0{\\xf7;\\xbf\\xe6\\\\\\xeee\\xee\\xde\\xbd\\x97\\xdd\\xb5\\xb53\\xf3\\rg\\xcf\\xfd\\xbe\\xefw\\xcew\\xbe\\xd7\\x81\\xb1n\\xec1\\x16\\x1b+\\xfe\\xc6\\xb1y=\\x18\\xeb\\xcf\\x18\\x8b\\x8b\\xeb\\xf8\\x9d\\x1f\\xcbXF\\x0f\\xc6\\x060\\xc6b\\xc5:\\xebXWF\\x0f\\x16r\\x00\\x18DD\\x1b\\x89\\xa8\\x81\\x88\\xbc*\\xd5\\x13Q&\\xe7|\\xa0\\x95\\x1c\\xe7\\xbc\\x17\\x11e!\\xc4 \\xa2\\r\\x00\\x9e0\\x91\\xad\\x10\\xdf}\\xe4\\xc5\\x81\\xbfvb\\xf1\\x91\\x19H\\xd95\\x1c)\\x85\\xc3\\xb1\\xf0P*v\\xd7\\xe5\\xa2]vk:\\x8e\\xebuh\\xb8v\\xd7},(M\\xc1\\x94\\xfc!\\xa6\\x94\\xb17\\x05\\xdcq\\xafs\\x1f\\xday\\x15\\\\\\xbf\\x17\\x0bJ\\xa7*|\\x02s\\xfb\\xf9\\x1fQ{\\xff\\x0c.I\\xd5(\\xac\\xcdF\\xd6\\x8e\\xf1p\\xa4\\x8d\\x86;w.\\xc0\\xb9\\xa2C\\xd8\\x83\\x886\\x89\\xf9\\xeaKg1\\xa1p,\\x92\\x0b\\x87\\xa1N\\xaa\\x0e>\\xf7\\x9d\\x068W%\\xc2\\xf9\\xed[\\xf07\\x9c\\xd0\\xf6\\x90ID\\x8db\\xfe\\xca\\xc9V<]\\xd6\\x84\\xf4\\x0bE\\x96\\xb6k\\xdf\\xb3R\\x91o/I\\xd7\\xe4\\xc5\\xbd\\xf8\\xc4<\\xe6\\xa8\\x8c\\xc7\\xcbd\\x94\\xd8x\\x80\\x8c\\xe07\\x92\\xe7\\xd7E\\x9a\\xbcW\\x93\\xef}\\xacC\\xfe\\xa0=\\x0c\\xf9\\xc2\\xa5z\\xf9\\xcbb\\x1e\\xff\\x87\\x1f1\\xfb\\xbc\\xf8\\xec\\x177\\xc2\\x1d\\xaa\\x8f)w\\xf7\\xd39\\x19\\t\\x93\\xed\\x18\\x96(\\xe1|\\xad\\xcf\\x84\\xd7T~#\\xe7|\\xb0\\x98{\\xbd\\x1c\\xc9\\xb3\\x9a\\x10\\xff\\xb6\\x84\\xd7\\xc7\\xd9\\xb0!\\xc7\\x89s5>\\\\\\xa8\\xf5ac\\xae\\x13\\x93?h\\xc2\\x8d\\x9b~\\xa3\\x8aA\\xaa\\xff\\xe4\\x8a\\x1f\\xf7$B\\xca\\xecfE\\x87\\x19\\xcd_\\xec\\xd0co\\xd2\\xc5L\\x0c\\x11\\x9d\\xd0\\xf6\\x91\\xb7\\xdb\\x8d\\x19\\x9f4c\\xc4x\\x1b\\x86\\x8f\\x910\\xed\\xe3fl/p)\\xdfT\\xd9\\n\\xe1\\xf3\\x86\\xb8\\x8b\\xd1\\xf6\\x11\\xc2fYFYC,\\r\\x16<\\xe2^\\xc4\\xdd\\xaa\\xd4\\xa8\\xfa\\xe9 #\\xbf\\xa3/c\\xe5\\xdd\\x19[\\xde\\xad\\x83B\\r\\x8dO\\xc8\\x08\\xd9\\x01j\\x8eyS\\x9fgb\\xd9C\\x0f\\xce\\xf9S\\x9c\\xf3\\xa9\\xea\\x19\\xaa\\x88H\\xd2\\xe5!I]\\x136H\\x06\\xf0$\\x8b\\xd2\\xe0\\x9c\\xbfHD9D\\xe4\\x8a\\xc0\\x7f]D\\xb4\\x99s\\xfe\\xc2\\x7f\\xc0\\x15\\xb9o\\r\\x11\\xc9x\\xc8\\xa1\\xde\\xf1*c^\\r\\xf3\\xcc5\\x88\\xd2 \\xa2\\xf3\\x00\\x9e\\x0f\\x07[\\xad3\\x92\\x99\\x1e\\xc9y\\x07{\\xeb\\xb7ae\\xf9|\\xcc)\\x1e\\xa7\\xe4\\xd4\\xe4\\x82\\x04\\xcc.J\\xc4\\xb2\\xa3s\\x90W\\xb3\\x01W\\x9b\\x1b\\xac\\xf6p\\x8fs\\xfej\\x18\\xe7\\x0e\\xc2\\xb6\\xb9\\xeeb\\xed\\xefK\\x91T0\\xd4\\xb2\\x86\\xe8\\xe9\\xebcsq\\xa5\\xb9\\xdet\\x0fVvP\\xe3\\xfc\\xa2Q\\xe6\\xe4\\x8d\\xc3\\x98\\xbe{dX\\xb8z\\x12v)\\xae\\xc9\\xb6\\xba\\x8b \\x7f \\xa2\\xef\\x8d\\xbc\\xc5\\r;\"\\xc6\\xd5hf^<\\xfe\\xcc\\x18\\to\\xc5\\x16\\xb3=\\xac2\\xd8\\xfd%\\xa3\\x9fW^/\\xb5\\xd4\\xfd\\xc5\\xc1$l\\xa9NGic!\\x0e]\\xde\\xa5\\xdc\\xfb\\xd2\\xb2\\x8f\\x90\\x94\\x1f\\xaf|_\\xb25\\x017W\\x8f\\xee\\xacKZ]\\xd5\\xc7\\x85>6\\x8d\\xf9U\\xf8\\xd9\\xfb&6\\x9f\\xbbo\"\\xce\\xdc\\xae\\xb4\\xf4\\xf3\\xeb-\\x8d\\xc8/\\x9e\\x8dVC]t\\xadK\\x02\\xf7\\xba\\x8d{\\xd8\\xac\\x9e\\xbd\\x0f\\x11\\x05|\\\\yjm\\x10\\xf6\\xa2\\xc3\\xd3\\xd1\\xe6u\\x84\\x0e6\\xbf\\x0f\\x9e\\x9dK\\x82j\\xb3\\xaf\\xaa (G\\x89<\\xc99O\\xd5\\xaf_ss\\xf4*s\\xe3\\xb5\\xa2\\xb4N\\xecYE\\x89h\\xf1\\xd8\\xc3\\x8ew\\xeey\\xa0\\x9cY\\x8f\\xef\\xce\\x9a\\x19\\xcc\\xc7y\\xb2\\xc8\\xad\\xfa\\xb5\\xef\\xae\\x91\\xd2o\\x08\\xeaW\\xb2\\x1f\\x93\\xf2G\\xa0\\xecJQ\\xc49\\xc7w*?\\xc8\\x06\\xdcq7\\xa8f\\x12\\xd1i\\xfd\\xda\\x98j\\x7f\\'\\xbe\\xa0\\x81\\x95\\xb7 \\x93/\\xf2\\x9c\\']\\r\\xc2\\x97\\xeb+\\x8c\\xf8\\xa2f\\x05\\x18\\xf6\\xd9J9\\x00?\\xa5\\xc6\\xdf%\\x8eY\\x1ffE\\xbe\\xaaB#\\xbe\\xa4\\xf5y\\xda\\xe8y4\\x10\\x7f\\xd9\\xdf\\x145|c.\\xd0\\xf7\\x99\\xff\\x07\\xbe\\xef\\xb7<3\\xfc\\xa6\\xae\\xec\\x9fz1z\\xf6\\x97\\xeb\\x8e\\x9b\\xd9?\\xc0\\xff\\x12\\xcf\\x06\\xfa_\\xbf=^\\xc82\\x1e\\xc9P\\xfd/ \\xfe\\xd2t\\xf1\\xf7\\xccz\\x17\\x86\\x8c\\xb3a\\xff!\\xcf\\xa3\\xc2\\x17\\xfd\\xda4\\xfd\\xda\\x157G\\xcf\\xc32\\xe2\\x96\\xb4v\\xf6\\xd7c\\xdf\\xb3\\xa3\\xd9AQ\\xc7\\x17\\xfd$\\x80\\xbeD\\x14p\\xc0\\xcf\\xd79\\x83z\\xfc\\x0f\\xe7\\xb7\\xa0\\xad\\x8d\\x87\\xd4\\xe9t\\xf1\\xb0{D\\xd1\\xd3\\xaa\\xf5\\' 0n\\xdd\\xf1\\xe3\\x8d\\xf1\\xb6\\xa0=L\\x9a\\xde\\x84\\xaa3^K\\x9d\\xa7N{11\\xc5\\x8e\\x1f2\\x1f\\x84\\x83\\x9f\\xa3\\xab\\xbf/\\x13Q\\x80\\xa3\\x97\\x1c\\xf1X\\xbewR\\xe74c}\\xb6\\x13{\\x0ex\\xb0\\xb7\\xc4\\x83\\xccl\\xa7\\xf2\\x96\\xd1\\xf3\\xa4e\\xb4i\\xcfa3lY\\xf4Z\\x86\\xfe#\\xdd\\xc8\\xb7u\\xa7\\xcbr\\x0f\\xe1\\xd0\\x8a5mV\\xf8kLz\\xbf\\xdeDTg\\xe4\\x15v\\x189\\xc1\\x161\\xf6\\xa8\\x896\\x1c9\\xden\\x86]c\\xf5N\\xe3\\x9c\\xf7\\'\"\\x9bQ\\xe6\\xf6]?\\xbeZ\\xd1\\x8a\\xa1\\xef\\x84\\xc6\\x15<\\x8b\\xbfiUdL\\xb0%\\xa3\\xdd-\\xde\\x8963\\xbb\\t\\xbf\\xfc9\\xcf\\x85O\\xbft(1)\\xde\\xe4\\t\\xefJH\\x9cb\\xc7\\xbc\\x85-\\xd8\\xbc\\xcd\\x85\\x7fn\\xf9\\xadl.\\x99\\xbd3\\xbb\\xb0C]\\x14\\xf3LM\\xa8s[\\xf4\\xe3\\xe9\\xc6\\xb8\\x88\\x10W\\x16}uW\\xef\\xf20l!bs\\x8b1G\\x85\\xc0u\\x8b\\x9eV\\xf4\\xd5Q|\\x07\\xf7\\x11\\xb9Z}\\x0b\\x9f\\x16uS\\xf7\\x7f\\x04\\xbb\\xba\\x96#\\xfaI\\xc1\\x1b\\xb6\\x9d\\xcb\\xbb\\x03\\x8c\\xc1\\xcf\\xd8\\xa8v\\xc6\\x9es0\\xd6\\xf7:c=\\xcb\\x19\\xeb.h9c\\xdd\\x04E\\xba_MN\\xd3#t\\n\\xdd\\x02C`\\tL\\x81\\xfdo\\x00\\x00\\x00\\xff\\xff\\xc6\\xf9Yo6\\x15\\x00\\x00'\n" |
| ] |
| }, |
| { |
| "output_type": "stream", |
| "stream": "stdout", |
| "text": [ |
| "\n", |
| "###[ HTTP/2 Frame ]### \n", |
| " len = 0x8\n", |
| " type = PingFrm\n", |
| " flags = set([])\n", |
| " reserved = 0L\n", |
| " stream_id = 0L\n", |
| "###[ HTTP/2 Ping Frame ]### \n", |
| " opaque = 0\n", |
| "\n", |
| "###[ HTTP/2 Frame ]### \n", |
| " len = 0x167\n", |
| " type = HdrsFrm\n", |
| " flags = set(['End Headers (EH)'])\n", |
| " reserved = 0L\n", |
| " stream_id = 1L\n", |
| "###[ HTTP/2 Headers Frame ]### \n", |
| " \\hdrs \\\n", |
| " |###[ HPack Indexed Header Field ]### \n", |
| " | magic = 1\n", |
| " | index = 8\n", |
| " |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | magic = 1\n", |
| " | index = 33\n", |
| " | \\hdr_value \\\n", |
| " | |###[ HPack Header String ]### \n", |
| " | | type = Compressed\n", |
| " | | len = 22\n", |
| " | | data = 'HPackZString(Tue, 13 Dec 2016 17:34:51 GMT)'\n", |
| " |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | magic = 1\n", |
| " | index = 36\n", |
| " | \\hdr_value \\\n", |
| " | |###[ HPack Header String ]### \n", |
| " | | type = Literal\n", |
| " | | len = 2\n", |
| " | | data = 'HPackLiteralString(-1)'\n", |
| " |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | magic = 1\n", |
| " | index = 24\n", |
| " | \\hdr_value \\\n", |
| " | |###[ HPack Header String ]### \n", |
| " | | type = Compressed\n", |
| " | | len = 13\n", |
| " | | data = 'HPackZString(private, max-age=0)'\n", |
| " |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | magic = 1\n", |
| " | index = 31\n", |
| " | \\hdr_value \\\n", |
| " | |###[ HPack Header String ]### \n", |
| " | | type = Compressed\n", |
| " | | len = 22\n", |
| " | | data = 'HPackZString(text/html; charset=ISO-8859-1)'\n", |
| " |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | magic = 1\n", |
| " | index = 0\n", |
| " | \\hdr_name \\\n", |
| " | |###[ HPack Header String ]### \n", |
| " | | type = Literal\n", |
| " | | len = 3\n", |
| " | | data = 'HPackLiteralString(p3p)'\n", |
| " | \\hdr_value \\\n", |
| " | |###[ HPack Header String ]### \n", |
| " | | type = Compressed\n", |
| " | | len = 81\n", |
| " | | data = 'HPackZString(CP=\"This is not a P3P policy! See https://www.google.com/support/accounts/answer/151657?hl=en for more info.\")'\n", |
| " |###[ HPack Indexed Header Field ]### \n", |
| " | magic = 1\n", |
| " | index = 78\n", |
| " |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | magic = 1\n", |
| " | index = 54\n", |
| " | \\hdr_value \\\n", |
| " | |###[ HPack Header String ]### \n", |
| " | | type = Literal\n", |
| " | | len = 3\n", |
| " | | data = 'HPackLiteralString(gws)'\n", |
| " |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | magic = 1\n", |
| " | index = 28\n", |
| " | \\hdr_value \\\n", |
| " | |###[ HPack Header String ]### \n", |
| " | | type = Compressed\n", |
| " | | len = 3\n", |
| " | | data = 'HPackZString(4420)'\n", |
| " |###[ HPack Indexed Header Field ]### \n", |
| " | magic = 1\n", |
| " | index = 72\n", |
| " |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | magic = 1\n", |
| " | index = 0\n", |
| " | \\hdr_name \\\n", |
| " | |###[ HPack Header String ]### \n", |
| " | | type = Compressed\n", |
| " | | len = 11\n", |
| " | | data = 'HPackZString(x-frame-options)'\n", |
| " | \\hdr_value \\\n", |
| " | |###[ HPack Header String ]### \n", |
| " | | type = Compressed\n", |
| " | | len = 9\n", |
| " | | data = 'HPackZString(SAMEORIGIN)'\n", |
| " |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | magic = 1\n", |
| " | index = 55\n", |
| " | \\hdr_value \\\n", |
| " | |###[ HPack Header String ]### \n", |
| " | | type = Compressed\n", |
| " | | len = 165\n", |
| " | | data = 'HPackZString(NID=91=Wt1Jkm3Eretgg-hJ32fkj7kSSOLTc8tfEEIP5F2QTzHqbsXcCFve-QoN1oZvkGEqqqAWklc2wlj97YDkMnGXQUw20iCYMc3FD6X-KVuK1wdFURafcqQMQZ8e-F14YUfn; expires=Wed, 14-Jun-2017 17:34:51 GMT; path=/; domain=.google.fr; HttpOnly)'\n", |
| " |###[ HPack Indexed Header Field ]### \n", |
| " | magic = 1\n", |
| " | index = 71\n", |
| "\n", |
| "###[ HTTP/2 Frame ]### \n", |
| " len = 0x122b\n", |
| " type = DataFrm\n", |
| " flags = set(['End Stream (ES)', 'Padded (P)'])\n", |
| " reserved = 0L\n", |
| " stream_id = 1L\n", |
| "###[ HTTP/2 Padded Data Frame ]### \n", |
| " padlen = 230\n", |
| " data = '\\x1f\\x8b\\x08\\x00\\x00\\x00\\x00\\x00\\x02\\xff\\xc5:\\xebz\\xdb\\xb6\\x92\\xff\\xfb\\x144\\xfcU\\x96\\xd6\\xb4DR7R4\\x9d\\x93:n\\xe2n\\xda\\xa4\\'\\xc9I\\xcf\\xa6\\xa9>\\x90\\x84(\\xc6\\xbc\\x99\\x00e;\\xb2\\xdem\\x1fg\\xf3\\x16;\\x03^D\\xc9N\\xd2o\\xff\\xec\\x97DC\\x003\\x03\\xcc\\x053\\x03 \\xa7\\x07~\\xea\\x89\\xbb\\x8c)K\\x11Gg\\xa7\\xf8\\xab\\x84\\x82\\xc5\\xdcK3\\xe6\\x10\"\\x1b\\x88\\xe0\\x90\\xa5\\x10\\xd9l0\\xe0\\xde\\x92\\xc5\\xb4\\x9f\\xe6\\xc1\\xe0=s_\\xd3\\x80\\x11%\\xa2I\\xe0\\x90EN\\x80\\x03\\xa3\\xfe\\xd9i\\xcc\\x04U\\xbc4\\x11,\\x11\\x0e\\x11\\xecV\\x0c\\x90\\xb5\\xadxK\\x9as&\\x9cwo\\x7f>1\\x89\\x82<O\\xd8u\\x11\\xae\\x1cr^\\xa2\\x9f\\xbc\\x85\\xd9\\xc8>\\x8bA\\x18\\xc3L|\\xe0\\xe64\\xf1\\xc3$\\x18\\x04i\\x1aD,\\x18\\xe8\\xb7\\xf5\\xe7\\x9c\\x0b\\x18\\xa3\\xb9?\\xf7\\xd2(\\xcd\\xe7\\xbaa\\xfaY?K\\x82R\\x88,O3\\x87H6\\xc0]\\x84\"bg\\xcf%\\xe5\\xe9\\xa0l\\x9dr/\\x0f3q\\xd6]\\x14\\x89\\'\\xc24\\xe9\\xf6\\xd67a\\xe2\\xa77\\xfdr\\ng}uq9;z\\xf5\\xf9\\xe7\\xdf\\xdf\\xff2?y9z\\xf5_\\xf4ul%\"xu\\xa4^]\\xfc\\xf1\\x1a\\x06\\xa7cmj\\xe8\\xaa>\\x1c\\xeb\\x966T\\x87SM3FCu\\xa4\\x19\\x96\\xa9\\x8f\\x01\\x0e\\x8d\\xc9t\\x8a\\xd0\\xd4t\\x03\\xe0H7-\\x0b\\xe1pd\\xc9\\xf6\\xd8\\x1c\\xe9\\x08\\xcd\\xe1\\x08\\xf1\\xc6\\xe3\\xe9\\x08\\xe9&\\xc6d2A8\\x9e\\x9a\\xd8?\\x99\\x9a\\x13\\r\\xa19\\x1eKh\\x99C\\xb3\\x84\\x92~jL4C\\xc2\\xe9\\x14\\xe9\\xa7C\\xe0%\\xe1\\xd40%\\xb4\\xc68/p\\xb7\\xa6\\x12Zc9>\\xd1\\xac\\x12ZC\\xbd\\x84r}Ss$\\xf9\\x03\\x1cO$\\x9cNF\\x08-]\\x93mk4\\x92\\xf3Y\\xb0R\\tM\\xab\\x1c\\xb7\\xc6\\x08A\\xdc\\t\\xcec\\xea\\xda\\xb0\\x86\\xc8\\xd744\\xc9\\xcf4\\xf4\\xc9XBC\\x97\\xe3\\xc6D\\x97\\xe3\\xa0\\x069>\\x02\\rJ8\\x94\\xfa4a\\xbd\\xb2\\x7f\\xac\\x8d%\\xfexbH8\\xd1t]B\\xc3\\xd2$4\\'\\x12\\x7f:\\xd5%\\xfd\\xd4\\x92\\xfa7\\x91a\\t\\x87\\x93\\x12\\x8e\\xe4\\xb89)\\xf9[\\x9aV\\xc2R>\\xd3\\x1a\\x96\\xeb\\xb6\\x86\\xa3\\xb2=2\\xe5<\\xd6X\\xea\\xc5\\xb4&V\\xd9?\\x1d\\xe9\\x15D\\xfe\\xc0\\xc6\\x9cH8\\x1c\\x1b\\x12\\x8e4\\xbd\\x84\\xd2\\xae\\x16hf\\xa2\\x9aCM\\xd3\\xac\\x12\\x1aSC\\xc2\\xd1\\xd4TA\\xba\\xc9\\x04\\xfc\\x06\\xe0t\\x08\\xf3!\\x1c\\x81^\\x10\\x9ac\\xb3\\x84\\x96l\\x9b\\xda\\xb8\\x82\\x13\\x89o\\x8eA~\\x84\\x16\\xe8\\x07\\xa0\\x05\\x9c$D\\x7f\\xd45\\x03&4\\x87\\xe8\\xa8\\xf0a\\x18G*-\\xc4\\xb2\\xe0,\\x9fi\\xea\\x15\\xf7\\xf8\\xec\\xc8\\xb3<K7\\x17\\xda\\xdc\\x18\\x1dm\\xecr\\x0b\\xf4\\xaf^\\xbct\\x8e\\x16\\xf9\\x91\\xbd\\xe9u{v{\\xabT\\x08\\x91\\xe7|\\xf8XcG\\xa1\\xa3\\xd5\\xdf\\x01\\x13\\x17\\x97NC@{\\xebE\\x9awW4W\\\\\\x9bv:\\xdd\\x03\\x8a(O\\x85\\xc8C\\xb7\\x10\\xec\\xfe\\xfe\\xa0\\xeb:\\xbb}]\\xc2B\\x9f\\xf4z=\\xbbGa(\\xa39\\x04\\x87\\xdfR\\x9f\\xd99\\x13E\\x9e(\\xee\\xfd}\\xbd\\xce\\x8b\\xcbMk\\xe6\\x97_\\x9b\\xdaI\\x8a(\\xfa\\xfb\\xf3G\\xdf[@3)\\x866\\xee\\xb4\\xf4Sb\\xc80\\xcag\\xc4q\\xaa\\xd0\\x12\\xa5\\x1eE\\x8c>\\x04(\\x91B\\xe8j8\\xc4\\xd1Cr\\x05\\x97\\xdb`\\xdc\\xb40\\xa8\\xea\\xf6\\xd6\"\\xbf[7\\xd4\\xdd\\x8b<\\x071iO=\\xd0ap\\x03\\xf3x\\xcb\\xae\\xd7[o\\x1a\\x06\"\\x8c\\xd9\\xc3I\\xba\\t\\xbbQ\\x9eQ\\xc1z(\\xfd[\\xc0\\xe9\\xf6\\x1a\\x92(\\rv&U=\\xd5W\\x83\\xde\\x9a:[\\x84wy\\xd4\\x1a\\xb2\\xc3E\\x97\\x90\\x03\\x07\\xd4\\x0e\\xea\\x06\\xd6\\x97\\x18\\x84mT?k\\x88<u\\xd1|\\x876\\xfb\\xb0\\xf8\\xe8\\xb8\\xb6\\xdbO\\x13\\x86B8\\xf8\\x15\\xa5\\xd4\\x97\\x1f\\xd4Ms\\xd1^\\xb6\\xcf\"&\\x98\\x82T\\x1b{\\'dw:;\\xcd\\xfe\\x8aE\\x8ft\\xf5\\xa3\\xe2\\xf1^P\\x1e,\\x82\\xe7\\x9eC[.\\xbd8\\xd67m}\\x80\\xb8\\x8f\\xaa\\xa4\\x94\\x90\\x90\\x96h\\xfc\\xfe\\x9e\\x10\\xdb\\xbb\\xbf?\\xd1\\x0f@\\x16\\xceh\\x0e6!\\x1d\\x16:\\xa4w\\x7f\\xdf\\x05t\\xf9}\\xdc\\xde4]\\xbf\\xa7\\x9e\\xe8N\\x1b?\\x92\\x04\\xe0\\xb5\\xbe\\xb3\\xe3\\xe4\\x80\\x8a\\xbd\\xec\\xd8\\xa9p\\x8e\\xa1\\xc3\\xa6\\x0e\\xccH\\x06\\xe4\\xb8\\x1b\\x00\\x0cX27\\xb4\\x11\\xe9\\x1d\\x93\\'\\x14r\\xbb\\x13v<H\\xb1\\xc7\\xf4\\x98t<P19v\\x8f\\xd9\\xf1\\x02Z\\x9fo\\xb7+\\x11\\xd2\\r\\xec\\xc1_e\\x1d\\x10\\xf6\\x05\\xe3\\x02\\xf4\\xd3\\xe9\\xb4\\x1d\\xbe\\x8b\\xb3\\xef{ \\xa1D\\xfa\\xe0\\x1a\\x149\\xa3j\\x10\\xc5\\xf1L\\xdf\\xf4T\\n\\xba\\xe9\\xd5;\\x876\\x1a\\xbds\\xd6\\xcd\\xf7\\xed\\x9e\\x83\\xd7(\\x1fh?\\xf4?:\\x1f\\xa0\\xf3c\\xc5\\xe1@\\xdf\\xda\\xe4\\xba\\x1d\\x83\\xd0mv\\xcd\\xb3\\rV\\xd7\\xfd\\xac\\xe0\\xcb\\xee\\x87\\x0f\\xf4#\\x0e|l\\xfb9\\xf5\\x9fF\\xfb\\x1bl\\x9f\\x0e\\xe7\\x07\\x9aM\\xaf\\xef\\xd1(\\xea\\x8ae\\xc8{\\xd2\\xb3\\xe9\\xfe\\xfeV1\\x98,s\\xb6\\xe8C?\\xbb}\\x05{\\xe2\\x90\\xc8\\xbd\\xa1\\x9d:n\\xe9,^\\x8d\\xc2\\x0b\\x97C\\xccI\\x82\\xae{\\xac\\x83\\xd2\\xbb\\x7f\\xddwz\\xd7\\xce\\xa0T\\xba\\x07JF\\x7f\\xf0vXu:\\xb4\\x9f\\xb3,\\xa2\\x1e\\xc4\\xa9A\\xe9)O\\xc8\\xb1\\xd7t\\x96\\\\\\x16\\x99\\xf3\\xe1\\xaf\\xce\\xc7\\xff\\x18\\x04*A\\x17\\x90&_\\x12\\x10\\xe2tP\\x15@\\xa7\\\\\\xdcA=t\\x18\\xb84W\\x0f\\x03L\\n\\x100\\xa14\\xe3\\xe1g6\\xd3\\x87\\xd9\\xad\\x9dQ\\x1f\\xcb\\xb0\\x13\\x91f3=\\xbbU\\x0e\\xc28\\x83MI\\x13ao$\\xddz\\xc9\\xc2`)f\\x86\\x91\\xddn*\\x1e5\\x91\\x9b\\n\\x91\\xc6\\xb3\\xe9.\\x1dV\\x89\\'4\\n\\x83d\\x96#\\xe9\\xa6\\x1f\\xb8K\\x15~\\xfc5\\xecw\\x9f\\xe5\\xcdd<\\x8dB_9\\xf4,\\x7f\\xba\\xd0\\xed\\xd6\\xca`*$\\xaa\\xe7\\xd6\\xec,\\xe5!*\\x7fF] \\x82\\x08n#\\x0fc\\x04\\x12\\xdc\\x84\\xbeX\\xcetM\\xfbq\\xf3\\x8f\\x98\\xf9!U\\xc0\\x80k \\xd7\\xdbK\\xb7c\\x9a\\x07ar\"W4\\xeb\\x8fYl\\xafX.B\\xb0v\\xb5V`XI\\xbc\\x00\\x97\\x11\\xb3\\x88-\\xc4fC\\x91\\x91\\x8a\\xbf\\xa3\\xb5\\x14\\xccg^\\x9aKG\\x98\\x15`\\xb4<\\n\\x13\\xd6\\x92~\\x87@\\xd6\\xaf\\xb3CM\\xf3\\xda\\x180\\x14*\\xedq\\xdf7\\x991\\xddCY\\xec\\xa0@\\xf1\\xd1\\x1e\\xff\\x01L,M[Y\\xd8M\\xfd;U\\xf8*U3\\xb5\\xbf,m\\xbc\\xa0q\\x18\\xdd\\xcdh\\x1e\\xd2H\\xe54\\xe1\\'`\\xbap\\xb1A\\xdcu\\xa9\\rPl\\nZ\\x00yoN\\xeef\\xe04)\\xe4\\xa4\\xc3 \\rj\\x0b\\xcf\\xc0E\\x14\\x13\\xfei\\x1b\\xe1\\xafQ\\xd4\\x93J\\xa7}\\x93\\xc5\\xb0L\\xea\\xcdceoH\\x07\\x7f\\xd8@^\\x8e\\xabYj7144\\xeb\\xb2\\x16i8\\xf16\\xfd\\xeb\\x96\\x8e6}\\xc1\\x91W=\\xb7\\x86\\x1d\\xb5\\xcb\\x00ZD3\\xcef\\xf5\\xc7\\x86\\xc5\\xa5\\x9c7\\xe5\\xacn\\x1a\\xf9\\x95\\x0b\\xa1Jf\\t,\\x80F\\x1b\\x88\\xd4\\xa2\\xf1\\x83q\\xe3.#k\"}\\x8c/BU\\xa2 \\xe5LGQ\\x1f(\\x0c\\xb1x\\x850}\\x14\\xc1\\xe7k?\\xe4\\xb09\\xeffa\"U\\xe1\\xa6\\xb7\\xf6~\\x17\\x04\\x90\\xab\\xca\\r\\xa5^5e\\xb4\\xf5K\\xf4\\xb6\\x19\\xb47a\\x92\\x15b\\xc7\\x82a\\xb2\\x84i\\xda\\x9ee\\xc8\\xdf\\xe1\\xae\\x97\\xe9\\xfa\\x8e\\x97I3\\xbb\\xd4\\xbb\\n\\xf2\\x14\\x1cuv\\xb8X,\\xec\\x12\\xd5\\x85(r\\xb5\\xa1-B{\\xdf\\xb5\\x13\\xc8\\xd7\\x1b:[\\xa2{\\xa8tF!r\\xae\\xd8\\xd77\\xc0\\xa6\\xbf\\x88\\x14\\xda\\xb6,\\x9d\\xadB\\xd8\\xb2\\xcc\\xaf;\\xc7c\\x9d\\x9a\\xee\\xdf\\xdbO\\x12kX\\xce\\xfe\\x00K.\\xed0\\xc0\\xf3\\xa9\"\\x95Q\\xe1U\\xf3\\x80\\x98;;\\x89\\xbb\\x91\\xb7nG\\xb91\\x1a\\x1e{a\\xc1\\xb5\\x89vlc\\xa0mv\\xec\"#e+<\\xc9\\xf8\\x14q\\xd7\\xddQ0c\\xcc.\\xbduV\\x066@\\xb3\\xb7\\xee\\x8b\\x8b\\xf3<O9\\x84cX\\xf5\\x03M\\xbb\\xf2\\xcd\\xa1\\xd6\\xf0\\xdcY\\x14hVD\\xea\\xe1\"\\x8aZ\\xcb}\\xcc\\xa34E7*\\x16\\xedU\\x15P\\xc1\\xd5g\\xee\\x84\\xae\\xe6P\\xe5\\xa4\\x86a\\xe1q\\xba\\x07\\x1ex\\x02\\x873\\x10\\x172\\x0b\\xa3\\xe2\\xa4^\\xae\\xd4\\xb1\\xdd\\xecL\\xcd\\xf6\\x8a\\x9c\\xc3w\\x96\\x86p\\x8c\\xcf\\xdbk\\xb6\\xb7\\x91\\xa4\\x10\\xb8*\\xf8*\\xb7\\xca\\xf8\\x91\\xad\\xf2X\\xcc\\xc5\\x15\\xd7\\x0e\\xd6V\\'(G\\xee\\xde\\xd9\"\\xf5\\n\\xbe\\xae\\xd9K\\xf3o\\xc3_\\x95\\xe8\\x9a\\x8c\\x078W\\n\\xa6\\xdeG\\xae\\x1a\\xa00\\xf7\\x0bO\\x0cB/m\\xee\\x1a\\xa2\\xd4\\xcf\\xfa\\xd0A@\\x07\\x91C\\xf8\\x12\\xfc\\xc6+\\x84\\x02]\\t\\x01\\xbe\\xe55\\x08n&\\xc5\\r\\xa4F\\x1c\\x82>F\\x1e\\xbde\\xc0\\xdc\\x8fE\\xe6\\xd1WT~$K\\x8a\\x90q(\\xbdi\\xc4\\x99\\xed\\x83l1\\x1c=\\xfa8CU\\x1a+\\x8e\\xf2\\xf0\\xe2\"Q:\\x1d\\xa5\\xfe\\xeeb\\xb9\\xa1t\\x1b\\xe2r\\xb2\\xde\\xba\\xa9\\xc9\\xbb=Y\\xeb\\xc2?{\\xf3\\x03\\xa2\\x1e\\xe0\\x9cP_\\xd7\\x14\\x8bNg\\xfb\\xdd\\xbf\\xeeK\\x1d\\x03\\xdb\\xa63p\\xaf\\xdb8\\xd8l\\xa1m~\\x80?xn\\xdc*\\xde\\x0fWJ\\x085g\\x9c\\x04.9S\\xea6&\\xd4\\xb3\\xd3$u\\xe1\\xd7U\\xbc\\x88r\\x0e}\\xfa\\xd9?\\x99\\x07Q\\r\\xfe\\x9d\\x0e\\\\\\xc0\\xa6\\xdb\\xa1\\xcaz\\xe5\\xf1j0\\xb8\\xb9iJ\\xf9E\\x0ej\\r\\x96\\xd9\\x93%TsyGP\\x17j3r&%\\xe6\\xa7\\x03\\xfaM>1$\\x8d\\x16#l\\xb6\\xf9D\\xe4\\xecW\\xe8\\xfa\\x1e\\x17\\xdc~5\\x17/\\x8d\\x07m\\x16&9{\\r\\xc3\\xdfc\\x81\\x02\\xdd\\x817\\x17n\\xc5\"\\x88\\x9c\\x9f\\xffY\\xb2\\xd0\\xc9\\xd9\\xbf\\xd3\\xe2-\\x0c}\\x8f\\x0b\\x98\\xba-Nr\\xc3w\\xf5\\x02\\xce\\xfb\\xd4\\x13\\x05l3\\xf1\\xe5o\\xe8&\\x8c\\xdaRa{\\xf0D\\xf2\\x89\\xc9\\xd9sl~\\x8f\\x85\\x9f\\xc3\\xfe\\xdd\\xd1\\x8c$O\\xc9\\xd93\\x1cyH.7py\\xa5\\xb8\\x1f\\xdd\\xc9\\xb7] \\x11\\xd1\\x00`\\x9a!\\x01\\x1f\\xc0N,@\\xf1\\x05HY\\x9c)\\x9d\\x9c^\\x17\\xa9\\x8d\\xf3\\x9d\\x0eJ\\xb7\\x1b\\x80+6\\xfe)\\x0bXE\\x16\\x01\\x0e\\xd6\\x8c\\xb5o\\xf2\\x8c&\\xa5\\xbf&\\xcd\"C\\x8c+\\xd0\\xdf\\x1e]4\\xa3\\x8bGFY\\xd3G[2<\\x10\\x01\\x0e\\x17\"\\xcd\\xefP\\x04p\\x84\\xd2l\\xa4a<:{!\\xc7\\xc3\\xeb\\x82)\\xef\\x99+uw\\x8f\\xda\\xab\\x03[\\x06\\x80\\xe5,\\xf1\\x18\\x7fH\\xfc\\x9a\\xe64\\xfe\\x1f\\x91W[B\\x12\\n\\x08\\xd2L8s\\x88\\xb7\\xe5B\\xe7SmO\\xc9\\xd4\\xf3 \\xee\\n\\xde\\xb6\\xe1\\x1b\\x96\\xafB\\x8f\\xbdL!\\xc2W\\xce\\x95\\xc14`OG\\xe4\\x05\\xeb\\xe0\\xadn\\x98\\x14\\xccy\\xdcR\\xedU\\x9d\\xa7I\\xc2n\\xc1`\\x8f[\\xa6F\\\\V~!\\xd3\\xae\\xf6-\\x8c\\xb2\\x90\\xafQ\\x94\\n\\xd3c\\x98\\xa0 \\xd4\\xc0\\x19,\\x82\\x93\\x93C\\xe00@d`\\x8a\\x82\\xcc\\'\\xdb8\\x15\\x05\\xb4jU\\x9eX\\x97\\x9d\\x86\\xacw\\x15H\\xf9\\xbb\\xe3uu\\xabkM\\x15iL\\'\\x98\\xe2\\x1f\\xcf\\xb6{7\\xdc\\x98\\x05\\xb6\\x97\\xdc\\xd8\\x9a\\xdf,\\xa1@\\x9ao\\xc9\\xab\\xfbncj\\xdcZFy\\xe5\\xddS\\x92\\xf4\\xa4\\xcc\\xceD\\x91\\xb7\\xdb\\x0e)/\\xbb\\x89\"S(\\x08\\x02\\xaa*%\\\\f\\xc8\\x96(\\xd5\\r\\x0bi\\x0e\\xaeQ\\xa7\\x03?\\xdd\\xde\\xae@U~\\x9fN\\xa7\\xed\\xdafR\\x97:\\xed\\xba\\xba9~A\\x92\\xa4\\x98\\xa9\\xe5\\xf1k\\x8a\\x9a\\x90\\x962\\xb0r&\\xb0\\xd6\\x9b\\x9cf\\x0e!g?\\x83\\xf0\\x1e\\xab\\x8c\\xd2\\xfe\\xdd\\x9a\\x1dO\\x08\\n\\x95i\\xce\\xa9\\x8f\\xb9\\xc0\\x82\\xc6\\xb04L\\xaf\\x10?\"\\xa6x,\\x8a*\\xcb8D#\\xb2\\r;\\xcc\\xab\\xda\\x80\\x96+\\xabJ\\x13\\xb0&\\xec\\xf0\\xab\\xedM\\x8c\\xf1\\x8f\\xe4\\xac\\x93\\xb8<\\x83x |9T\\xa1\\x96~\\xd2^\\xf1\\xa9,\\xbc\\xab\\xf9CP/p\\x05\\xcf&\\x97o^\\x9d\\x98\\xe6\\xd8:\\xd1\\xc1\\x00\\xe5\\xfbI\\xe8\\xfb,i(*<\\xdc\\x84%\\xf12\\xfa\\nf9\\xcc\\xd3\"\\xf7\\xd8\\x1eJ\\xcde\\x99\\xeda\\xbb\\xe1\\xcd7\\xb9\\xb9\\xe1\\xf2\\xc1\\xf8v\\xbb\\x10\\x9f\\x93=\\xff\\x1dn\\x0f\\xc3x\\xdeP\\xb4\\x86\\xe1\\xae[`\\xd9\\xd7\\xd4v\\xf5\\xde\\x18\\xd7\\xc7A\\x05\\xdd\\xe4a1\\x07NY\\xe0\\xddg\\x9c\\xe1=\\x9eCR(\\x94\\xea\\xa5@)\\xd7\\x88\\xd9\\xf8rS\\x06(\\xb5W\\xc7\\xf46bI \\xed\\xa7\\x8d\\xccZ\\xa9\\xd7 \\x07\\xf8\\xa7C\\xc6S\\xb2\\xf5\\xa5z\\xcd\\xed\\xe3\\'\\n$#\\xf2V\\x05\\xbb\\x1dXd7Bo\\xfb\\x9a\\xc5=\\\\S\\xa5j\\x91<\\xafu\\xcd\\x0b7\\x0e\\x05i\\xc2};\\x13\\xfc_\\xe7\\xfd\\xe5\\x88\\x86\\x8a\\xcf\\x94\\x88\\xe2\\xebZ\\xe2\\xb5\\'\\xbe\\xc4]\\xedE\\xa1w\\x05\\xce\\xb9\\x90\\xd7S}\\xdc@P\\x93I\\xea\\x9e\\xec\\x815{W\\xccwt[aP]*`\\x91\\xe6\\xda\\njR?M\\xfd\\x08\"\\xd3\\xd1w\\xa4\\xa8\\xf7J\\xb5F8\\xda\\xe1qi/\\xe04;gg\\xb75yo@\\xfd\\x15\\xca\\xe0\\xcf\\xab\\x0b\\xac2}\\xd08\\xb3\\xeb\\xf7\\t\\x07,\\xb5\\xd55E\\xf4/\\xb2P\\xd82\\xc1\\xf7\\xc8\\x02\\xa2)$\\xae4\\xe2_\\xe1\\xf1\\xaa\\x10a\\xc4\\x15\\xf0\\x81\\xa0\\x80\\xc4\\x89i\\x93\\x97Y\\x06\\xe5\\x18\\x08\\x8c82\\x98\\xd4\\xba\\xc7X\\x19\\xb8\\xabZ\\xbd\\xf2\\xf3\\xd1\\xdd\\xa8\\xa3jP\\xcd\\xdb\\xb4\\x817\\x1e\\x1c\\xf3\\x1ei\\'\\xa7\\xca\\r\\xb7a\\xd4\\x1c\\xfeh\\xc7p|\\xac7\\x1d^8\\x91v\\xf4\\xabk\\x06\\xa0I1\\x12}\\x85\\x0f$\\x1b\\xb1;V\\xedI\\xdd\\xc2\\xe3\\x15l\\xb6\\xf6u[\\x1d\\xd5$_\\xc8{-M\\xd6U\\x13\\xf5\\xb1bz\\x83whX=)Y\\xe1\\x82W\\x85\\x82\\x86U\\xc1\\xb0%\\xe1e\\xf6\\xdf\\xc5\\xf7\\x8f`\\x0eHHy\\xc8wm\\xb5\\xad\\x90\\x8b\\x9d\\x1aB\\xd7&\\x96\\xa6\\x8f\\xcc\\x89i\\xe2\\x83\\x98\\xa1\\x19\\xa6aT\\xa7-99_\\xa2\\xf8\\xc7\\xf5\\x13.}l\\xd1.\\x94I}|x&g\\xff\\xad\\xe0\\x03p\\xcaq\\xa7<B\\xf3x%\\xc2\\x99\\xc0\\x9a\\xc9O\\xa1\\x94M\\x9eT\\x9f\\xce\\xbb7\\xd2\\x97x\\x188\\xf3\\xf9\\xab\\x17\\xc9\\xafo/\\xce\\xaf\\xae\\xf4_\\x9f\\xaf\\xfex\\xf3\\x9f\\xc1\\xf3\\xd1s\\xfdi\\xfc\\xe2z|\\xf9\\xe3\\xf0Y\\xa5S\\x06\\xb1\\xbdzlF\\xe1J/ke\\xb7l?\\xb7N\\xf0O+\\xbd\\x9ahN\\xa8\\x9b\\xb2;[14}\\xa2\\x9c(\\x0f\\xc5\\xcdR4\\t(\\x1e\\xb4\\xbc\\xa2\\xde\\x1d\\x18\\x00\\xca\\xa7E\\x08\\xae)BY\\xd1\\xcb\\xca\\xee\\x9b\\xa4\\xe0\\x071/\\t}\\x99\\xba\\xab-\\x91mwy]+}\\xef\\xb5\\xbc\\xef\\xf9\\xa9\\xd3\\\\\\xc5\\xaae\\xe9\\xa3m\\xec\\xfd\\x83osS\\x1eB\\xa9\\x97\\xbfG4\\xd5\\xdd\\xe9{!y\\xe0U\\xf9\\x01\\xbd\\xbf?p{\\xe5]y\\x85R\\x1f6U\\xd0\\xf4\\xf9\\x9b7\\xfa9\\xa4\\x11({\\xf0z\\xdc\\x93\\x9f\\xbf\\xa6>{\\xe25x\\x17\\x11C0\\xf3\\xe4\\xe1Y\\xa5\\x8e\\xdf\\x87\\x08\\t=\\xf5\\xd4u\\xbb\\x9a\\x96v:n\\xa7\\xd3\\xa5\\x07\\xceV\\xae\\xbe\\x94\\xe6\\xfe\\xde\\xdd\\xe9,e\\xdd\\xbe\\x88@Y\\xd5%D\\xc5\\xbf\\x83\\x92%\\xbe\\xbb<\\xe9T\\x8f.\\x90\\xa3\\xabW\\x17\\xc8\\xc6\\xf2\\xd5e\\xf7\\xed\\xe7\\xea\\xe2\\xb2\\xb7\\xf7\\xb2\\xf0\\x95\\xc3\\xf3\\xed\\'\\xee\\x93\\xbd\\x13\\x0bv\\x86\\x8f_7\\xd4\\x9f\\x8a\\xd7u\\x1b\\xa3\\xf1\\xf2\\xa5\\x0fv\\xccC\\x035\\xe7y/\\x87\\x8a\\x92U\\x1a\\xec\\x92\\x927\\xe9\\xd9T\\xde\\x1b\\xb8\\xad{\\x00V\\xeb\\xf9\\xa7\\xbbK\\xbf[\\xae\\xb0\\xd7\\xa7Y\\xc6\\x12\\xff|\\x19F~\\x97\\xf66\\xaa\\xd6\\xdbT\\xc2\\xfa\\xd1\\xa7l\\xfb\\xd6\\xe2\\xaa\\xb4yk\\x01\\xd2\\x02X{H`o\\xb1\\x1doO7_wD\\xe0\\x90\\xc7\\xf8\"$\\xd5\\x07nT\\xbf\"\\xf5\\xea\\x8f\\xfe\"\\xcc\\xb9@\\x14t\\xb2-Y\\xc3i^{\\xdb\\xfc\\xfe~\\xdd\\xbc1\\xce\\xfb\\xf3gE\\x9c]\\xdczL\\x9e*\\xb7\\x02\\xb0\\xdeZ,\\xf3\\xf4Fa\\x9b\\xd6\\x84\\xf8\\x86\\x96\\xf3\\xc6?\\xca\\xa6|i\\xea\\x8bF\\xde\\x9d^\\\\D\\xc4\\x9d\\xfaA\\xb6\\xdbz\\x91\\xb5\\xdb\\xaa\\xeb\\x1e\\r\\x00s0\\x1f\\xc0\\xcf\\xd5\\x9f\\xb7C\\x1fZ\\xfde\\xd6g\\xc9\\xfc\\xdd\\x9b\\xfe\\xfb\\xdf\\x86\\x7fdo>\\x9f\\xfc\\xf4\\xdc\\xec\\xbf\\x1a\\xc48\\xce\\xdd\\xf9\\x92\\xa9\\xfe \\x17\\xd8\\xfa4\\xf0\\x11\\xe8\\x03\\xd9\\xfa\\xecA\\x0c\\xc89~>=\\x7fki\\xe9\\xf3\\x95\\xff\\x82N\\xdf\\xbe4\\xde\\xcf/\\x7f\\xffC\\xe7\\xe3\\x9f^\\xdf\\xfe\\xfb\\xf2\\x05{\\xb7Z\\xfe~\\xa4\\xfe\\xffM\\xdd\\xb3\\xb7\\xa6\\x82\\xea\\xa5VH\\x16{\\xce\\x9a\\xc8i\\xc8lM\\xa0\\x10H\\xc8\\x0cO\\x9e*\\xf1\\xda\\xdfrK\\x92\\x19\\x96\\xb8y\\x94\\xa6\\xf1\\t\\x94\\xd1*\\xf1\\x975\\x82\\xbf\\xbc\\x16\\xcd7\\x07D\\x18]Du\\xcf2\\xe5H\\xdcd\\x0b\\x18\\x0c\\xb9\\x0b\\xc4\\x86\\xa9\\x92O4&\\x10\\xf4\\xc8\\'\\x9e&YM\\x11\\xc5\\xf5W\\xcc\\x03\\x8eK\\xf3B\\x17\\xf8\\x91\\x8b\\xc5\\x82z,\\xc7\\x12.\\xaf+\\x1b\\\\\\xc9]\\x8c\\x83\\x9c\\xd3;\\xf6\\x19*\\x1d\\xe6\\xc19F\\x08\\xa6\\xa4\\xb9X\\xa6\\x01\\xd4QP\\x00\\xcd\\x001\\xf2\\xae\\xee\\x00\\xf3\\x97?\\x0bM3&\\x87C\\xcb\\xde/\\tqr9S\\xa2p\\xbaJ\\xc3\\\\\\xc1\\x84\\x0b\\xdd)\\xbfB)\\xaab\\x08h8\\ry\\x88\\x04\\x19li\\x189\\x973\\xf2\"\\x80\\xc3\\xa9\\x0c\\x1aTqAo\\xca\\x17\\xf1\\x05z3\\xc85\\xf1\\x17\\x86\\x84\\xab\\x14\\x12\\xbc\\x82K\\x18\\x9eW\\t\\xe6OR\\xdfY\\xfcI\\xe4\\xc0\\xc5r\\xe7\\x8a\\xa2D\\x1e\\xd0r\\xac_N\\x8a\\xcb|S2f\\xa8T\\xee\\x86\\xb8\\xc2m\\xc9\\x97\\xe1]\\xa8\\xfc\\x7f\\\\0\\x88\\xa7\\xbf\\xd9\\xc3\\xda{\\xa3\\x92\\x04MV\\xaa;]\\xe5\\xa0m\\xe8\\xcb\\xaeK+\\xc2\\xe2\\xe0T_\\x8d\\xe6\\x0b@\\xfc\\xf0\\x11\\x98y\\xd0\\xa7k\\xf8\\x01\\x8e3\\x06(\\xd2+ XY\\xcb\\xc4\\xba\\xf8\\xed\\xf5\\xbf\\x8c\\xf3k\\xfd_\\xcf\\x9e\\x16\\x93\\xc2\\x1fO\\xde~\\xbe\\xba\\xfb\\x1d\\'\\xf2\\x91\\xf7\\xf6\\xf5\\xba\\x8c%\\xe5\\xfbp+$m\\xa3@\\xcc\\xfcf\\xb3\\xc3w\\xf7(LB\\xb1\\xf5el\\x9579w\\xdd\\xa6S\\xe2U\\xba\\x04\\xd4\\xcd\\xa6\\x1d\\xc7>5\\x11\\xe5\\x13\\xec\\xbaV\\xe36|,\\xbc\\xb7\\x86!\\x00\\xdb\\xf2U\\xb0\\xbe\\x0f/\\x8b\\x12L\\x8cx\\x89\\x8d\\xff\\'\\xf0\\x7f\\x01\\xa9\\x9a\\xd7%#(\\x00\\x00'\n", |
| " padding = '\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00'\n" |
| ] |
| }, |
| { |
| "output_type": "stream", |
| "stream": "stdout", |
| "text": [ |
| "\n", |
| "###[ HTTP/2 Frame Sequence ]### \n", |
| " \\frames \\\n", |
| " |###[ HTTP/2 Frame ]### \n", |
| " | len = 0xe1\n", |
| " | type = HdrsFrm\n", |
| " | flags = set(['End Headers (EH)'])\n", |
| " | reserved = 0L\n", |
| " | stream_id = 3L\n", |
| " |###[ HTTP/2 Headers Frame ]### \n", |
| " | \\hdrs \\\n", |
| " | |###[ HPack Dynamic Size Update ]### \n", |
| " | | magic = 1\n", |
| " | | max_size = 12288\n", |
| " | |###[ HPack Indexed Header Field ]### \n", |
| " | | magic = 1\n", |
| " | | index = 8\n", |
| " | |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | | magic = 1\n", |
| " | | index = 59\n", |
| " | | \\hdr_value \\\n", |
| " | | |###[ HPack Header String ]### \n", |
| " | | | type = Compressed\n", |
| " | | | len = 11\n", |
| " | | | data = 'HPackZString(Accept-Encoding)'\n", |
| " | |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | | magic = 1\n", |
| " | | index = 26\n", |
| " | | \\hdr_value \\\n", |
| " | | |###[ HPack Header String ]### \n", |
| " | | | type = Compressed\n", |
| " | | | len = 3\n", |
| " | | | data = 'HPackZString(gzip)'\n", |
| " | |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | | magic = 1\n", |
| " | | index = 31\n", |
| " | | \\hdr_value \\\n", |
| " | | |###[ HPack Header String ]### \n", |
| " | | | type = Compressed\n", |
| " | | | len = 9\n", |
| " | | | data = 'HPackZString(image/x-icon)'\n", |
| " | |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | | magic = 1\n", |
| " | | index = 33\n", |
| " | | \\hdr_value \\\n", |
| " | | |###[ HPack Header String ]### \n", |
| " | | | type = Compressed\n", |
| " | | | len = 22\n", |
| " | | | data = 'HPackZString(Thu, 08 Dec 2016 06:23:59 GMT)'\n", |
| " | |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | | magic = 1\n", |
| " | | index = 36\n", |
| " | | \\hdr_value \\\n", |
| " | | |###[ HPack Header String ]### \n", |
| " | | | type = Compressed\n", |
| " | | | len = 22\n", |
| " | | | data = 'HPackZString(Fri, 16 Dec 2016 06:23:59 GMT)'\n", |
| " | |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | | magic = 1\n", |
| " | | index = 44\n", |
| " | | \\hdr_value \\\n", |
| " | | |###[ HPack Header String ]### \n", |
| " | | | type = Compressed\n", |
| " | | | len = 22\n", |
| " | | | data = 'HPackZString(Thu, 08 Dec 2016 01:00:57 GMT)'\n", |
| " | |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | | magic = 1\n", |
| " | | index = 0\n", |
| " | | \\hdr_name \\\n", |
| " | | |###[ HPack Header String ]### \n", |
| " | | | type = Compressed\n", |
| " | | | len = 16\n", |
| " | | | data = 'HPackZString(x-content-type-options)'\n", |
| " | | \\hdr_value \\\n", |
| " | | |###[ HPack Header String ]### \n", |
| " | | | type = Compressed\n", |
| " | | | len = 5\n", |
| " | | | data = 'HPackZString(nosniff)'\n", |
| " | |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | | magic = 1\n", |
| " | | index = 54\n", |
| " | | \\hdr_value \\\n", |
| " | | |###[ HPack Header String ]### \n", |
| " | | | type = Compressed\n", |
| " | | | len = 3\n", |
| " | | | data = 'HPackZString(sffe)'\n", |
| " | |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | | magic = 1\n", |
| " | | index = 28\n", |
| " | | \\hdr_value \\\n", |
| " | | |###[ HPack Header String ]### \n", |
| " | | | type = Compressed\n", |
| " | | | len = 3\n", |
| " | | | data = 'HPackZString(1494)'\n", |
| " | |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | | magic = 1\n", |
| " | | index = 0\n", |
| " | | \\hdr_name \\\n", |
| " | | |###[ HPack Header String ]### \n", |
| " | | | type = Compressed\n", |
| " | | | len = 12\n", |
| " | | | data = 'HPackZString(x-xss-protection)'\n", |
| " | | \\hdr_value \\\n", |
| " | | |###[ HPack Header String ]### \n", |
| " | | | type = Compressed\n", |
| " | | | len = 10\n", |
| " | | | data = 'HPackZString(1; mode=block)'\n", |
| " | |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | | magic = 1\n", |
| " | | index = 24\n", |
| " | | \\hdr_value \\\n", |
| " | | |###[ HPack Header String ]### \n", |
| " | | | type = Compressed\n", |
| " | | | len = 16\n", |
| " | | | data = 'HPackZString(public, max-age=691200)'\n", |
| " | |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | | magic = 1\n", |
| " | | index = 21\n", |
| " | | \\hdr_value \\\n", |
| " | | |###[ HPack Header String ]### \n", |
| " | | | type = Compressed\n", |
| " | | | len = 5\n", |
| " | | | data = 'HPackZString(472252)'\n", |
| " | |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | | magic = 1\n", |
| " | | index = 0\n", |
| " | | \\hdr_name \\\n", |
| " | | |###[ HPack Header String ]### \n", |
| " | | | type = Compressed\n", |
| " | | | len = 5\n", |
| " | | | data = 'HPackZString(alt-svc)'\n", |
| " | | \\hdr_value \\\n", |
| " | | |###[ HPack Header String ]### \n", |
| " | | | type = Compressed\n", |
| " | | | len = 28\n", |
| " | | | data = 'HPackZString(quic=\":443\"; ma=2592000; v=\"35,34\")'\n", |
| " |###[ HTTP/2 Frame ]### \n", |
| " | len = 0x5d6\n", |
| " | type = DataFrm\n", |
| " | flags = set(['End Stream (ES)'])\n", |
| " | reserved = 0L\n", |
| " | stream_id = 3L\n", |
| " |###[ HTTP/2 Data Frame ]### \n", |
| " | data = '\\x1f\\x8b\\x08\\x00\\x00\\tn\\x88\\x02\\xff\\xbcX{PTU\\x18?\\xa6\\x8d\\x89\\xa5\\xf4G\\xff5\\x13\\xf60\\xffh\\xcc1\\x11\\xc7L\\xb3\\x07>\\xffp\\x94\\x10L\\x1b\\xd3L+kF\\'\\xb5\\x19\\xc7Rg\\xc2\\xb4@KtD _\\x91\\x80\\x8e\\x82\\x8a\\xa8\\x83\\nhI\\xa9\\xa8\\x08B\\x98\\xaf|\\xdf]`\\xc1}\\xb0{\\xf7;\\xbf\\xe6\\\\\\xeee\\xee\\xde\\xbd\\x97\\xdd\\xb5\\xb53\\xf3\\rg\\xcf\\xfd\\xbe\\xefw\\xcew\\xbe\\xd7\\x81\\xb1n\\xec1\\x16\\x1b+\\xfe\\xc6\\xb1y=\\x18\\xeb\\xcf\\x18\\x8b\\x8b\\xeb\\xf8\\x9d\\x1f\\xcbXF\\x0f\\xc6\\x060\\xc6b\\xc5:\\xebXWF\\x0f\\x16r\\x00\\x18DD\\x1b\\x89\\xa8\\x81\\x88\\xbc*\\xd5\\x13Q&\\xe7|\\xa0\\x95\\x1c\\xe7\\xbc\\x17\\x11e!\\xc4 \\xa2\\r\\x00\\x9e0\\x91\\xad\\x10\\xdf}\\xe4\\xc5\\x81\\xbfvb\\xf1\\x91\\x19H\\xd95\\x1c)\\x85\\xc3\\xb1\\xf0P*v\\xd7\\xe5\\xa2]vk:\\x8e\\xebuh\\xb8v\\xd7},(M\\xc1\\x94\\xfc!\\xa6\\x94\\xb17\\x05\\xdcq\\xafs\\x1f\\xday\\x15\\\\\\xbf\\x17\\x0bJ\\xa7*|\\x02s\\xfb\\xf9\\x1fQ{\\xff\\x0c.I\\xd5(\\xac\\xcdF\\xd6\\x8e\\xf1p\\xa4\\x8d\\x86;w.\\xc0\\xb9\\xa2C\\xd8\\x83\\x886\\x89\\xf9\\xeaKg1\\xa1p,\\x92\\x0b\\x87\\xa1N\\xaa\\x0e>\\xf7\\x9d\\x068W%\\xc2\\xf9\\xed[\\xf07\\x9c\\xd0\\xf6\\x90ID\\x8db\\xfe\\xca\\xc9V<]\\xd6\\x84\\xf4\\x0bE\\x96\\xb6k\\xdf\\xb3R\\x91o/I\\xd7\\xe4\\xc5\\xbd\\xf8\\xc4<\\xe6\\xa8\\x8c\\xc7\\xcbd\\x94\\xd8x\\x80\\x8c\\xe07\\x92\\xe7\\xd7E\\x9a\\xbcW\\x93\\xef}\\xacC\\xfe\\xa0=\\x0c\\xf9\\xc2\\xa5z\\xf9\\xcbb\\x1e\\xff\\x87\\x1f1\\xfb\\xbc\\xf8\\xec\\x177\\xc2\\x1d\\xaa\\x8f)w\\xf7\\xd39\\x19\\t\\x93\\xed\\x18\\x96(\\xe1|\\xad\\xcf\\x84\\xd7T~#\\xe7|\\xb0\\x98{\\xbd\\x1c\\xc9\\xb3\\x9a\\x10\\xff\\xb6\\x84\\xd7\\xc7\\xd9\\xb0!\\xc7\\x89s5>\\\\\\xa8\\xf5ac\\xae\\x13\\x93?h\\xc2\\x8d\\x9b~\\xa3\\x8aA\\xaa\\xff\\xe4\\x8a\\x1f\\xf7$B\\xca\\xecfE\\x87\\x19\\xcd_\\xec\\xd0co\\xd2\\xc5L\\x0c\\x11\\x9d\\xd0\\xf6\\x91\\xb7\\xdb\\x8d\\x19\\x9f4c\\xc4x\\x1b\\x86\\x8f\\x910\\xed\\xe3fl/p)\\xdfT\\xd9\\n\\xe1\\xf3\\x86\\xb8\\x8b\\xd1\\xf6\\x11\\xc2fYFYC,\\r\\x16<\\xe2^\\xc4\\xdd\\xaa\\xd4\\xa8\\xfa\\xe9 #\\xbf\\xa3/c\\xe5\\xdd\\x19[\\xde\\xad\\x83B\\r\\x8dO\\xc8\\x08\\xd9\\x01j\\x8eyS\\x9fgb\\xd9C\\x0f\\xce\\xf9S\\x9c\\xf3\\xa9\\xea\\x19\\xaa\\x88H\\xd2\\xe5!I]\\x136H\\x06\\xf0$\\x8b\\xd2\\xe0\\x9c\\xbfHD9D\\xe4\\x8a\\xc0\\x7f]D\\xb4\\x99s\\xfe\\xc2\\x7f\\xc0\\x15\\xb9o\\r\\x11\\xc9x\\xc8\\xa1\\xde\\xf1*c^\\r\\xf3\\xcc5\\x88\\xd2 \\xa2\\xf3\\x00\\x9e\\x0f\\x07[\\xad3\\x92\\x99\\x1e\\xc9y\\x07{\\xeb\\xb7ae\\xf9|\\xcc)\\x1e\\xa7\\xe4\\xd4\\xe4\\x82\\x04\\xcc.J\\xc4\\xb2\\xa3s\\x90W\\xb3\\x01W\\x9b\\x1b\\xac\\xf6p\\x8fs\\xfej\\x18\\xe7\\x0e\\xc2\\xb6\\xb9\\xeeb\\xed\\xefK\\x91T0\\xd4\\xb2\\x86\\xe8\\xe9\\xebcsq\\xa5\\xb9\\xdet\\x0fVvP\\xe3\\xfc\\xa2Q\\xe6\\xe4\\x8d\\xc3\\x98\\xbe{dX\\xb8z\\x12v)\\xae\\xc9\\xb6\\xba\\x8b \\x7f \\xa2\\xef\\x8d\\xbc\\xc5\\r;\"\\xc6\\xd5hf^<\\xfe\\xcc\\x18\\to\\xc5\\x16\\xb3=\\xac2\\xd8\\xfd%\\xa3\\x9fW^/\\xb5\\xd4\\xfd\\xc5\\xc1$l\\xa9NGic!\\x0e]\\xde\\xa5\\xdc\\xfb\\xd2\\xb2\\x8f\\x90\\x94\\x1f\\xaf|_\\xb25\\x017W\\x8f\\xee\\xacKZ]\\xd5\\xc7\\x85>6\\x8d\\xf9U\\xf8\\xd9\\xfb&6\\x9f\\xbbo\"\\xce\\xdc\\xae\\xb4\\xf4\\xf3\\xeb-\\x8d\\xc8/\\x9e\\x8dVC]t\\xadK\\x02\\xf7\\xba\\x8d{\\xd8\\xac\\x9e\\xbd\\x0f\\x11\\x05|\\\\yjm\\x10\\xf6\\xa2\\xc3\\xd3\\xd1\\xe6u\\x84\\x0e6\\xbf\\x0f\\x9e\\x9dK\\x82j\\xb3\\xaf\\xaa (G\\x89<\\xc99O\\xd5\\xaf_ss\\xf4*s\\xe3\\xb5\\xa2\\xb4N\\xecYE\\x89h\\xf1\\xd8\\xc3\\x8ew\\xeey\\xa0\\x9cY\\x8f\\xef\\xce\\x9a\\x19\\xcc\\xc7y\\xb2\\xc8\\xad\\xfa\\xb5\\xef\\xae\\x91\\xd2o\\x08\\xeaW\\xb2\\x1f\\x93\\xf2G\\xa0\\xecJQ\\xc49\\xc7w*?\\xc8\\x06\\xdcq7\\xa8f\\x12\\xd1i\\xfd\\xda\\x98j\\x7f\\'\\xbe\\xa0\\x81\\x95\\xb7 \\x93/\\xf2\\x9c\\']\\r\\xc2\\x97\\xeb+\\x8c\\xf8\\xa2f\\x05\\x18\\xf6\\xd9J9\\x00?\\xa5\\xc6\\xdf%\\x8eY\\x1ffE\\xbe\\xaaB#\\xbe\\xa4\\xf5y\\xda\\xe8y4\\x10\\x7f\\xd9\\xdf\\x145|c.\\xd0\\xf7\\x99\\xff\\x07\\xbe\\xef\\xb7<3\\xfc\\xa6\\xae\\xec\\x9fz1z\\xf6\\x97\\xeb\\x8e\\x9b\\xd9?\\xc0\\xff\\x12\\xcf\\x06\\xfa_\\xbf=^\\xc82\\x1e\\xc9P\\xfd/ \\xfe\\xd2t\\xf1\\xf7\\xccz\\x17\\x86\\x8c\\xb3a\\xff!\\xcf\\xa3\\xc2\\x17\\xfd\\xda4\\xfd\\xda\\x157G\\xcf\\xc32\\xe2\\x96\\xb4v\\xf6\\xd7c\\xdf\\xb3\\xa3\\xd9AQ\\xc7\\x17\\xfd$\\x80\\xbeD\\x14p\\xc0\\xcf\\xd79\\x83z\\xfc\\x0f\\xe7\\xb7\\xa0\\xad\\x8d\\x87\\xd4\\xe9t\\xf1\\xb0{D\\xd1\\xd3\\xaa\\xf5\\' 0n\\xdd\\xf1\\xe3\\x8d\\xf1\\xb6\\xa0=L\\x9a\\xde\\x84\\xaa3^K\\x9d\\xa7N{11\\xc5\\x8e\\x1f2\\x1f\\x84\\x83\\x9f\\xa3\\xab\\xbf/\\x13Q\\x80\\xa3\\x97\\x1c\\xf1X\\xbewR\\xe74c}\\xb6\\x13{\\x0ex\\xb0\\xb7\\xc4\\x83\\xccl\\xa7\\xf2\\x96\\xd1\\xf3\\xa4e\\xb4i\\xcfa3lY\\xf4Z\\x86\\xfe#\\xdd\\xc8\\xb7u\\xa7\\xcbr\\x0f\\xe1\\xd0\\x8a5mV\\xf8kLz\\xbf\\xdeDTg\\xe4\\x15v\\x189\\xc1\\x161\\xf6\\xa8\\x896\\x1c9\\xden\\x86]c\\xf5N\\xe3\\x9c\\xf7\\'\"\\x9bQ\\xe6\\xf6]?\\xbeZ\\xd1\\x8a\\xa1\\xef\\x84\\xc6\\x15<\\x8b\\xbfiUdL\\xb0%\\xa3\\xdd-\\xde\\x8963\\xbb\\t\\xbf\\xfc9\\xcf\\x85O\\xbft(1)\\xde\\xe4\\t\\xefJH\\x9cb\\xc7\\xbc\\x85-\\xd8\\xbc\\xcd\\x85\\x7fn\\xf9\\xadl.\\x99\\xbd3\\xbb\\xb0C]\\x14\\xf3LM\\xa8s[\\xf4\\xe3\\xe9\\xc6\\xb8\\x88\\x10W\\x16}uW\\xef\\xf20l!bs\\x8b1G\\x85\\xc0u\\x8b\\x9eV\\xf4\\xd5Q|\\x07\\xf7\\x11\\xb9Z}\\x0b\\x9f\\x16uS\\xf7\\x7f\\x04\\xbb\\xba\\x96#\\xfaI\\xc1\\x1b\\xb6\\x9d\\xcb\\xbb\\x03\\x8c\\xc1\\xcf\\xd8\\xa8v\\xc6\\x9es0\\xd6\\xf7:c=\\xcb\\x19\\xeb.h9c\\xdd\\x04E\\xba_MN\\xd3#t\\n\\xdd\\x02C`\\tL\\x81\\xfdo\\x00\\x00\\x00\\xff\\xff\\xc6\\xf9Yo6\\x15\\x00\\x00'\n", |
| " |###[ HTTP/2 Frame ]### \n", |
| " | len = 0x167\n", |
| " | type = HdrsFrm\n", |
| " | flags = set(['End Headers (EH)'])\n", |
| " | reserved = 0L\n", |
| " | stream_id = 1L\n", |
| " |###[ HTTP/2 Headers Frame ]### \n", |
| " | \\hdrs \\\n", |
| " | |###[ HPack Indexed Header Field ]### \n", |
| " | | magic = 1\n", |
| " | | index = 8\n", |
| " | |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | | magic = 1\n", |
| " | | index = 33\n", |
| " | | \\hdr_value \\\n", |
| " | | |###[ HPack Header String ]### \n", |
| " | | | type = Compressed\n", |
| " | | | len = 22\n", |
| " | | | data = 'HPackZString(Tue, 13 Dec 2016 17:34:51 GMT)'\n", |
| " | |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | | magic = 1\n", |
| " | | index = 36\n", |
| " | | \\hdr_value \\\n", |
| " | | |###[ HPack Header String ]### \n", |
| " | | | type = Literal\n", |
| " | | | len = 2\n", |
| " | | | data = 'HPackLiteralString(-1)'\n", |
| " | |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | | magic = 1\n", |
| " | | index = 24\n", |
| " | | \\hdr_value \\\n", |
| " | | |###[ HPack Header String ]### \n", |
| " | | | type = Compressed\n", |
| " | | | len = 13\n", |
| " | | | data = 'HPackZString(private, max-age=0)'\n", |
| " | |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | | magic = 1\n", |
| " | | index = 31\n", |
| " | | \\hdr_value \\\n", |
| " | | |###[ HPack Header String ]### \n", |
| " | | | type = Compressed\n", |
| " | | | len = 22\n", |
| " | | | data = 'HPackZString(text/html; charset=ISO-8859-1)'\n", |
| " | |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | | magic = 1\n", |
| " | | index = 0\n", |
| " | | \\hdr_name \\\n", |
| " | | |###[ HPack Header String ]### \n", |
| " | | | type = Literal\n", |
| " | | | len = 3\n", |
| " | | | data = 'HPackLiteralString(p3p)'\n", |
| " | | \\hdr_value \\\n", |
| " | | |###[ HPack Header String ]### \n", |
| " | | | type = Compressed\n", |
| " | | | len = 81\n", |
| " | | | data = 'HPackZString(CP=\"This is not a P3P policy! See https://www.google.com/support/accounts/answer/151657?hl=en for more info.\")'\n", |
| " | |###[ HPack Indexed Header Field ]### \n", |
| " | | magic = 1\n", |
| " | | index = 78\n", |
| " | |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | | magic = 1\n", |
| " | | index = 54\n", |
| " | | \\hdr_value \\\n", |
| " | | |###[ HPack Header String ]### \n", |
| " | | | type = Literal\n", |
| " | | | len = 3\n", |
| " | | | data = 'HPackLiteralString(gws)'\n", |
| " | |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | | magic = 1\n", |
| " | | index = 28\n", |
| " | | \\hdr_value \\\n", |
| " | | |###[ HPack Header String ]### \n", |
| " | | | type = Compressed\n", |
| " | | | len = 3\n", |
| " | | | data = 'HPackZString(4420)'\n", |
| " | |###[ HPack Indexed Header Field ]### \n", |
| " | | magic = 1\n", |
| " | | index = 72\n", |
| " | |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | | magic = 1\n", |
| " | | index = 0\n", |
| " | | \\hdr_name \\\n", |
| " | | |###[ HPack Header String ]### \n", |
| " | | | type = Compressed\n", |
| " | | | len = 11\n", |
| " | | | data = 'HPackZString(x-frame-options)'\n", |
| " | | \\hdr_value \\\n", |
| " | | |###[ HPack Header String ]### \n", |
| " | | | type = Compressed\n", |
| " | | | len = 9\n", |
| " | | | data = 'HPackZString(SAMEORIGIN)'\n", |
| " | |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | | magic = 1\n", |
| " | | index = 55\n", |
| " | | \\hdr_value \\\n", |
| " | | |###[ HPack Header String ]### \n", |
| " | | | type = Compressed\n", |
| " | | | len = 165\n", |
| " | | | data = 'HPackZString(NID=91=Wt1Jkm3Eretgg-hJ32fkj7kSSOLTc8tfEEIP5F2QTzHqbsXcCFve-QoN1oZvkGEqqqAWklc2wlj97YDkMnGXQUw20iCYMc3FD6X-KVuK1wdFURafcqQMQZ8e-F14YUfn; expires=Wed, 14-Jun-2017 17:34:51 GMT; path=/; domain=.google.fr; HttpOnly)'\n", |
| " | |###[ HPack Indexed Header Field ]### \n", |
| " | | magic = 1\n", |
| " | | index = 71\n", |
| " |###[ HTTP/2 Frame ]### \n", |
| " | len = 0x122b\n", |
| " | type = DataFrm\n", |
| " | flags = set(['End Stream (ES)', 'Padded (P)'])\n", |
| " | reserved = 0L\n", |
| " | stream_id = 1L\n", |
| " |###[ HTTP/2 Padded Data Frame ]### \n", |
| " | padlen = 230\n", |
| " | data = '\\x1f\\x8b\\x08\\x00\\x00\\x00\\x00\\x00\\x02\\xff\\xc5:\\xebz\\xdb\\xb6\\x92\\xff\\xfb\\x144\\xfcU\\x96\\xd6\\xb4DR7R4\\x9d\\x93:n\\xe2n\\xda\\xa4\\'\\xc9I\\xcf\\xa6\\xa9>\\x90\\x84(\\xc6\\xbc\\x99\\x00e;\\xb2\\xdem\\x1fg\\xf3\\x16;\\x03^D\\xc9N\\xd2o\\xff\\xec\\x97DC\\x003\\x03\\xcc\\x053\\x03 \\xa7\\x07~\\xea\\x89\\xbb\\x8c)K\\x11Gg\\xa7\\xf8\\xab\\x84\\x82\\xc5\\xdcK3\\xe6\\x10\"\\x1b\\x88\\xe0\\x90\\xa5\\x10\\xd9l0\\xe0\\xde\\x92\\xc5\\xb4\\x9f\\xe6\\xc1\\xe0=s_\\xd3\\x80\\x11%\\xa2I\\xe0\\x90EN\\x80\\x03\\xa3\\xfe\\xd9i\\xcc\\x04U\\xbc4\\x11,\\x11\\x0e\\x11\\xecV\\x0c\\x90\\xb5\\xadxK\\x9as&\\x9cwo\\x7f>1\\x89\\x82<O\\xd8u\\x11\\xae\\x1cr^\\xa2\\x9f\\xbc\\x85\\xd9\\xc8>\\x8bA\\x18\\xc3L|\\xe0\\xe64\\xf1\\xc3$\\x18\\x04i\\x1aD,\\x18\\xe8\\xb7\\xf5\\xe7\\x9c\\x0b\\x18\\xa3\\xb9?\\xf7\\xd2(\\xcd\\xe7\\xbaa\\xfaY?K\\x82R\\x88,O3\\x87H6\\xc0]\\x84\"bg\\xcf%\\xe5\\xe9\\xa0l\\x9dr/\\x0f3q\\xd6]\\x14\\x89\\'\\xc24\\xe9\\xf6\\xd67a\\xe2\\xa77\\xfdr\\ng}uq9;z\\xf5\\xf9\\xe7\\xdf\\xdf\\xff2?y9z\\xf5_\\xf4ul%\"xu\\xa4^]\\xfc\\xf1\\x1a\\x06\\xa7cmj\\xe8\\xaa>\\x1c\\xeb\\x966T\\x87SM3FCu\\xa4\\x19\\x96\\xa9\\x8f\\x01\\x0e\\x8d\\xc9t\\x8a\\xd0\\xd4t\\x03\\xe0H7-\\x0b\\xe1pd\\xc9\\xf6\\xd8\\x1c\\xe9\\x08\\xcd\\xe1\\x08\\xf1\\xc6\\xe3\\xe9\\x08\\xe9&\\xc6d2A8\\x9e\\x9a\\xd8?\\x99\\x9a\\x13\\r\\xa19\\x1eKh\\x99C\\xb3\\x84\\x92~jL4C\\xc2\\xe9\\x14\\xe9\\xa7C\\xe0%\\xe1\\xd40%\\xb4\\xc68/p\\xb7\\xa6\\x12Zc9>\\xd1\\xac\\x12ZC\\xbd\\x84r}Ss$\\xf9\\x03\\x1cO$\\x9cNF\\x08-]\\x93mk4\\x92\\xf3Y\\xb0R\\tM\\xab\\x1c\\xb7\\xc6\\x08A\\xdc\\t\\xcec\\xea\\xda\\xb0\\x86\\xc8\\xd744\\xc9\\xcf4\\xf4\\xc9XBC\\x97\\xe3\\xc6D\\x97\\xe3\\xa0\\x069>\\x02\\rJ8\\x94\\xfa4a\\xbd\\xb2\\x7f\\xac\\x8d%\\xfexbH8\\xd1t]B\\xc3\\xd2$4\\'\\x12\\x7f:\\xd5%\\xfd\\xd4\\x92\\xfa7\\x91a\\t\\x87\\x93\\x12\\x8e\\xe4\\xb89)\\xf9[\\x9aV\\xc2R>\\xd3\\x1a\\x96\\xeb\\xb6\\x86\\xa3\\xb2=2\\xe5<\\xd6X\\xea\\xc5\\xb4&V\\xd9?\\x1d\\xe9\\x15D\\xfe\\xc0\\xc6\\x9cH8\\x1c\\x1b\\x12\\x8e4\\xbd\\x84\\xd2\\xae\\x16hf\\xa2\\x9aCM\\xd3\\xac\\x12\\x1aSC\\xc2\\xd1\\xd4TA\\xba\\xc9\\x04\\xfc\\x06\\xe0t\\x08\\xf3!\\x1c\\x81^\\x10\\x9ac\\xb3\\x84\\x96l\\x9b\\xda\\xb8\\x82\\x13\\x89o\\x8eA~\\x84\\x16\\xe8\\x07\\xa0\\x05\\x9c$D\\x7f\\xd45\\x03&4\\x87\\xe8\\xa8\\xf0a\\x18G*-\\xc4\\xb2\\xe0,\\x9fi\\xea\\x15\\xf7\\xf8\\xec\\xc8\\xb3<K7\\x17\\xda\\xdc\\x18\\x1dm\\xecr\\x0b\\xf4\\xaf^\\xbct\\x8e\\x16\\xf9\\x91\\xbd\\xe9u{v{\\xabT\\x08\\x91\\xe7|\\xf8XcG\\xa1\\xa3\\xd5\\xdf\\x01\\x13\\x17\\x97NC@{\\xebE\\x9awW4W\\\\\\x9bv:\\xdd\\x03\\x8a(O\\x85\\xc8C\\xb7\\x10\\xec\\xfe\\xfe\\xa0\\xeb:\\xbb}]\\xc2B\\x9f\\xf4z=\\xbbGa(\\xa39\\x04\\x87\\xdfR\\x9f\\xd99\\x13E\\x9e(\\xee\\xfd}\\xbd\\xce\\x8b\\xcbMk\\xe6\\x97_\\x9b\\xdaI\\x8a(\\xfa\\xfb\\xf3G\\xdf[@3)\\x866\\xee\\xb4\\xf4Sb\\xc80\\xcag\\xc4q\\xaa\\xd0\\x12\\xa5\\x1eE\\x8c>\\x04(\\x91B\\xe8j8\\xc4\\xd1Cr\\x05\\x97\\xdb`\\xdc\\xb40\\xa8\\xea\\xf6\\xd6\"\\xbf[7\\xd4\\xdd\\x8b<\\x071iO=\\xd0ap\\x03\\xf3x\\xcb\\xae\\xd7[o\\x1a\\x06\"\\x8c\\xd9\\xc3I\\xba\\t\\xbbQ\\x9eQ\\xc1z(\\xfd[\\xc0\\xe9\\xf6\\x1a\\x92(\\rv&U=\\xd5W\\x83\\xde\\x9a:[\\x84wy\\xd4\\x1a\\xb2\\xc3E\\x97\\x90\\x03\\x07\\xd4\\x0e\\xea\\x06\\xd6\\x97\\x18\\x84mT?k\\x88<u\\xd1|\\x876\\xfb\\xb0\\xf8\\xe8\\xb8\\xb6\\xdbO\\x13\\x86B8\\xf8\\x15\\xa5\\xd4\\x97\\x1f\\xd4Ms\\xd1^\\xb6\\xcf\"&\\x98\\x82T\\x1b{\\'dw:;\\xcd\\xfe\\x8aE\\x8ft\\xf5\\xa3\\xe2\\xf1^P\\x1e,\\x82\\xe7\\x9eC[.\\xbd8\\xd67m}\\x80\\xb8\\x8f\\xaa\\xa4\\x94\\x90\\x90\\x96h\\xfc\\xfe\\x9e\\x10\\xdb\\xbb\\xbf?\\xd1\\x0f@\\x16\\xceh\\x0e6!\\x1d\\x16:\\xa4w\\x7f\\xdf\\x05t\\xf9}\\xdc\\xde4]\\xbf\\xa7\\x9e\\xe8N\\x1b?\\x92\\x04\\xe0\\xb5\\xbe\\xb3\\xe3\\xe4\\x80\\x8a\\xbd\\xec\\xd8\\xa9p\\x8e\\xa1\\xc3\\xa6\\x0e\\xccH\\x06\\xe4\\xb8\\x1b\\x00\\x0cX27\\xb4\\x11\\xe9\\x1d\\x93\\'\\x14r\\xbb\\x13v<H\\xb1\\xc7\\xf4\\x98t<P19v\\x8f\\xd9\\xf1\\x02Z\\x9fo\\xb7+\\x11\\xd2\\r\\xec\\xc1_e\\x1d\\x10\\xf6\\x05\\xe3\\x02\\xf4\\xd3\\xe9\\xb4\\x1d\\xbe\\x8b\\xb3\\xef{ \\xa1D\\xfa\\xe0\\x1a\\x149\\xa3j\\x10\\xc5\\xf1L\\xdf\\xf4T\\n\\xba\\xe9\\xd5;\\x876\\x1a\\xbds\\xd6\\xcd\\xf7\\xed\\x9e\\x83\\xd7(\\x1fh?\\xf4?:\\x1f\\xa0\\xf3c\\xc5\\xe1@\\xdf\\xda\\xe4\\xba\\x1d\\x83\\xd0mv\\xcd\\xb3\\rV\\xd7\\xfd\\xac\\xe0\\xcb\\xee\\x87\\x0f\\xf4#\\x0e|l\\xfb9\\xf5\\x9fF\\xfb\\x1bl\\x9f\\x0e\\xe7\\x07\\x9aM\\xaf\\xef\\xd1(\\xea\\x8ae\\xc8{\\xd2\\xb3\\xe9\\xfe\\xfeV1\\x98,s\\xb6\\xe8C?\\xbb}\\x05{\\xe2\\x90\\xc8\\xbd\\xa1\\x9d:n\\xe9,^\\x8d\\xc2\\x0b\\x97C\\xccI\\x82\\xae{\\xac\\x83\\xd2\\xbb\\x7f\\xddwz\\xd7\\xce\\xa0T\\xba\\x07JF\\x7f\\xf0vXu:\\xb4\\x9f\\xb3,\\xa2\\x1e\\xc4\\xa9A\\xe9)O\\xc8\\xb1\\xd7t\\x96\\\\\\x16\\x99\\xf3\\xe1\\xaf\\xce\\xc7\\xff\\x18\\x04*A\\x17\\x90&_\\x12\\x10\\xe2tP\\x15@\\xa7\\\\\\xdcA=t\\x18\\xb84W\\x0f\\x03L\\n\\x100\\xa14\\xe3\\xe1g6\\xd3\\x87\\xd9\\xad\\x9dQ\\x1f\\xcb\\xb0\\x13\\x91f3=\\xbbU\\x0e\\xc28\\x83MI\\x13ao$\\xddz\\xc9\\xc2`)f\\x86\\x91\\xddn*\\x1e5\\x91\\x9b\\n\\x91\\xc6\\xb3\\xe9.\\x1dV\\x89\\'4\\n\\x83d\\x96#\\xe9\\xa6\\x1f\\xb8K\\x15~\\xfc5\\xecw\\x9f\\xe5\\xcdd<\\x8dB_9\\xf4,\\x7f\\xba\\xd0\\xed\\xd6\\xca`*$\\xaa\\xe7\\xd6\\xec,\\xe5!*\\x7fF] \\x82\\x08n#\\x0fc\\x04\\x12\\xdc\\x84\\xbeX\\xcetM\\xfbq\\xf3\\x8f\\x98\\xf9!U\\xc0\\x80k \\xd7\\xdbK\\xb7c\\x9a\\x07ar\"W4\\xeb\\x8fYl\\xafX.B\\xb0v\\xb5V`XI\\xbc\\x00\\x97\\x11\\xb3\\x88-\\xc4fC\\x91\\x91\\x8a\\xbf\\xa3\\xb5\\x14\\xccg^\\x9aKG\\x98\\x15`\\xb4<\\n\\x13\\xd6\\x92~\\x87@\\xd6\\xaf\\xb3CM\\xf3\\xda\\x180\\x14*\\xedq\\xdf7\\x991\\xddCY\\xec\\xa0@\\xf1\\xd1\\x1e\\xff\\x01L,M[Y\\xd8M\\xfd;U\\xf8*U3\\xb5\\xbf,m\\xbc\\xa0q\\x18\\xdd\\xcdh\\x1e\\xd2H\\xe54\\xe1\\'`\\xbap\\xb1A\\xdcu\\xa9\\rPl\\nZ\\x00yoN\\xeef\\xe04)\\xe4\\xa4\\xc3 \\rj\\x0b\\xcf\\xc0E\\x14\\x13\\xfei\\x1b\\xe1\\xafQ\\xd4\\x93J\\xa7}\\x93\\xc5\\xb0L\\xea\\xcdceoH\\x07\\x7f\\xd8@^\\x8e\\xabYj7144\\xeb\\xb2\\x16i8\\xf16\\xfd\\xeb\\x96\\x8e6}\\xc1\\x91W=\\xb7\\x86\\x1d\\xb5\\xcb\\x00ZD3\\xcef\\xf5\\xc7\\x86\\xc5\\xa5\\x9c7\\xe5\\xacn\\x1a\\xf9\\x95\\x0b\\xa1Jf\\t,\\x80F\\x1b\\x88\\xd4\\xa2\\xf1\\x83q\\xe3.#k\"}\\x8c/BU\\xa2 \\xe5LGQ\\x1f(\\x0c\\xb1x\\x850}\\x14\\xc1\\xe7k?\\xe4\\xb09\\xeffa\"U\\xe1\\xa6\\xb7\\xf6~\\x17\\x04\\x90\\xab\\xca\\r\\xa5^5e\\xb4\\xf5K\\xf4\\xb6\\x19\\xb47a\\x92\\x15b\\xc7\\x82a\\xb2\\x84i\\xda\\x9ee\\xc8\\xdf\\xe1\\xae\\x97\\xe9\\xfa\\x8e\\x97I3\\xbb\\xd4\\xbb\\n\\xf2\\x14\\x1cuv\\xb8X,\\xec\\x12\\xd5\\x85(r\\xb5\\xa1-B{\\xdf\\xb5\\x13\\xc8\\xd7\\x1b:[\\xa2{\\xa8tF!r\\xae\\xd8\\xd77\\xc0\\xa6\\xbf\\x88\\x14\\xda\\xb6,\\x9d\\xadB\\xd8\\xb2\\xcc\\xaf;\\xc7c\\x9d\\x9a\\xee\\xdf\\xdbO\\x12kX\\xce\\xfe\\x00K.\\xed0\\xc0\\xf3\\xa9\"\\x95Q\\xe1U\\xf3\\x80\\x98;;\\x89\\xbb\\x91\\xb7nG\\xb91\\x1a\\x1e{a\\xc1\\xb5\\x89vlc\\xa0mv\\xec\"#e+<\\xc9\\xf8\\x14q\\xd7\\xddQ0c\\xcc.\\xbduV\\x066@\\xb3\\xb7\\xee\\x8b\\x8b\\xf3<O9\\x84cX\\xf5\\x03M\\xbb\\xf2\\xcd\\xa1\\xd6\\xf0\\xdcY\\x14hVD\\xea\\xe1\"\\x8aZ\\xcb}\\xcc\\xa34E7*\\x16\\xedU\\x15P\\xc1\\xd5g\\xee\\x84\\xae\\xe6P\\xe5\\xa4\\x86a\\xe1q\\xba\\x07\\x1ex\\x02\\x873\\x10\\x172\\x0b\\xa3\\xe2\\xa4^\\xae\\xd4\\xb1\\xdd\\xecL\\xcd\\xf6\\x8a\\x9c\\xc3w\\x96\\x86p\\x8c\\xcf\\xdbk\\xb6\\xb7\\x91\\xa4\\x10\\xb8*\\xf8*\\xb7\\xca\\xf8\\x91\\xad\\xf2X\\xcc\\xc5\\x15\\xd7\\x0e\\xd6V\\'(G\\xee\\xde\\xd9\"\\xf5\\n\\xbe\\xae\\xd9K\\xf3o\\xc3_\\x95\\xe8\\x9a\\x8c\\x078W\\n\\xa6\\xdeG\\xae\\x1a\\xa00\\xf7\\x0bO\\x0cB/m\\xee\\x1a\\xa2\\xd4\\xcf\\xfa\\xd0A@\\x07\\x91C\\xf8\\x12\\xfc\\xc6+\\x84\\x02]\\t\\x01\\xbe\\xe55\\x08n&\\xc5\\r\\xa4F\\x1c\\x82>F\\x1e\\xbde\\xc0\\xdc\\x8fE\\xe6\\xd1WT~$K\\x8a\\x90q(\\xbdi\\xc4\\x99\\xed\\x83l1\\x1c=\\xfa8CU\\x1a+\\x8e\\xf2\\xf0\\xe2\"Q:\\x1d\\xa5\\xfe\\xeeb\\xb9\\xa1t\\x1b\\xe2r\\xb2\\xde\\xba\\xa9\\xc9\\xbb=Y\\xeb\\xc2?{\\xf3\\x03\\xa2\\x1e\\xe0\\x9cP_\\xd7\\x14\\x8bNg\\xfb\\xdd\\xbf\\xeeK\\x1d\\x03\\xdb\\xa63p\\xaf\\xdb8\\xd8l\\xa1m~\\x80?xn\\xdc*\\xde\\x0fWJ\\x085g\\x9c\\x04.9S\\xea6&\\xd4\\xb3\\xd3$u\\xe1\\xd7U\\xbc\\x88r\\x0e}\\xfa\\xd9?\\x99\\x07Q\\r\\xfe\\x9d\\x0e\\\\\\xc0\\xa6\\xdb\\xa1\\xcaz\\xe5\\xf1j0\\xb8\\xb9iJ\\xf9E\\x0ej\\r\\x96\\xd9\\x93%TsyGP\\x17j3r&%\\xe6\\xa7\\x03\\xfaM>1$\\x8d\\x16#l\\xb6\\xf9D\\xe4\\xecW\\xe8\\xfa\\x1e\\x17\\xdc~5\\x17/\\x8d\\x07m\\x16&9{\\r\\xc3\\xdfc\\x81\\x02\\xdd\\x817\\x17n\\xc5\"\\x88\\x9c\\x9f\\xffY\\xb2\\xd0\\xc9\\xd9\\xbf\\xd3\\xe2-\\x0c}\\x8f\\x0b\\x98\\xba-Nr\\xc3w\\xf5\\x02\\xce\\xfb\\xd4\\x13\\x05l3\\xf1\\xe5o\\xe8&\\x8c\\xdaRa{\\xf0D\\xf2\\x89\\xc9\\xd9sl~\\x8f\\x85\\x9f\\xc3\\xfe\\xdd\\xd1\\x8c$O\\xc9\\xd93\\x1cyH.7py\\xa5\\xb8\\x1f\\xdd\\xc9\\xb7] \\x11\\xd1\\x00`\\x9a!\\x01\\x1f\\xc0N,@\\xf1\\x05HY\\x9c)\\x9d\\x9c^\\x17\\xa9\\x8d\\xf3\\x9d\\x0eJ\\xb7\\x1b\\x80+6\\xfe)\\x0bXE\\x16\\x01\\x0e\\xd6\\x8c\\xb5o\\xf2\\x8c&\\xa5\\xbf&\\xcd\"C\\x8c+\\xd0\\xdf\\x1e]4\\xa3\\x8bGFY\\xd3G[2<\\x10\\x01\\x0e\\x17\"\\xcd\\xefP\\x04p\\x84\\xd2l\\xa4a<:{!\\xc7\\xc3\\xeb\\x82)\\xef\\x99+uw\\x8f\\xda\\xab\\x03[\\x06\\x80\\xe5,\\xf1\\x18\\x7fH\\xfc\\x9a\\xe64\\xfe\\x1f\\x91W[B\\x12\\n\\x08\\xd2L8s\\x88\\xb7\\xe5B\\xe7SmO\\xc9\\xd4\\xf3 \\xee\\n\\xde\\xb6\\xe1\\x1b\\x96\\xafB\\x8f\\xbdL!\\xc2W\\xce\\x95\\xc14`OG\\xe4\\x05\\xeb\\xe0\\xadn\\x98\\x14\\xccy\\xdcR\\xedU\\x9d\\xa7I\\xc2n\\xc1`\\x8f[\\xa6F\\\\V~!\\xd3\\xae\\xf6-\\x8c\\xb2\\x90\\xafQ\\x94\\n\\xd3c\\x98\\xa0 \\xd4\\xc0\\x19,\\x82\\x93\\x93C\\xe00@d`\\x8a\\x82\\xcc\\'\\xdb8\\x15\\x05\\xb4jU\\x9eX\\x97\\x9d\\x86\\xacw\\x15H\\xf9\\xbb\\xe3uu\\xabkM\\x15iL\\'\\x98\\xe2\\x1f\\xcf\\xb6{7\\xdc\\x98\\x05\\xb6\\x97\\xdc\\xd8\\x9a\\xdf,\\xa1@\\x9ao\\xc9\\xab\\xfbncj\\xdcZFy\\xe5\\xddS\\x92\\xf4\\xa4\\xcc\\xceD\\x91\\xb7\\xdb\\x0e)/\\xbb\\x89\"S(\\x08\\x02\\xaa*%\\\\f\\xc8\\x96(\\xd5\\r\\x0bi\\x0e\\xaeQ\\xa7\\x03?\\xdd\\xde\\xae@U~\\x9fN\\xa7\\xed\\xdafR\\x97:\\xed\\xba\\xba9~A\\x92\\xa4\\x98\\xa9\\xe5\\xf1k\\x8a\\x9a\\x90\\x962\\xb0r&\\xb0\\xd6\\x9b\\x9cf\\x0e!g?\\x83\\xf0\\x1e\\xab\\x8c\\xd2\\xfe\\xdd\\x9a\\x1dO\\x08\\n\\x95i\\xce\\xa9\\x8f\\xb9\\xc0\\x82\\xc6\\xb04L\\xaf\\x10?\"\\xa6x,\\x8a*\\xcb8D#\\xb2\\r;\\xcc\\xab\\xda\\x80\\x96+\\xabJ\\x13\\xb0&\\xec\\xf0\\xab\\xedM\\x8c\\xf1\\x8f\\xe4\\xac\\x93\\xb8<\\x83x |9T\\xa1\\x96~\\xd2^\\xf1\\xa9,\\xbc\\xab\\xf9CP/p\\x05\\xcf&\\x97o^\\x9d\\x98\\xe6\\xd8:\\xd1\\xc1\\x00\\xe5\\xfbI\\xe8\\xfb,i(*<\\xdc\\x84%\\xf12\\xfa\\nf9\\xcc\\xd3\"\\xf7\\xd8\\x1eJ\\xcde\\x99\\xeda\\xbb\\xe1\\xcd7\\xb9\\xb9\\xe1\\xf2\\xc1\\xf8v\\xbb\\x10\\x9f\\x93=\\xff\\x1dn\\x0f\\xc3x\\xdeP\\xb4\\x86\\xe1\\xae[`\\xd9\\xd7\\xd4v\\xf5\\xde\\x18\\xd7\\xc7A\\x05\\xdd\\xe4a1\\x07NY\\xe0\\xddg\\x9c\\xe1=\\x9eCR(\\x94\\xea\\xa5@)\\xd7\\x88\\xd9\\xf8rS\\x06(\\xb5W\\xc7\\xf46bI \\xed\\xa7\\x8d\\xccZ\\xa9\\xd7 \\x07\\xf8\\xa7C\\xc6S\\xb2\\xf5\\xa5z\\xcd\\xed\\xe3\\'\\n$#\\xf2V\\x05\\xbb\\x1dXd7Bo\\xfb\\x9a\\xc5=\\\\S\\xa5j\\x91<\\xafu\\xcd\\x0b7\\x0e\\x05i\\xc2};\\x13\\xfc_\\xe7\\xfd\\xe5\\x88\\x86\\x8a\\xcf\\x94\\x88\\xe2\\xebZ\\xe2\\xb5\\'\\xbe\\xc4]\\xedE\\xa1w\\x05\\xce\\xb9\\x90\\xd7S}\\xdc@P\\x93I\\xea\\x9e\\xec\\x815{W\\xccwt[aP]*`\\x91\\xe6\\xda\\njR?M\\xfd\\x08\"\\xd3\\xd1w\\xa4\\xa8\\xf7J\\xb5F8\\xda\\xe1qi/\\xe04;gg\\xb75yo@\\xfd\\x15\\xca\\xe0\\xcf\\xab\\x0b\\xac2}\\xd08\\xb3\\xeb\\xf7\\t\\x07,\\xb5\\xd55E\\xf4/\\xb2P\\xd82\\xc1\\xf7\\xc8\\x02\\xa2)$\\xae4\\xe2_\\xe1\\xf1\\xaa\\x10a\\xc4\\x15\\xf0\\x81\\xa0\\x80\\xc4\\x89i\\x93\\x97Y\\x06\\xe5\\x18\\x08\\x8c82\\x98\\xd4\\xba\\xc7X\\x19\\xb8\\xabZ\\xbd\\xf2\\xf3\\xd1\\xdd\\xa8\\xa3jP\\xcd\\xdb\\xb4\\x817\\x1e\\x1c\\xf3\\x1ei\\'\\xa7\\xca\\r\\xb7a\\xd4\\x1c\\xfeh\\xc7p|\\xac7\\x1d^8\\x91v\\xf4\\xabk\\x06\\xa0I1\\x12}\\x85\\x0f$\\x1b\\xb1;V\\xedI\\xdd\\xc2\\xe3\\x15l\\xb6\\xf6u[\\x1d\\xd5$_\\xc8{-M\\xd6U\\x13\\xf5\\xb1bz\\x83whX=)Y\\xe1\\x82W\\x85\\x82\\x86U\\xc1\\xb0%\\xe1e\\xf6\\xdf\\xc5\\xf7\\x8f`\\x0eHHy\\xc8wm\\xb5\\xad\\x90\\x8b\\x9d\\x1aB\\xd7&\\x96\\xa6\\x8f\\xcc\\x89i\\xe2\\x83\\x98\\xa1\\x19\\xa6aT\\xa7-99_\\xa2\\xf8\\xc7\\xf5\\x13.}l\\xd1.\\x94I}|x&g\\xff\\xad\\xe0\\x03p\\xcaq\\xa7<B\\xf3x%\\xc2\\x99\\xc0\\x9a\\xc9O\\xa1\\x94M\\x9eT\\x9f\\xce\\xbb7\\xd2\\x97x\\x188\\xf3\\xf9\\xab\\x17\\xc9\\xafo/\\xce\\xaf\\xae\\xf4_\\x9f\\xaf\\xfex\\xf3\\x9f\\xc1\\xf3\\xd1s\\xfdi\\xfc\\xe2z|\\xf9\\xe3\\xf0Y\\xa5S\\x06\\xb1\\xbdzlF\\xe1J/ke\\xb7l?\\xb7N\\xf0O+\\xbd\\x9ahN\\xa8\\x9b\\xb2;[14}\\xa2\\x9c(\\x0f\\xc5\\xcdR4\\t(\\x1e\\xb4\\xbc\\xa2\\xde\\x1d\\x18\\x00\\xca\\xa7E\\x08\\xae)BY\\xd1\\xcb\\xca\\xee\\x9b\\xa4\\xe0\\x071/\\t}\\x99\\xba\\xab-\\x91mwy]+}\\xef\\xb5\\xbc\\xef\\xf9\\xa9\\xd3\\\\\\xc5\\xaae\\xe9\\xa3m\\xec\\xfd\\x83osS\\x1eB\\xa9\\x97\\xbfG4\\xd5\\xdd\\xe9{!y\\xe0U\\xf9\\x01\\xbd\\xbf?p{\\xe5]y\\x85R\\x1f6U\\xd0\\xf4\\xf9\\x9b7\\xfa9\\xa4\\x11({\\xf0z\\xdc\\x93\\x9f\\xbf\\xa6>{\\xe25x\\x17\\x11C0\\xf3\\xe4\\xe1Y\\xa5\\x8e\\xdf\\x87\\x08\\t=\\xf5\\xd4u\\xbb\\x9a\\x96v:n\\xa7\\xd3\\xa5\\x07\\xceV\\xae\\xbe\\x94\\xe6\\xfe\\xde\\xdd\\xe9,e\\xdd\\xbe\\x88@Y\\xd5%D\\xc5\\xbf\\x83\\x92%\\xbe\\xbb<\\xe9T\\x8f.\\x90\\xa3\\xabW\\x17\\xc8\\xc6\\xf2\\xd5e\\xf7\\xed\\xe7\\xea\\xe2\\xb2\\xb7\\xf7\\xb2\\xf0\\x95\\xc3\\xf3\\xed\\'\\xee\\x93\\xbd\\x13\\x0bv\\x86\\x8f_7\\xd4\\x9f\\x8a\\xd7u\\x1b\\xa3\\xf1\\xf2\\xa5\\x0fv\\xccC\\x035\\xe7y/\\x87\\x8a\\x92U\\x1a\\xec\\x92\\x927\\xe9\\xd9T\\xde\\x1b\\xb8\\xad{\\x00V\\xeb\\xf9\\xa7\\xbbK\\xbf[\\xae\\xb0\\xd7\\xa7Y\\xc6\\x12\\xff|\\x19F~\\x97\\xf66\\xaa\\xd6\\xdbT\\xc2\\xfa\\xd1\\xa7l\\xfb\\xd6\\xe2\\xaa\\xb4yk\\x01\\xd2\\x02X{H`o\\xb1\\x1doO7_wD\\xe0\\x90\\xc7\\xf8\"$\\xd5\\x07nT\\xbf\"\\xf5\\xea\\x8f\\xfe\"\\xcc\\xb9@\\x14t\\xb2-Y\\xc3i^{\\xdb\\xfc\\xfe~\\xdd\\xbc1\\xce\\xfb\\xf3gE\\x9c]\\xdczL\\x9e*\\xb7\\x02\\xb0\\xdeZ,\\xf3\\xf4Fa\\x9b\\xd6\\x84\\xf8\\x86\\x96\\xf3\\xc6?\\xca\\xa6|i\\xea\\x8bF\\xde\\x9d^\\\\D\\xc4\\x9d\\xfaA\\xb6\\xdbz\\x91\\xb5\\xdb\\xaa\\xeb\\x1e\\r\\x00s0\\x1f\\xc0\\xcf\\xd5\\x9f\\xb7C\\x1fZ\\xfde\\xd6g\\xc9\\xfc\\xdd\\x9b\\xfe\\xfb\\xdf\\x86\\x7fdo>\\x9f\\xfc\\xf4\\xdc\\xec\\xbf\\x1a\\xc48\\xce\\xdd\\xf9\\x92\\xa9\\xfe \\x17\\xd8\\xfa4\\xf0\\x11\\xe8\\x03\\xd9\\xfa\\xecA\\x0c\\xc89~>=\\x7fki\\xe9\\xf3\\x95\\xff\\x82N\\xdf\\xbe4\\xde\\xcf/\\x7f\\xffC\\xe7\\xe3\\x9f^\\xdf\\xfe\\xfb\\xf2\\x05{\\xb7Z\\xfe~\\xa4\\xfe\\xffM\\xdd\\xb3\\xb7\\xa6\\x82\\xea\\xa5VH\\x16{\\xce\\x9a\\xc8i\\xc8lM\\xa0\\x10H\\xc8\\x0cO\\x9e*\\xf1\\xda\\xdfrK\\x92\\x19\\x96\\xb8y\\x94\\xa6\\xf1\\t\\x94\\xd1*\\xf1\\x975\\x82\\xbf\\xbc\\x16\\xcd7\\x07D\\x18]Du\\xcf2\\xe5H\\xdcd\\x0b\\x18\\x0c\\xb9\\x0b\\xc4\\x86\\xa9\\x92O4&\\x10\\xf4\\xc8\\'\\x9e&YM\\x11\\xc5\\xf5W\\xcc\\x03\\x8eK\\xf3B\\x17\\xf8\\x91\\x8b\\xc5\\x82z,\\xc7\\x12.\\xaf+\\x1b\\\\\\xc9]\\x8c\\x83\\x9c\\xd3;\\xf6\\x19*\\x1d\\xe6\\xc19F\\x08\\xa6\\xa4\\xb9X\\xa6\\x01\\xd4QP\\x00\\xcd\\x001\\xf2\\xae\\xee\\x00\\xf3\\x97?\\x0bM3&\\x87C\\xcb\\xde/\\tqr9S\\xa2p\\xbaJ\\xc3\\\\\\xc1\\x84\\x0b\\xdd)\\xbfB)\\xaab\\x08h8\\ry\\x88\\x04\\x19li\\x189\\x973\\xf2\"\\x80\\xc3\\xa9\\x0c\\x1aTqAo\\xca\\x17\\xf1\\x05z3\\xc85\\xf1\\x17\\x86\\x84\\xab\\x14\\x12\\xbc\\x82K\\x18\\x9eW\\t\\xe6OR\\xdfY\\xfcI\\xe4\\xc0\\xc5r\\xe7\\x8a\\xa2D\\x1e\\xd0r\\xac_N\\x8a\\xcb|S2f\\xa8T\\xee\\x86\\xb8\\xc2m\\xc9\\x97\\xe1]\\xa8\\xfc\\x7f\\\\0\\x88\\xa7\\xbf\\xd9\\xc3\\xda{\\xa3\\x92\\x04MV\\xaa;]\\xe5\\xa0m\\xe8\\xcb\\xaeK+\\xc2\\xe2\\xe0T_\\x8d\\xe6\\x0b@\\xfc\\xf0\\x11\\x98y\\xd0\\xa7k\\xf8\\x01\\x8e3\\x06(\\xd2+ XY\\xcb\\xc4\\xba\\xf8\\xed\\xf5\\xbf\\x8c\\xf3k\\xfd_\\xcf\\x9e\\x16\\x93\\xc2\\x1fO\\xde~\\xbe\\xba\\xfb\\x1d\\'\\xf2\\x91\\xf7\\xf6\\xf5\\xba\\x8c%\\xe5\\xfbp+$m\\xa3@\\xcc\\xfcf\\xb3\\xc3w\\xf7(LB\\xb1\\xf5el\\x9579w\\xdd\\xa6S\\xe2U\\xba\\x04\\xd4\\xcd\\xa6\\x1d\\xc7>5\\x11\\xe5\\x13\\xec\\xbaV\\xe36|,\\xbc\\xb7\\x86!\\x00\\xdb\\xf2U\\xb0\\xbe\\x0f/\\x8b\\x12L\\x8cx\\x89\\x8d\\xff\\'\\xf0\\x7f\\x01\\xa9\\x9a\\xd7%#(\\x00\\x00'\n", |
| " | padding = '\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00'\n", |
| "\n" |
| ] |
| } |
| ], |
| "prompt_number": 113 |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "Now, I don't know about you, but I can't read this :) Let's use the helpers to help us out.\n", |
| "\n", |
| "First we need to create a new Header table that is meaningful for headers received from the server. We set the various sizes to the values we defined in our settings." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "collapsed": false, |
| "input": [ |
| "srv_tblhdr = h2.HPackHdrTable(dynamic_table_max_size=max_hdr_tbl_sz, dynamic_table_cap_size=max_hdr_tbl_sz)" |
| ], |
| "language": "python", |
| "metadata": {}, |
| "outputs": [], |
| "prompt_number": 114 |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "Let's now convert all received headers into their textual representation, and stuff the data frames into a buffer per stream." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "collapsed": false, |
| "input": [ |
| "# Structure used to store textual representation of the stream headers\n", |
| "stream_txt = {}\n", |
| "# Structure used to store data from each stream\n", |
| "stream_data = {}\n", |
| "\n", |
| "# For each frame we previously received\n", |
| "for frame in stream.frames:\n", |
| " # If this frame is a header\n", |
| " if frame.type == h2.H2HeadersFrame.type_id:\n", |
| " # Convert this header block into its textual representation.\n", |
| " # For the sake of simplicity of this tutorial, we assume \n", |
| " # that the header block is not large enough to require a Continuation frame\n", |
| " stream_txt[frame.stream_id] = srv_tblhdr.gen_txt_repr(frame)\n", |
| " # If this frame is data\n", |
| " if frame.type == h2.H2DataFrame.type_id:\n", |
| " if frame.stream_id not in stream_data:\n", |
| " stream_data[frame.stream_id] = []\n", |
| " stream_data[frame.stream_id].append(frame)" |
| ], |
| "language": "python", |
| "metadata": {}, |
| "outputs": [], |
| "prompt_number": 115 |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "Now, we can print the headers from the Favicon response." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "collapsed": false, |
| "input": [ |
| "print(stream_txt[3])" |
| ], |
| "language": "python", |
| "metadata": {}, |
| "outputs": [ |
| { |
| "output_type": "stream", |
| "stream": "stdout", |
| "text": [ |
| ":status 200\n", |
| "vary: Accept-Encoding\n", |
| "content-encoding: gzip\n", |
| "content-type: image/x-icon\n", |
| "date: Thu, 08 Dec 2016 06:23:59 GMT\n", |
| "expires: Fri, 16 Dec 2016 06:23:59 GMT\n", |
| "last-modified: Thu, 08 Dec 2016 01:00:57 GMT\n", |
| "x-content-type-options: nosniff\n", |
| "server: sffe\n", |
| "content-length: 1494\n", |
| "x-xss-protection: 1; mode=block\n", |
| "cache-control: public, max-age=691200\n", |
| "age: 472252\n", |
| "alt-svc: quic=\":443\"; ma=2592000; v=\"35,34\"\n" |
| ] |
| } |
| ], |
| "prompt_number": 116 |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "So, we received a 200 status code, meaning that we received the favicon. We also can see that the favicon is GZipped. Let's uncompress it and display it in this notebook." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "collapsed": false, |
| "input": [ |
| "import zlib\n", |
| "img = zlib.decompress(stream_data[3][0].data, 16+zlib.MAX_WBITS)\n", |
| "from IPython.core.display import HTML\n", |
| "HTML('<img src=\"data:image/x-icon;base64,{}\" />'.format(img.encode('base64')))" |
| ], |
| "language": "python", |
| "metadata": {}, |
| "outputs": [ |
| { |
| "html": [ |
| "<img src=\"data:image/x-icon;base64,AAABAAIAEBAAAAEAIABoBAAAJgAAACAgAAABACAAqBAAAI4EAAAoAAAAEAAAACAAAAABACAAAAAA\n", |
| "AAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///zD9/f2W/f392P39/fn9/f35\n", |
| "/f391/39/ZT+/v4uAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7+Cf39/Zn/////////////////\n", |
| "//////////////////////////39/ZX///8IAAAAAAAAAAAAAAAA/v7+Cf39/cH/////+v35/7TZ\n", |
| "p/92ul3/WKs6/1iqOv9yuFn/rNWd//j79v///////f39v////wgAAAAAAAAAAP39/Zn/////7PXp\n", |
| "/3G3WP9TqDT/U6g0/1OoNP9TqDT/U6g0/1OoNP+Or1j//vDo///////9/f2VAAAAAP///zD/////\n", |
| "+vz5/3G3V/9TqDT/WKo6/6LQkf/U6cz/1urO/6rUm/+Zo0r/8IZB//adZ////v7///////7+/i79\n", |
| "/f2Y/////4nWzf9Lqkj/Vqo4/9Xqzv///////////////////////ebY//SHRv/0hUL//NjD////\n", |
| "///9/f2U/f392v////8sxPH/Ebzt/43RsP/////////////////////////////////4roL/9IVC\n", |
| "//i1jf///////f391/39/fr/////Cr37/wW8+/+16/7/////////////////9IVC//SFQv/0hUL/\n", |
| "9IVC//SFQv/3pnX///////39/fn9/f36/////wu++/8FvPv/tuz+//////////////////SFQv/0\n", |
| "hUL/9IVC//SFQv/0hUL/96p7///////9/f35/f392/////81yfz/CrL5/2uk9v//////////////\n", |
| "/////////////////////////////////////////f392P39/Zn/////ks/7/zdS7P84Rur/0NT6\n", |
| "///////////////////////9/f////////////////////////39/Zb+/v4y//////n5/v9WYu3/\n", |
| "NUPq/ztJ6/+VnPT/z9L6/9HU+v+WnfT/Ul7t/+Hj/P////////////////////8wAAAAAP39/Z3/\n", |
| "////6Or9/1hj7v81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v9sdvD////////////9/f2YAAAAAAAA\n", |
| "AAD///8K/f39w//////5+f7/paz2/11p7v88Suv/Okfq/1pm7v+iqfX/+fn+///////9/f3B/v7+\n", |
| "CQAAAAAAAAAAAAAAAP///wr9/f2d///////////////////////////////////////////9/f2Z\n", |
| "/v7+CQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/jL9/f2Z/f392/39/fr9/f36/f392v39/Zj/\n", |
| "//8wAAAAAAAAAAAAAAAAAAAAAPAPAADAAwAAgAEAAIABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n", |
| "AAAAAAAAAAAAAIABAACAAQAAwAMAAPAPAAAoAAAAIAAAAEAAAAABACAAAAAAAAAQAAAAAAAAAAAA\n", |
| "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/g3+/v5X\n", |
| "/f39mf39/cj9/f3q/f39+f39/fn9/f3q/f39yP39/Zn+/v5W////DAAAAAAAAAAAAAAAAAAAAAAA\n", |
| "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+\n", |
| "/iT9/f2c/f399f/////////////////////////////////////////////////////9/f31/f39\n", |
| "mv7+/iMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n", |
| "AAAAAP7+/gn9/f2K/f39+///////////////////////////////////////////////////////\n", |
| "/////////////////////f39+v39/Yf///8IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n", |
| "AAAAAAAAAAAAAAAAAAD+/v4k/f390v//////////////////////////////////////////////\n", |
| "//////////////////////////////////////////////////39/dD///8iAAAAAAAAAAAAAAAA\n", |
| "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////MP39/er//////////////////////////+r05v+v\n", |
| "16H/gsBs/2WxSf9Wqjj/Vqk3/2OwRv99vWX/pdKV/97u2P////////////////////////////39\n", |
| "/ej+/v4vAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/iT9/f3q////////////////////\n", |
| "/+v15/+Pxnv/VKk2/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/36+Z//d7tf/\n", |
| "//////////////////////39/ej///8iAAAAAAAAAAAAAAAAAAAAAAAAAAD///8K/f390///////\n", |
| "///////////////E4bn/XKw+/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/1Oo\n", |
| "NP9TqDT/U6g0/1apN/+x0pv///////////////////////39/dD///8IAAAAAAAAAAAAAAAAAAAA\n", |
| "AP39/Yv/////////////////////sdij/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/1OoNP9TqDT/\n", |
| "U6g0/1OoNP9TqDT/U6g0/1OoNP9TqDT/YKU1/8qOPv/5wZ////////////////////////39/YcA\n", |
| "AAAAAAAAAAAAAAD+/v4l/f39+////////////////8Lgt/9TqDT/U6g0/1OoNP9TqDT/U6g0/1Oo\n", |
| "NP9utlT/n86N/7faqv+426v/pdKV/3u8ZP9UqDX/U6g0/3egN//jiUH/9IVC//SFQv/82MP/////\n", |
| "/////////////f39+v7+/iMAAAAAAAAAAP39/Z3////////////////q9Ob/W6w+/1OoNP9TqDT/\n", |
| "U6g0/1OoNP9nskz/zOXC/////////////////////////////////+Dv2v+osWP/8YVC//SFQv/0\n", |
| "hUL/9IVC//WQVP/++fb//////////////////f39mgAAAAD+/v4O/f399v///////////////4LH\n", |
| "j/9TqDT/U6g0/1OoNP9TqDT/dblc//L58P//////////////////////////////////////////\n", |
| "///8+v/3p3f/9IVC//SFQv/0hUL/9IVC//rIqf/////////////////9/f31////DP7+/ln/////\n", |
| "///////////f9v7/Cbz2/zOwhv9TqDT/U6g0/2KwRv/v9+z/////////////////////////////\n", |
| "//////////////////////////738//1kFT/9IVC//SFQv/0hUL/9plg////////////////////\n", |
| "///+/v5W/f39nP///////////////4jf/f8FvPv/Bbz7/yG1s/9QqDz/vN2w////////////////\n", |
| "//////////////////////////////////////////////////rHqP/0hUL/9IVC//SFQv/0hUL/\n", |
| "/vDn//////////////////39/Zn9/f3L////////////////R878/wW8+/8FvPv/Bbz7/y7C5P/7\n", |
| "/fr//////////////////////////////////////////////////////////////////ere//SF\n", |
| "Qv/0hUL/9IVC//SFQv/718H//////////////////f39yP39/ez///////////////8cwvv/Bbz7\n", |
| "/wW8+/8FvPv/WNL8///////////////////////////////////////0hUL/9IVC//SFQv/0hUL/\n", |
| "9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//rIqv/////////////////9/f3q/f39+v//////\n", |
| "/////////we9+/8FvPv/Bbz7/wW8+/993P3///////////////////////////////////////SF\n", |
| "Qv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/+cGf////////////////\n", |
| "//39/fn9/f36////////////////B737/wW8+/8FvPv/Bbz7/33c/f//////////////////////\n", |
| "////////////////9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/6\n", |
| "xaX//////////////////f39+f39/e3///////////////8cwvv/Bbz7/wW8+/8FvPv/WdP8////\n", |
| "///////////////////////////////////0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC\n", |
| "//SFQv/0hUL/9IVC//vVv//////////////////9/f3q/f39y////////////////0bN/P8FvPv/\n", |
| "Bbz7/wW8+/8hrvn/+/v/////////////////////////////////////////////////////////\n", |
| "//////////////////////////////////////////////////////////39/cj9/f2c////////\n", |
| "////////ht/9/wW8+/8FvPv/FZP1/zRJ6/+zuPf/////////////////////////////////////\n", |
| "////////////////////////////////////////////////////////////////////////////\n", |
| "/f39mf7+/lr////////////////d9v7/B7n7/yB38f81Q+r/NUPq/0hV7P/u8P3/////////////\n", |
| "////////////////////////////////////////////////////////////////////////////\n", |
| "///////////////////+/v5X////D/39/ff///////////////9tkPT/NUPq/zVD6v81Q+r/NUPq\n", |
| "/2Fs7//y8v7////////////////////////////////////////////09f7/////////////////\n", |
| "/////////////////////////////////f399f7+/g0AAAAA/f39n////////////////+Tm/P89\n", |
| "Suv/NUPq/zVD6v81Q+r/NUPq/1Bc7f/IzPn/////////////////////////////////x8v5/0xY\n", |
| "7P+MlPP////////////////////////////////////////////9/f2cAAAAAAAAAAD+/v4n/f39\n", |
| "/P///////////////7W69/81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v9ZZe7/k5v0/6609/+vtff/\n", |
| "lJv0/1pm7v81Q+r/NUPq/zVD6v+GjvL//v7//////////////////////////////f39+/7+/iQA\n", |
| "AAAAAAAAAAAAAAD9/f2N/////////////////////6Cn9f81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD\n", |
| "6v81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v+BivL/////////////////////\n", |
| "///////9/f2KAAAAAAAAAAAAAAAAAAAAAP7+/gv9/f3V/////////////////////7W69/8+S+v/\n", |
| "NUPq/zVD6v81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v81Q+r/P0zr/7q/+P//\n", |
| "/////////////////////f390v7+/gkAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/ib9/f3r////////\n", |
| "/////////////+Xn/P94gfH/NkTq/zVD6v81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v81Q+r/NkTq\n", |
| "/3Z/8f/l5/z///////////////////////39/er+/v4kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n", |
| "AAAAAP7+/jL9/f3r///////////////////////////k5vz/nqX1/2p08P9IVez/OEbq/zdF6v9G\n", |
| "U+z/aHLv/5qh9f/i5Pz////////////////////////////9/f3q////MAAAAAAAAAAAAAAAAAAA\n", |
| "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/ib9/f3V////////////////////////////////////\n", |
| "/////////////////////////////////////////////////////////////f390v7+/iQAAAAA\n", |
| "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wr9/f2N/f39/P//////\n", |
| "/////////////////////////////////////////////////////////////////////f39+/39\n", |
| "/Yv+/v4JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n", |
| "AAAAAAD+/v4n/f39n/39/ff/////////////////////////////////////////////////////\n", |
| "/f399v39/Z3+/v4lAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n", |
| "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7+Dv7+/lr9/f2c/f39y/39/e39/f36/f39+v39\n", |
| "/ez9/f3L/f39nP7+/ln+/v4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n", |
| "AP/AA///AAD//AAAP/gAAB/wAAAP4AAAB8AAAAPAAAADgAAAAYAAAAEAAAAAAAAAAAAAAAAAAAAA\n", |
| "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABgAAAAcAAAAPAAAAD4AAAB/AAAA/4\n", |
| "AAAf/AAAP/8AAP//wAP/\n", |
| "\" />" |
| ], |
| "metadata": {}, |
| "output_type": "pyout", |
| "prompt_number": 117, |
| "text": [ |
| "<IPython.core.display.HTML at 0x7f26f59bfc10>" |
| ] |
| } |
| ], |
| "prompt_number": 117 |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "Let's now read the frontpage response." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "collapsed": false, |
| "input": [ |
| "print(stream_txt[1])" |
| ], |
| "language": "python", |
| "metadata": {}, |
| "outputs": [ |
| { |
| "output_type": "stream", |
| "stream": "stdout", |
| "text": [ |
| ":status 200\n", |
| "date: Tue, 13 Dec 2016 17:34:51 GMT\n", |
| "expires: -1\n", |
| "cache-control: private, max-age=0\n", |
| "content-type: text/html; charset=ISO-8859-1\n", |
| "p3p: CP=\"This is not a P3P policy! See https://www.google.com/support/accounts/answer/151657?hl=en for more info.\"\n", |
| "content-encoding: gzip\n", |
| "server: gws\n", |
| "content-length: 4420\n", |
| "x-xss-protection: 1; mode=block\n", |
| "x-frame-options: SAMEORIGIN\n", |
| "set-cookie: NID=91=Wt1Jkm3Eretgg-hJ32fkj7kSSOLTc8tfEEIP5F2QTzHqbsXcCFve-QoN1oZvkGEqqqAWklc2wlj97YDkMnGXQUw20iCYMc3FD6X-KVuK1wdFURafcqQMQZ8e-F14YUfn; expires=Wed, 14-Jun-2017 17:34:51 GMT; path=/; domain=.google.fr; HttpOnly\n", |
| "alt-svc: quic=\":443\"; ma=2592000; v=\"35,34\"\n" |
| ] |
| } |
| ], |
| "prompt_number": 118 |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "So, we received a status code 200, which means that we received a page. Let's \"visualize it\"." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "collapsed": false, |
| "input": [ |
| "data = ''\n", |
| "for frgmt in stream_data[1]:\n", |
| " data += frgmt.payload.data\n", |
| "\n", |
| "HTML(zlib.decompress(data, 16+zlib.MAX_WBITS).decode('UTF-8', 'ignore'))" |
| ], |
| "language": "python", |
| "metadata": {}, |
| "outputs": [ |
| { |
| "html": [ |
| "<!doctype html><html itemscope=\"\" itemtype=\"http://schema.org/WebPage\" lang=\"fr\"><head><meta content=\"text/html; charset=UTF-8\" http-equiv=\"Content-Type\"><meta content=\"/images/branding/googleg/1x/googleg_standard_color_128dp.png\" itemprop=\"image\"><title>Google</title><script>(function(){window.google={kEI:'OzFQWJ_-L4OZaPm9ntgO',kEXPI:'750721,1351903,3700243,4029815,4032677,4038012,4041899,4043492,4045841,4048347,4055745,4062666,4065787,4067860,4068550,4069838,4069841,4072602,4072775,4073405,4073728,4073959,4074597,4074955,4076095,4076931,4076999,4078438,4078456,4078764,4079106,4079442,4079626,4079894,4079954,4080167,4081037,4081039,4082056,4082165,4082217,4082619,4083476,4084298,4084343,4084956,4085057,4085627,4086011,4086290,4086863,4087718,4087977,4088429,4088436,4088448,4088643,4089003,4089106,4089337,4089346,4089481,4089538,4089696,4089741,4089749,4090086,4090352,4090401,4090445,4090806,8300096,8300272,8300478,8506615,8507381,8507419,8507858,8507899,8508059,8508065,8508590,8508957,8509066,8509243,10200083,13500022',authuser:0,kscs:'c9c918f0_24'};google.kHL='fr';})();(function(){google.lc=[];google.li=0;google.getEI=function(a){for(var b;a&&(!a.getAttribute||!(b=a.getAttribute(\"eid\")));)a=a.parentNode;return b||google.kEI};google.getLEI=function(a){for(var b=null;a&&(!a.getAttribute||!(b=a.getAttribute(\"leid\")));)a=a.parentNode;return b};google.https=function(){return\"https:\"==window.location.protocol};google.ml=function(){return null};google.wl=function(a,b){try{google.ml(Error(a),!1,b)}catch(c){}};google.time=function(){return(new Date).getTime()};google.log=function(a,b,c,d,g){a=google.logUrl(a,b,c,d,g);if(\"\"!=a){b=new Image;var e=google.lc,f=google.li;e[f]=b;b.onerror=b.onload=b.onabort=function(){delete e[f]};window.google&&window.google.vel&&window.google.vel.lu&&window.google.vel.lu(a);b.src=a;google.li=f+1}};google.logUrl=function(a,b,c,d,g){var e=\"\",f=google.ls||\"\";c||-1!=b.search(\"&ei=\")||(e=\"&ei=\"+google.getEI(d),-1==b.search(\"&lei=\")&&(d=google.getLEI(d))&&(e+=\"&lei=\"+d));a=c||\"/\"+(g||\"gen_204\")+\"?atyp=i&ct=\"+a+\"&cad=\"+b+e+f+\"&zx=\"+google.time();/^http:/i.test(a)&&google.https()&&(google.ml(Error(\"a\"),!1,{src:a,glmm:1}),a=\"\");return a};google.y={};google.x=function(a,b){google.y[a.id]=[a,b];return!1};google.lq=[];google.load=function(a,b,c){google.lq.push([[a],b,c])};google.loadAll=function(a,b){google.lq.push([a,b])};}).call(this);var a=window.location,b=a.href.indexOf(\"#\");if(0<=b){var c=a.href.substring(b+1);/(^|&)q=/.test(c)&&-1==c.indexOf(\"#\")&&a.replace(\"/search?\"+c.replace(/(^|&)fp=[^&]*/g,\"\")+\"&cad=h\")};</script><style>#gbar,#guser{font-size:13px;padding-top:1px !important;}#gbar{height:22px}#guser{padding-bottom:7px !important;text-align:right}.gbh,.gbd{border-top:1px solid #c9d7f1;font-size:1px}.gbh{height:0;position:absolute;top:24px;width:100%}@media all{.gb1{height:22px;margin-right:.5em;vertical-align:top}#gbar{float:left}}a.gb1,a.gb4{text-decoration:underline !important}a.gb1,a.gb4{color:#00c !important}.gbi .gb4{color:#dd8e27 !important}.gbf .gb4{color:#900 !important}\n", |
| "</style><style>body,td,a,p,.h{font-family:arial,sans-serif}body{margin:0;overflow-y:scroll}#gog{padding:3px 8px 0}td{line-height:.8em}.gac_m td{line-height:17px}form{margin-bottom:20px}.h{color:#36c}.q{color:#00c}.ts td{padding:0}.ts{border-collapse:collapse}em{font-weight:bold;font-style:normal}.lst{height:25px;width:496px}.gsfi,.lst{font:18px arial,sans-serif}.gsfs{font:17px arial,sans-serif}.ds{display:inline-box;display:inline-block;margin:3px 0 4px;margin-left:4px}input{font-family:inherit}a.gb1,a.gb2,a.gb3,a.gb4{color:#11c !important}body{background:#fff;color:black}a{color:#11c;text-decoration:none}a:hover,a:active{text-decoration:underline}.fl a{color:#36c}a:visited{color:#551a8b}a.gb1,a.gb4{text-decoration:underline}a.gb3:hover{text-decoration:none}#ghead a.gb2:hover{color:#fff !important}.sblc{padding-top:5px}.sblc a{display:block;margin:2px 0;margin-left:13px;font-size:11px}.lsbb{background:#eee;border:solid 1px;border-color:#ccc #999 #999 #ccc;height:30px}.lsbb{display:block}.ftl,#fll a{display:inline-block;margin:0 12px}.lsb{background:url(/images/nav_logo229.png) 0 -261px repeat-x;border:none;color:#000;cursor:pointer;height:30px;margin:0;outline:0;font:15px arial,sans-serif;vertical-align:top}.lsb:active{background:#ccc}.lst:focus{outline:none}</style><script></script><link href=\"/images/branding/product/ico/googleg_lodp.ico\" rel=\"shortcut icon\"></head><body bgcolor=\"#fff\"><script>(function(){var src='/images/nav_logo229.png';var iesg=false;document.body.onload = function(){window.n && window.n();if (document.images){new Image().src=src;}\n", |
| "if (!iesg){document.f&&document.f.q.focus();document.gbqf&&document.gbqf.q.focus();}\n", |
| "}\n", |
| "})();</script><div id=\"mngb\"> <div id=gbar><nobr><b class=gb1>Recherche</b> <a class=gb1 href=\"https://www.google.fr/imghp?hl=fr&tab=wi\">Images</a> <a class=gb1 href=\"https://maps.google.fr/maps?hl=fr&tab=wl\">Maps</a> <a class=gb1 href=\"https://play.google.com/?hl=fr&tab=w8\">Play</a> <a class=gb1 href=\"https://www.youtube.com/?gl=FR&tab=w1\">YouTube</a> <a class=gb1 href=\"https://news.google.fr/nwshp?hl=fr&tab=wn\">Actualits</a> <a class=gb1 href=\"https://mail.google.com/mail/?tab=wm\">Gmail</a> <a class=gb1 href=\"https://drive.google.com/?tab=wo\">Drive</a> <a class=gb1 style=\"text-decoration:none\" href=\"https://www.google.fr/intl/fr/options/\"><u>Plus</u> »</a></nobr></div><div id=guser width=100%><nobr><span id=gbn class=gbi></span><span id=gbf class=gbf></span><span id=gbe></span><a href=\"http://www.google.fr/history/optout?hl=fr\" class=gb4>Historique Web</a> | <a href=\"/preferences?hl=fr\" class=gb4>Paramtres</a> | <a target=_top id=gb_70 href=\"https://accounts.google.com/ServiceLogin?hl=fr&passive=true&continue=https://www.google.fr/\" class=gb4>Connexion</a></nobr></div><div class=gbh style=left:0></div><div class=gbh style=right:0></div> </div><center><br clear=\"all\" id=\"lgpd\"><div id=\"lga\"><div style=\"padding:28px 0 3px\"><div style=\"height:110px;width:276px;background:url(/images/branding/googlelogo/1x/googlelogo_white_background_color_272x92dp.png) no-repeat\" title=\"Google\" align=\"left\" id=\"hplogo\" onload=\"window.lol&&lol()\"><div style=\"color:#777;font-size:16px;font-weight:bold;position:relative;top:70px;left:218px\" nowrap=\"\">France</div></div></div><br></div><form action=\"/search\" name=\"f\"><table cellpadding=\"0\" cellspacing=\"0\"><tr valign=\"top\"><td width=\"25%\"> </td><td align=\"center\" nowrap=\"\"><input name=\"ie\" value=\"ISO-8859-1\" type=\"hidden\"><input value=\"fr\" name=\"hl\" type=\"hidden\"><input name=\"source\" type=\"hidden\" value=\"hp\"><input name=\"biw\" type=\"hidden\"><input name=\"bih\" type=\"hidden\"><div class=\"ds\" style=\"height:32px;margin:4px 0\"><input style=\"color:#000;margin:0;padding:5px 8px 0 6px;vertical-align:top\" autocomplete=\"off\" class=\"lst\" value=\"\" title=\"Recherche Google\" maxlength=\"2048\" name=\"q\" size=\"57\"></div><br style=\"line-height:0\"><span class=\"ds\"><span class=\"lsbb\"><input class=\"lsb\" value=\"Recherche Google\" name=\"btnG\" type=\"submit\"></span></span><span class=\"ds\"><span class=\"lsbb\"><input class=\"lsb\" value=\"J'ai de la chance\" name=\"btnI\" onclick=\"if(this.form.q.value)this.checked=1; else top.location='/doodles/'\" type=\"submit\"></span></span></td><td class=\"fl sblc\" align=\"left\" nowrap=\"\" width=\"25%\"><a href=\"/advanced_search?hl=fr&authuser=0\">Recherche avance</a><a href=\"/language_tools?hl=fr&authuser=0\">Outils linguistiques</a></td></tr></table><input id=\"gbv\" name=\"gbv\" type=\"hidden\" value=\"1\"></form><div id=\"gac_scont\"></div><div style=\"font-size:83%;min-height:3.5em\"><br></div><span id=\"footer\"><div style=\"font-size:10pt\"><div style=\"margin:19px auto;text-align:center\" id=\"fll\"><a href=\"/intl/fr/ads/\">Solutions publicitaires</a><a href=\"/services/\">Solutions d'entreprise</a><a href=\"https://plus.google.com/106901486880272202822\" rel=\"publisher\">+Google</a><a href=\"/intl/fr/about.html\"> propos de Google</a><a href=\"https://www.google.fr/setprefdomain?prefdom=US&sig=__OHnMTECkk1MGvXSKgG4G1AmHq5I%3D\" id=\"fehl\">Google.com</a></div></div><p style=\"color:#767676;font-size:8pt\">© 2016 - <a href=\"/intl/fr/policies/privacy/\">Confidentialit</a> - <a href=\"/intl/fr/policies/terms/\">Conditions</a></p></span></center><script>(function(){window.google.cdo={height:0,width:0};(function(){var a=window.innerWidth,b=window.innerHeight;if(!a||!b)var c=window.document,d=\"CSS1Compat\"==c.compatMode?c.documentElement:c.body,a=d.clientWidth,b=d.clientHeight;a&&b&&(a!=google.cdo.width||b!=google.cdo.height)&&google.log(\"\",\"\",\"/client_204?&atyp=i&biw=\"+a+\"&bih=\"+b+\"&ei=\"+google.kEI);}).call(this);})();</script><div id=\"xjsd\"></div><div id=\"xjsi\"><script>(function(){function c(b){window.setTimeout(function(){var a=document.createElement(\"script\");a.src=b;document.getElementById(\"xjsd\").appendChild(a)},0)}google.dljp=function(b,a){google.xjsu=b;c(a)};google.dlj=c;}).call(this);(function(){window.google.xjsrm=[];})();if(google.y)google.y.first=[];if(!google.xjs){window._=window._||{};window._._DumpException=function(e){throw e};if(google.timers&&google.timers.load.t){google.timers.load.t.xjsls=new Date().getTime();}google.dljp('/xjs/_/js/k\\x3dxjs.hp.en_US.WN3XpSz-BG8.O/m\\x3dsb_he,d/rt\\x3dj/d\\x3d1/t\\x3dzcms/rs\\x3dACT90oGvdHa7TL2W_IQX1s5BPxYIHeUvhQ','/xjs/_/js/k\\x3dxjs.hp.en_US.WN3XpSz-BG8.O/m\\x3dsb_he,d/rt\\x3dj/d\\x3d1/t\\x3dzcms/rs\\x3dACT90oGvdHa7TL2W_IQX1s5BPxYIHeUvhQ');google.xjs=1;}google.pmc={\"sb_he\":{\"agen\":true,\"cgen\":true,\"client\":\"heirloom-hp\",\"dh\":true,\"dhqt\":true,\"ds\":\"\",\"fl\":true,\"host\":\"google.fr\",\"isbh\":28,\"jam\":0,\"jsonp\":true,\"lm\":true,\"msgs\":{\"cibl\":\"Effacer la recherche\",\"dym\":\"Essayez avec cette orthographe :\",\"lcky\":\"J\\u0026#39;ai de la chance\",\"lml\":\"En savoir plus\",\"oskt\":\"Outils de saisie\",\"psrc\":\"Cette suggestion a bien t supprime de votre \\u003Ca href=\\\"/history\\\"\\u003Ehistorique Web\\u003C/a\\u003E.\",\"psrl\":\"Supprimer\",\"sbit\":\"Recherche par image\",\"srch\":\"Recherche Google\"},\"nds\":true,\"ovr\":{},\"pq\":\"\",\"refpd\":true,\"rfs\":[],\"scd\":10,\"sce\":5,\"stok\":\"v9hn9ENPV2Cq1VDAu6ud56TzkyQ\"},\"d\":{}};google.y.first.push(function(){if(google.med){google.med('init');google.initHistory();google.med('history');}});if(google.j&&google.j.en&&google.j.xi){window.setTimeout(google.j.xi,0);}\n", |
| "</script></div></body></html>" |
| ], |
| "metadata": {}, |
| "output_type": "pyout", |
| "prompt_number": 119, |
| "text": [ |
| "<IPython.core.display.HTML at 0x7f26f59bf590>" |
| ] |
| } |
| ], |
| "prompt_number": 119 |
| }, |
| { |
| "cell_type": "heading", |
| "level": 2, |
| "metadata": {}, |
| "source": [ |
| "Throwing a query!" |
| ] |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "Let's now query Google! For this, we will build a new query without the helpers, to explore the low-level parts of the HTTP/2 Scapy module.\n", |
| "First, we will get the cookie that we were given. For this, we will search for the set-cookie header that we received." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "collapsed": false, |
| "input": [ |
| "from io import BytesIO\n", |
| "sio = BytesIO(stream_txt[1])\n", |
| "cookie = [val[len('set-cookie: '):].strip() for val in sio if val.startswith('set-cookie: ')]\n", |
| "print(cookie)" |
| ], |
| "language": "python", |
| "metadata": {}, |
| "outputs": [ |
| { |
| "output_type": "stream", |
| "stream": "stdout", |
| "text": [ |
| "['NID=91=Wt1Jkm3Eretgg-hJ32fkj7kSSOLTc8tfEEIP5F2QTzHqbsXcCFve-QoN1oZvkGEqqqAWklc2wlj97YDkMnGXQUw20iCYMc3FD6X-KVuK1wdFURafcqQMQZ8e-F14YUfn; expires=Wed, 14-Jun-2017 17:34:51 GMT; path=/; domain=.google.fr; HttpOnly']\n" |
| ] |
| } |
| ], |
| "prompt_number": 120 |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "Now, we build the query by hand. Let's create the Header frame, so that we can later stuff all the header \"lines\" in it. This is a new stream, and we already used the stream ids 1 and 3, so we will use the stream id 5, which is the next available. We will set the \"End Stream\" and \"End Headers\" flags. The End Stream flag means that they are no more frames (except header frames...) after this one in this stream. The End Headers flag means that there are no Continuation frames after this frame. Continuation frames can be used to add more headers than one could fit in previous H2HeaderFrame and Continuation frames...\n", |
| "\n", |
| "Our frame will contain little headers and we set very large limits for this tutorial, so we will skip all the checks, but they should be done! The helpers does them, by the way." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "collapsed": false, |
| "input": [ |
| "hdrs_frm = h2.H2Frame(flags={'ES', 'EH'}, stream_id=5)/h2.H2HeadersFrame()" |
| ], |
| "language": "python", |
| "metadata": {}, |
| "outputs": [], |
| "prompt_number": 121 |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "Then, we have to specify the pseudo headers. These headers are the equivalent of \"GET / HTTP/1.1\\nHost: www.google.fr\" of old.\n", |
| "For this, we specify that this is a GET query over HTTPS, along with the path, and the \"authority\", which is the new \"Host:\".The GET Method and the HTTPS scheme are part of the static HPack table, according to RFC7541. Let's get the index of these headers and put them into HPackIndexedHdr packets." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "collapsed": false, |
| "input": [ |
| "get_hdr_idx = tblhdr.get_idx_by_name_and_value(':method', 'GET')\n", |
| "get_hdr = h2.HPackIndexedHdr(index = get_hdr_idx)\n", |
| "get_hdr.show()\n", |
| "hdrs_frm.payload.hdrs.append(get_hdr)\n", |
| "\n", |
| "https_hdr_idx = tblhdr.get_idx_by_name_and_value(':scheme', 'https')\n", |
| "https_hdr = h2.HPackIndexedHdr(index = https_hdr_idx)\n", |
| "https_hdr.show()\n", |
| "hdrs_frm.payload.hdrs.append(https_hdr)" |
| ], |
| "language": "python", |
| "metadata": {}, |
| "outputs": [ |
| { |
| "output_type": "stream", |
| "stream": "stdout", |
| "text": [ |
| "###[ HPack Indexed Header Field ]### \n", |
| " magic = 1\n", |
| " index = 2\n", |
| "\n", |
| "###[ HPack Indexed Header Field ]### \n", |
| " magic = 1\n", |
| " index = 7\n", |
| "\n" |
| ] |
| } |
| ], |
| "prompt_number": 122 |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "For the path, we will use \"/search?q=scapy\". The path might be a sensitive value, since it may contain values that we might not want to leak via side-channel attacks (here the query topic). For this reason, we will specify the path using a HPackLitHdrFldWithoutIndexing, which means that we don't want indexing. We also need to set the never_index bit, so that if there are intermediaries between us and the HTTP server, they will not try to compress this header.\n", |
| "Before setting this header, though, we have to choose whether we want to compress the *string* \"/search?q=scapy\" using Huffman encoding. Let's compress it and compare its wire-length with the uncompressed version." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "collapsed": false, |
| "input": [ |
| "z_str = h2.HPackZString('/search?q=scapy')\n", |
| "unz_str = h2.HPackLiteralString('/search?q=scapy')\n", |
| "\n", |
| "print(len(str(z_str)), len(str(unz_str)))" |
| ], |
| "language": "python", |
| "metadata": {}, |
| "outputs": [ |
| { |
| "output_type": "stream", |
| "stream": "stdout", |
| "text": [ |
| "(12, 15)\n" |
| ] |
| } |
| ], |
| "prompt_number": 123 |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "So the compressed version is smaller. Let's use it, since HTTP/2 is all about performances and compression. \n", |
| "\n", |
| "\":path\" is the pseudo-header to define the query path. While we don't want to compress the *value* of the query path, the name can be compressed. As it happens, the \":path\" header name is in the static header table. For this reason, we will search of its index, and then build the header." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "collapsed": false, |
| "input": [ |
| "path_hdr_idx = tblhdr.get_idx_by_name(':path')\n", |
| "path_str = h2.HPackHdrString(data = z_str)\n", |
| "path_hdr = h2.HPackLitHdrFldWithoutIndexing(\n", |
| " never_index=1, \n", |
| " index=path_hdr_idx,\n", |
| " hdr_value=path_str\n", |
| ")\n", |
| "path_hdr.show()\n", |
| "hdrs_frm.payload.hdrs.append(path_hdr)" |
| ], |
| "language": "python", |
| "metadata": {}, |
| "outputs": [ |
| { |
| "output_type": "stream", |
| "stream": "stdout", |
| "text": [ |
| "###[ HPack Literal Header Without Indexing (or Never Indexing) ]### \n", |
| " magic = 0\n", |
| " never_index= Never Index\n", |
| " index = 4\n", |
| " \\hdr_value \\\n", |
| " |###[ HPack Header String ]### \n", |
| " | type = None\n", |
| " | len = None\n", |
| " | data = 'HPackZString(/search?q=scapy)'\n", |
| "\n" |
| ] |
| } |
| ], |
| "prompt_number": 124 |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "The final missing pseudo-header is the new \"Host\" header, called \":authority\". \":authority\" is in the static header table, so we *could* use it. As it happens, we can do better because we previously indexed \":authority\" *with the value* \"www.google.fr\". Let's search for the index of this entry in the dynamic table. With luck, the server header table size is large enough so that the value is still inside it." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "collapsed": false, |
| "input": [ |
| "host_hdr_idx = tblhdr.get_idx_by_name_and_value(':authority', dn)\n", |
| "assert(not isinstance(host_hdr_idx, type(None)))\n", |
| "print(host_hdr_idx)" |
| ], |
| "language": "python", |
| "metadata": {}, |
| "outputs": [ |
| { |
| "output_type": "stream", |
| "stream": "stdout", |
| "text": [ |
| "66\n" |
| ] |
| } |
| ], |
| "prompt_number": 125 |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "So, the \":authority www.google.fr\" header is still in the dynamic table. Let's add it to the header list." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "collapsed": false, |
| "input": [ |
| "host_hdr = h2.HPackIndexedHdr(index=host_hdr_idx)\n", |
| "host_hdr.show()\n", |
| "hdrs_frm.payload.hdrs.append(host_hdr)" |
| ], |
| "language": "python", |
| "metadata": {}, |
| "outputs": [ |
| { |
| "output_type": "stream", |
| "stream": "stdout", |
| "text": [ |
| "###[ HPack Indexed Header Field ]### \n", |
| " magic = 1\n", |
| " index = 66\n", |
| "\n" |
| ] |
| } |
| ], |
| "prompt_number": 126 |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "Now that we added all the pseudo-headers, let's add the \"real\" ones. The compression header is in the static table, so we just need to look it up." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "collapsed": false, |
| "input": [ |
| "z_hdr_idx = tblhdr.get_idx_by_name_and_value('accept-encoding', 'gzip, deflate')\n", |
| "z_hdr = h2.HPackIndexedHdr(index = z_hdr_idx)\n", |
| "z_hdr.show()\n", |
| "hdrs_frm.payload.hdrs.append(z_hdr)" |
| ], |
| "language": "python", |
| "metadata": {}, |
| "outputs": [ |
| { |
| "output_type": "stream", |
| "stream": "stdout", |
| "text": [ |
| "###[ HPack Indexed Header Field ]### \n", |
| " magic = 1\n", |
| " index = 16\n", |
| "\n" |
| ] |
| } |
| ], |
| "prompt_number": 127 |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "We also need to create the header for our new cookie. Cookie are sensitive. We don't want it to be indexed and we don't want any intermediate to index it. As such, we will use a HPackLitHdrFldWithoutIndexing and with the never_index bit set, here as well. The name \"cookie\", though, happens to be in the RFC7541 static headers table, so we will use it." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "collapsed": false, |
| "input": [ |
| "cookie_hdr_idx = tblhdr.get_idx_by_name('cookie')\n", |
| "cookie_str = h2.HPackHdrString(data = h2.HPackZString(cookie[0]))\n", |
| "cookie_hdr = h2.HPackLitHdrFldWithoutIndexing(\n", |
| " never_index = 1,\n", |
| " index = cookie_hdr_idx,\n", |
| " hdr_value = cookie_str\n", |
| ")\n", |
| "cookie_hdr.show()\n", |
| "hdrs_frm.payload.hdrs.append(cookie_hdr)" |
| ], |
| "language": "python", |
| "metadata": {}, |
| "outputs": [ |
| { |
| "output_type": "stream", |
| "stream": "stdout", |
| "text": [ |
| "###[ HPack Literal Header Without Indexing (or Never Indexing) ]### \n", |
| " magic = 0\n", |
| " never_index= Never Index\n", |
| " index = 32\n", |
| " \\hdr_value \\\n", |
| " |###[ HPack Header String ]### \n", |
| " | type = None\n", |
| " | len = None\n", |
| " | data = 'HPackZString(NID=91=Wt1Jkm3Eretgg-hJ32fkj7kSSOLTc8tfEEIP5F2QTzHqbsXcCFve-QoN1oZvkGEqqqAWklc2wlj97YDkMnGXQUw20iCYMc3FD6X-KVuK1wdFURafcqQMQZ8e-F14YUfn; expires=Wed, 14-Jun-2017 17:34:51 GMT; path=/; domain=.google.fr; HttpOnly)'\n", |
| "\n" |
| ] |
| } |
| ], |
| "prompt_number": 128 |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "Also, we need to specify that we read French. Once more, the \"accept-language\" header is in the HPack static table, but \"fr-Fr\" might not be. Let's see if we did index that earlier." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "collapsed": false, |
| "input": [ |
| "acceptlang_hdr_idx = tblhdr.get_idx_by_name_and_value('accept-language', 'fr-FR')\n", |
| "print(acceptlang_hdr_idx)" |
| ], |
| "language": "python", |
| "metadata": {}, |
| "outputs": [ |
| { |
| "output_type": "stream", |
| "stream": "stdout", |
| "text": [ |
| "65\n" |
| ] |
| } |
| ], |
| "prompt_number": 129 |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "Excellent! This is an entry of the dynamic table and we can use it in this session! Let's use it with an HPackIndexedHdr packet." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "collapsed": false, |
| "input": [ |
| "acceptlang_hdr = h2.HPackIndexedHdr(index = acceptlang_hdr_idx)\n", |
| "acceptlang_hdr.show()\n", |
| "hdrs_frm.payload.hdrs.append(acceptlang_hdr)" |
| ], |
| "language": "python", |
| "metadata": {}, |
| "outputs": [ |
| { |
| "output_type": "stream", |
| "stream": "stdout", |
| "text": [ |
| "###[ HPack Indexed Header Field ]### \n", |
| " magic = 1\n", |
| " index = 65\n", |
| "\n" |
| ] |
| } |
| ], |
| "prompt_number": 130 |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "Let's do the same thing quickly for the other headers." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "collapsed": false, |
| "input": [ |
| "accept_hdr_idx = tblhdr.get_idx_by_name_and_value('accept', 'text/html')\n", |
| "accept_hdr = h2.HPackIndexedHdr(index = accept_hdr_idx)\n", |
| "accept_hdr.show()\n", |
| "hdrs_frm.payload.hdrs.append(accept_hdr)\n", |
| "ua_hdr_idx = tblhdr.get_idx_by_name_and_value('user-agent', 'Scapy HTTP/2 Module')\n", |
| "ua_hdr = h2.HPackIndexedHdr(index = ua_hdr_idx)\n", |
| "ua_hdr.show()\n", |
| "hdrs_frm.payload.hdrs.append(ua_hdr)" |
| ], |
| "language": "python", |
| "metadata": {}, |
| "outputs": [ |
| { |
| "output_type": "stream", |
| "stream": "stdout", |
| "text": [ |
| "###[ HPack Indexed Header Field ]### \n", |
| " magic = 1\n", |
| " index = 64\n", |
| "\n", |
| "###[ HPack Indexed Header Field ]### \n", |
| " magic = 1\n", |
| " index = 63\n", |
| "\n" |
| ] |
| } |
| ], |
| "prompt_number": 131 |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "Now, we forget a piece in our previous queries regarding privacy: I want to add a Do Not Track header (https://tools.ietf.org/html/draft-mayer-do-not-track-00). Let's add this header into every subsequent queries. For this reason, I want to have it indexed. It is worth noting that the \"DNT\" header is not part of the HPack static table (how curious?). Finally, the value of this header is just 1. We might actually save a few bits by NOT compressing this value." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "collapsed": false, |
| "input": [ |
| "dnt_name_str = h2.HPackLiteralString('dnt')\n", |
| "dnt_val_str = h2.HPackLiteralString('1')\n", |
| "dnt_name = h2.HPackHdrString(data = dnt_name_str)\n", |
| "dnt_value = h2.HPackHdrString(data = dnt_val_str)\n", |
| "dnt_hdr = h2.HPackLitHdrFldWithIncrIndexing(\n", |
| " hdr_name = dnt_name,\n", |
| " hdr_value = dnt_value\n", |
| ")\n", |
| "dnt_hdr.show()\n", |
| "hdrs_frm.payload.hdrs.append(dnt_hdr)" |
| ], |
| "language": "python", |
| "metadata": {}, |
| "outputs": [ |
| { |
| "output_type": "stream", |
| "stream": "stdout", |
| "text": [ |
| "###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " magic = 1\n", |
| " index = 0\n", |
| " \\hdr_name \\\n", |
| " |###[ HPack Header String ]### \n", |
| " | type = None\n", |
| " | len = None\n", |
| " | data = 'HPackLiteralString(dnt)'\n", |
| " \\hdr_value \\\n", |
| " |###[ HPack Header String ]### \n", |
| " | type = None\n", |
| " | len = None\n", |
| " | data = 'HPackLiteralString(1)'\n", |
| "\n" |
| ] |
| } |
| ], |
| "prompt_number": 132 |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "We are not done yet with the DNT header, though. We also need to insert it into the HPack Dynamic table, so that later lookups will find it." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "collapsed": false, |
| "input": [ |
| "tblhdr.register(dnt_hdr)" |
| ], |
| "language": "python", |
| "metadata": {}, |
| "outputs": [], |
| "prompt_number": 133 |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "Phew! We made it! Let's see what we got so far." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "collapsed": false, |
| "input": [ |
| "hdrs_frm.show2()" |
| ], |
| "language": "python", |
| "metadata": {}, |
| "outputs": [ |
| { |
| "output_type": "stream", |
| "stream": "stdout", |
| "text": [ |
| "###[ HTTP/2 Frame ]### \n", |
| " len = 0xc5\n", |
| " type = HdrsFrm\n", |
| " flags = set(['End Stream (ES)', 'End Headers (EH)'])\n", |
| " reserved = 0L\n", |
| " stream_id = 5L\n", |
| "###[ HTTP/2 Headers Frame ]### \n", |
| " \\hdrs \\\n", |
| " |###[ HPack Indexed Header Field ]### \n", |
| " | magic = 1\n", |
| " | index = 2\n", |
| " |###[ HPack Indexed Header Field ]### \n", |
| " | magic = 1\n", |
| " | index = 7\n", |
| " |###[ HPack Literal Header Without Indexing (or Never Indexing) ]### \n", |
| " | magic = 0\n", |
| " | never_index= Never Index\n", |
| " | index = 4\n", |
| " | \\hdr_value \\\n", |
| " | |###[ HPack Header String ]### \n", |
| " | | type = Compressed\n", |
| " | | len = 12\n", |
| " | | data = 'HPackZString(/search?q=scapy)'\n", |
| " |###[ HPack Indexed Header Field ]### \n", |
| " | magic = 1\n", |
| " | index = 66\n", |
| " |###[ HPack Indexed Header Field ]### \n", |
| " | magic = 1\n", |
| " | index = 16\n", |
| " |###[ HPack Literal Header Without Indexing (or Never Indexing) ]### \n", |
| " | magic = 0\n", |
| " | never_index= Never Index\n", |
| " | index = 32\n", |
| " | \\hdr_value \\\n", |
| " | |###[ HPack Header String ]### \n", |
| " | | type = Compressed\n", |
| " | | len = 165\n", |
| " | | data = 'HPackZString(NID=91=Wt1Jkm3Eretgg-hJ32fkj7kSSOLTc8tfEEIP5F2QTzHqbsXcCFve-QoN1oZvkGEqqqAWklc2wlj97YDkMnGXQUw20iCYMc3FD6X-KVuK1wdFURafcqQMQZ8e-F14YUfn; expires=Wed, 14-Jun-2017 17:34:51 GMT; path=/; domain=.google.fr; HttpOnly)'\n", |
| " |###[ HPack Indexed Header Field ]### \n", |
| " | magic = 1\n", |
| " | index = 65\n", |
| " |###[ HPack Indexed Header Field ]### \n", |
| " | magic = 1\n", |
| " | index = 64\n", |
| " |###[ HPack Indexed Header Field ]### \n", |
| " | magic = 1\n", |
| " | index = 63\n", |
| " |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | magic = 1\n", |
| " | index = 0\n", |
| " | \\hdr_name \\\n", |
| " | |###[ HPack Header String ]### \n", |
| " | | type = Literal\n", |
| " | | len = 3\n", |
| " | | data = 'HPackLiteralString(dnt)'\n", |
| " | \\hdr_value \\\n", |
| " | |###[ HPack Header String ]### \n", |
| " | | type = Literal\n", |
| " | | len = 1\n", |
| " | | data = 'HPackLiteralString(1)'\n", |
| "\n" |
| ] |
| } |
| ], |
| "prompt_number": 134 |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "Oh! Just for comparison, we would have got about the same result using the helpers (modulo some safety checks that we did not do here...)." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "collapsed": false, |
| "input": [ |
| "tblhdr.parse_txt_hdrs(\n", |
| " ''':method GET\n", |
| ":scheme https\n", |
| ":path /search?q=scapy\n", |
| ":authority www.google.fr\n", |
| "accept-encoding: gzip, deflate\n", |
| "cookie: {}\n", |
| "accept-language: fr-FR\n", |
| "accept: text/html\n", |
| "user-agent: Scapy HTTP/2 Module\n", |
| "dnt: 1\n", |
| "'''.format(cookie),\n", |
| " stream_id=5,\n", |
| " max_frm_sz=srv_max_frm_sz,\n", |
| " max_hdr_lst_sz=srv_max_hdr_lst_sz,\n", |
| " is_sensitive=lambda hdr_name, hdr_val: hdr_name in ['cookie', ':path'],\n", |
| " should_index=lambda x: x in [\n", |
| " 'x-requested-with', \n", |
| " 'user-agent', \n", |
| " 'accept-language',\n", |
| " 'host',\n", |
| " 'accept',\n", |
| " ':authority',\n", |
| " 'dnt'\n", |
| " ]\n", |
| ").show2()" |
| ], |
| "language": "python", |
| "metadata": {}, |
| "outputs": [ |
| { |
| "output_type": "stream", |
| "stream": "stdout", |
| "text": [ |
| "###[ HTTP/2 Frame Sequence ]### \n", |
| " \\frames \\\n", |
| " |###[ HTTP/2 Frame ]### \n", |
| " | len = 0xdc\n", |
| " | type = HdrsFrm\n", |
| " | flags = set(['End Stream (ES)', 'End Headers (EH)'])\n", |
| " | reserved = 0L\n", |
| " | stream_id = 5L\n", |
| " |###[ HTTP/2 Headers Frame ]### \n", |
| " | \\hdrs \\\n", |
| " | |###[ HPack Indexed Header Field ]### \n", |
| " | | magic = 1\n", |
| " | | index = 2\n", |
| " | |###[ HPack Literal Header Without Indexing (or Never Indexing) ]### \n", |
| " | | magic = 0\n", |
| " | | never_index= Never Index\n", |
| " | | index = 4\n", |
| " | | \\hdr_value \\\n", |
| " | | |###[ HPack Header String ]### \n", |
| " | | | type = Compressed\n", |
| " | | | len = 30\n", |
| " | | | data = 'HPackZString(/?gfe_rd=cr&ei=2B1IWOeIDujt8weIvIH4BQ)'\n", |
| " | |###[ HPack Indexed Header Field ]### \n", |
| " | | magic = 1\n", |
| " | | index = 67\n", |
| " | |###[ HPack Indexed Header Field ]### \n", |
| " | | magic = 1\n", |
| " | | index = 7\n", |
| " | |###[ HPack Indexed Header Field ]### \n", |
| " | | magic = 1\n", |
| " | | index = 16\n", |
| " | |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | | magic = 1\n", |
| " | | index = 17\n", |
| " | | \\hdr_value \\\n", |
| " | | |###[ HPack Header String ]### \n", |
| " | | | type = Compressed\n", |
| " | | | len = 4\n", |
| " | | | data = 'HPackZString(en-US)'\n", |
| " | |###[ HPack Indexed Header Field ]### \n", |
| " | | magic = 1\n", |
| " | | index = 66\n", |
| " | |###[ HPack Indexed Header Field ]### \n", |
| " | | magic = 1\n", |
| " | | index = 65\n", |
| " | |###[ HPack Indexed Header Field ]### \n", |
| " | | magic = 1\n", |
| " | | index = 63\n", |
| " | |###[ HPack Literal Header Without Indexing (or Never Indexing) ]### \n", |
| " | | magic = 0\n", |
| " | | never_index= Never Index\n", |
| " | | index = 32\n", |
| " | | \\hdr_value \\\n", |
| " | | |###[ HPack Header String ]### \n", |
| " | | | type = Compressed\n", |
| " | | | len = 171\n", |
| " | | | data = \"HPackZString(['NID=91=Wt1Jkm3Eretgg-hJ32fkj7kSSOLTc8tfEEIP5F2QTzHqbsXcCFve-QoN1oZvkGEqqqAWklc2wlj97YDkMnGXQUw20iCYMc3FD6X-KVuK1wdFURafcqQMQZ8e-F14YUfn; expires=Wed, 14-Jun-2017 17:34:51 GMT; path=/; domain=.google.fr; HttpOnly'])\"\n", |
| "\n" |
| ] |
| } |
| ], |
| "prompt_number": 135 |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "Let's now send our query to Google and read the answer!" |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "collapsed": false, |
| "input": [ |
| "srv_global_window -= len(str(hdrs_frm))\n", |
| "assert(srv_global_window >= 0)\n", |
| "ss.send(hdrs_frm)\n", |
| "\n", |
| "h2seq = h2.H2Seq()\n", |
| "\n", |
| "new_frame = None\n", |
| "while isinstance(new_frame, type(None)) or 'ES' not in new_frame.flags:\n", |
| " # As previously, if we receive a ping, we ackownledge it.\n", |
| " if not isinstance(new_frame, type(None)) and new_frame.stream_id == 0:\n", |
| " if new_frame.type == h2.H2PingFrame.type_id:\n", |
| " new_frame.flags.add('A')\n", |
| " srv_global_window -= len(str(new_frame))\n", |
| " assert(srv_global_window >= 0)\n", |
| " ss.send(new_frame)\n", |
| " \n", |
| " assert new_frame.type != h2.H2ResetFrame.type_id \\\n", |
| " and new_frame.type != h2.H2GoAwayFrame.type_id, \\\n", |
| " \"Error received; something is not right!\"\n", |
| " \n", |
| " try:\n", |
| " new_frame = ss.recv()\n", |
| " new_frame.show()\n", |
| " if new_frame.stream_id == 5:\n", |
| " h2seq.frames.append(new_frame)\n", |
| " except:\n", |
| " import time\n", |
| " time.sleep(1)\n", |
| " new_frame = None" |
| ], |
| "language": "python", |
| "metadata": {}, |
| "outputs": [ |
| { |
| "output_type": "stream", |
| "stream": "stdout", |
| "text": [ |
| "###[ HTTP/2 Frame ]### \n", |
| " len = 0x8\n", |
| " type = PingFrm\n", |
| " flags = set([])\n", |
| " reserved = 0L\n", |
| " stream_id = 0L\n", |
| "###[ HTTP/2 Ping Frame ]### \n", |
| " opaque = 2\n", |
| "\n", |
| "###[ HTTP/2 Frame ]### \n", |
| " len = 0x8\n", |
| " type = PingFrm\n", |
| " flags = set(['ACK (A)'])\n", |
| " reserved = 0L\n", |
| " stream_id = 0L\n", |
| "###[ HTTP/2 Ping Frame ]### \n", |
| " opaque = 2\n", |
| "\n", |
| "###[ HTTP/2 Frame ]### \n", |
| " len = 0x8\n", |
| " type = PingFrm\n", |
| " flags = set(['ACK (A)'])\n", |
| " reserved = 0L\n", |
| " stream_id = 0L\n", |
| "###[ HTTP/2 Ping Frame ]### \n", |
| " opaque = 2\n", |
| "\n", |
| "###[ HTTP/2 Frame ]### \n", |
| " len = 0x8\n", |
| " type = PingFrm\n", |
| " flags = set(['ACK (A)'])\n", |
| " reserved = 0L\n", |
| " stream_id = 0L\n", |
| "###[ HTTP/2 Ping Frame ]### \n", |
| " opaque = 2\n", |
| "\n", |
| "###[ HTTP/2 Frame ]### \n", |
| " len = 0x21\n", |
| " type = HdrsFrm\n", |
| " flags = set(['End Headers (EH)'])\n", |
| " reserved = 0L\n", |
| " stream_id = 5L\n", |
| "###[ HTTP/2 Headers Frame ]### \n", |
| " \\hdrs \\\n", |
| " |###[ HPack Indexed Header Field ]### \n", |
| " | magic = 1\n", |
| " | index = 8\n", |
| " |###[ HPack Literal Header With Incremental Indexing ]### \n", |
| " | magic = 1\n", |
| " | index = 33\n", |
| " | \\hdr_value \\\n", |
| " | |###[ HPack Header String ]### \n", |
| " | | type = Compressed\n", |
| " | | len = 22\n", |
| " | | data = 'HPackZString(Tue, 13 Dec 2016 17:36:19 GMT)'\n", |
| " |###[ HPack Indexed Header Field ]### \n", |
| " | magic = 1\n", |
| " | index = 70\n", |
| " |###[ HPack Indexed Header Field ]### \n", |
| " | magic = 1\n", |
| " | index = 69\n", |
| " |###[ HPack Indexed Header Field ]### \n", |
| " | magic = 1\n", |
| " | index = 68\n", |
| " |###[ HPack Indexed Header Field ]### \n", |
| " | magic = 1\n", |
| " | index = 83\n", |
| " |###[ HPack Indexed Header Field ]### \n", |
| " | magic = 1\n", |
| " | index = 66\n", |
| " |###[ HPack Indexed Header Field ]### \n", |
| " | magic = 1\n", |
| " | index = 75\n", |
| " |###[ HPack Indexed Header Field ]### \n", |
| " | magic = 1\n", |
| " | index = 64\n", |
| " |###[ HPack Indexed Header Field ]### \n", |
| " | magic = 1\n", |
| " | index = 72\n" |
| ] |
| }, |
| { |
| "output_type": "stream", |
| "stream": "stdout", |
| "text": [ |
| "\n", |
| "###[ HTTP/2 Frame ]### \n", |
| " len = 0x1640\n", |
| " type = DataFrm\n", |
| " flags = set(['Padded (P)'])\n", |
| " reserved = 0L\n", |
| " stream_id = 5L\n", |
| "###[ HTTP/2 Padded Data Frame ]### \n", |
| " padlen = 40\n", |
| " data = '\\x1f\\x8b\\x08\\x00\\x00\\x00\\x00\\x00\\x02\\xff\\xa4;\\t\\x97\\x9bF\\x93\\x7f\\x053/c\\xe9\\r\\x928t!\\r\\xe3u\\x92\\x89\\xe3\\xc4I\\x9c\\xc4\\xd9/\\xdf\\xfay\\xf5\\x1ah\\x04\\x19\\x042\\xb4\\xe6\\xb0F\\xffw\\xf7_lU7\\xa0\\xe6\\x90\\xaf5\\xcf\\xd3\\xa2\\xbb\\xba\\xba\\xeb\\xaej\\xe0\\xf2\\x89\\x9fz\\xecaK\\x95\\x90m\\xe2\\xabK\\xfc\\xabD\\x8cnr/\\xddRGU\\xf9\\r\\x028j\\xc8\\xd8v1\\x1a\\xe5^H7d\\x98f\\xeb\\xd1\\x9f\\x94d^\\xf8\\x07\\xcdw1\\xcb_\\x935U\\x95\\x98$kG\\r2\\x15pQ\\xe2_]n(#\\x8a\\x97&\\x8c&\\xccQ\\x19\\xbdg#\\\\d\\xa9x!\\xc9r\\xca\\x9c\\xbf\\xde\\xfc0\\x98\\xab\\nb\\x1f\\xd0\\xf7\\xbb\\xe8\\xd6Q\\xbf\\x13\\xe0\\x837\\xb0\\xae\\xdaD1\\x8a6\\xb0R>r3\\x92\\xf8Q\\xb2\\x1e\\xad\\xd3t\\x1d\\xd3\\xf5\\xc8\\xb8/\\x7f\\xaer\\x06c$\\xf3W^\\x1a\\xa7\\xd9\\xca0\\xe7\\xfev\\xb8M\\xd6\\x82\\x9cm\\x96n\\x1d\\x95\\xa3\\x01\\xecq\\x94\\xdc(aF\\x83\\x0e\\xd4\\x00\\xe9\\xef<6\\x8a\\xbc\\xb4\\xc2\\x1d\\xa7\\x80\\x0b:T%\\xa3\\xb1\\xa3\\xe6a\\x9a1o\\xc7\\x14\\xe8J\\x00\\x1d\\x8bXL\\xafr\\x8fl\\x1f\\x94\\x81\\xf2\\x07\\x05n\\x01\\x8f\\xa8\\xf2\\x82O\\xbf\\x1c\\x89\\xf1\\xcb\\x9c=@s\\xb6vI\\xa6\\x9d\\xadw9\\xcd\\xf6\\x01P8\\xc8\\xa3\\x0ftaX\\xdb\\xfb\\xe5\\x96\\xf8\\xb8\\x87\\x01K\\xb7\\x0bc{\\xaf<\\x896[X\\x8a$ly\\xe0\\xf3\\xf6!\\x8d\\xd6![\\x98\\xe6\\xf6\\xfeP\\xe0(\\'\\xb9)c\\xe9f1\\xab\\xcfC\\xee\\x0fH\\x1c\\xad\\x93E\\x86S\\x0f\\xc3\\xb5\\x1bj\\xf0\\xc7\\xdf\\xbbi\\xe6\\xd3\\xacZ,O\\xe3\\xc8W\\xce<\\xdb\\x9f\\x05\\xc6R\\xda\\x19,\\x85\\x93\\xca\\xb5\\xf5\\xe56\\xcd#\\x16\\xa5\\xc9\\x82\\xb80i\\xc7\\xe8\\x12q\\x98c\\xa0\\xe0.\\xf2Y\\xb80t\\xfd\\x9b\\xc3\\x7fl\\xa8\\x1f\\x11\\x85\\xc4\\xf1\\x1e\\xa6\\x1b\\xf2\\xd6\\x97\\x1b\\x92\\xad\\xa3d\\xc0w\\xb4\\x18N\\xe8fyK3\\x16y$.\\xf6\\n\\x08\\x0b\\x8a\\x838%l\\x11\\xd3\\x80\\x1d\\x0e\\x04\\x11i\\xf8w\\xbc\\xe7\\x84\\xf9\\xd4K3\\xc2\\xf7\\xb2K\\x80\\x18\\x10,\\x95\\xa8\\xafM\\xe0z\\xb18\\xd3uO\\x86\\x80\\xa1H\\x91\\xc7}\\x7fN\\xcdY\\x03$\\xa8\\x81\\xd8\\xba.\\x8f+\\x97#!\\xdaB\\xc2CPEy\\xdf%\\xb5\\x05\\xa3\\x97)\\xd0\\n\\xa3w\\x8b0\\xf2}\\x9a\\x1c\\x86\\xab\\x87\\xd0\\x97U\\x81s\\xfc\\x9f\\xbd\\xe0\\xa55\\xa6\\x9b\\x83\\x9b\\xfa\\x0f\\x1a\\xf35?\\xba\\xd5\\x86[\\x8d\\x08\\xe8\\x80l\\xa2\\xf8aA\\xb2\\x88\\xc4ZN\\x92|\\x00\\xfa\\x10\\x05KF\\xb6\\x83\\x10X\\x1b#{\\x07b\\xd3\\x190\\xb3gN&Z\\xf9_\\xefs\\xac{\\xb1\\xb9\\x85~ J\\xb4Y\\x17J\\x01\\xb7M\\xee/e\\xf9\\x95:\\x87\\x03\\x0b\\xec\\xa8+2\\xb0,\\x0f\"\\r\\xff\\xe62a3\\x1c\\xba\\xd3\\x86\\xef\\x17\\xc4c\\xd1-\\xc5_\\xb7\\x11(\\x13\\xf5\\xb5!\\x03\\x05\\xde\\x95,6\\x0c\\x0f\\x85\\x17\\xb7\\xc4\\x9c\\xa4\\t\\x05\\x8e\\xfd\\xb5\\xf1\\x15\\xb2@;\\xae\\xe4zm|\\xf7\\xadu8\\x0b\\xd2\\x94\\x956\\xb1\\xd0\\x959\\x1a\\n\\xf6)d\\x7f\\x17\\xc2J\\x83|K<\\nx\\xee2\\xb2=\\x84\\x96\\xbc\\xbfiI\\xc9\\x9d\\xa05I\\xb3\\r\\x89\\x97%\\x8b\\x96\\x15\\xda\\xc3YFs\\x05&\\xfbQ\\xbe\\x8d\\xc9\\xc3\"JP\\xf5\\x0eC\\x10d\\xc1\\'\\x94t\\xb7\\xa1\\x0c\\xc0<t\\x10\\xeap\\xadq\\xb9\\xa2o\\xd4\\x18qc\\xe0G\\xce\\xfc}\\x8b\\x97\\x85\\x8cJ\\x0b7\\xad\\xa3\\x05!>}\\xf9!\\x85n\\xe3\\x90\\xc6J\\x1ci;\\xfc\\xbb\\x8f\\xa3\\x1c\\x90\\xa0>\\n\\x96\\x85\\x86\\x96\\xc60\\xa6\\xc1X\\x17=\\x1b\\xf7:\\xf1\\x95\\xd0\\xdc\\xb7\\xe9?\\x0ci9\\x05D\\xad\\xe8\\x8a>\\x9c\\x81\\xc9\\x1e\\xceP\\xfa\\t\\xb9\\x05\\xcevJ\\xa9\\x1a\\x07\\xac\\x85\\x90fS\\xbc>\\xc6\\xe3\\xc3\\x19\\xcc(]\\x13\\xcc\\x8a\\xc96\\xa7\\x8b\\xf2G\\xcd\\x94@\\x9bd\\xf7\\xc6]\\x04\\xceV\\x80\\x87R\\xbf\\x07!\\x84f\\x87a\\x92\\xbaY\\x97\\n\\x0cY~r\\xbd\\xc30W`V)e\\xa1|^\\xeeV=n\\x9cz7\\xa5i\\x8cu\\x14\\x97\\x08(+.P\\xdc\\n*\\xc6\\xa0T\\x8a\\x99d<\\x858Q\\xeb\\x1a\\xb3$C\\x94=\\xb3\\xe7U\\x12C\\x17q\\xc6\\\\_;#\\xe0\\xc9\\xeb\\xbb\\xd9\\x00\\x83\\x8eJx\\xe0\\x10rd\\xb1\\x8a\\xb9\\xa8&M\\xfd]\\xbd|\\x03\\xa6\\xb8\\xfa\\xe9\\x8d\\xdfP\\xbay9\\t\\xec\\x94\\xc93\\xc5\\x9a\\x8d@V\\xa3yh6I\\xb6\\x9a.d^\\x8a2\\x02/\\x9e\\xb0\\xc5\\x00\\x97C\\x8f\\x90kC\\xb7\\xa6\\x92n\\x1a\\xfb\\x07\\xbai\\xf5\\x15;(\\x14^\\xa8\\xed&\\xda\\xd0\\xca\\xa1\\x10\\xdd\\'\\xee\\xf2\\xc44\\xdc\\xf8\\xfd \\x87Y0m\\x15\\xdf\\xf9{\\x11\\x9a\\x06f=\\x9a\\xb6\\\\w\\x9ez\\xa7\\xd4\\x1f\\xc7\\xca\\xd5\\xe7:^\\x80\\xfa\\xf9w\\'\\xc1a\\xac\\x05~\\xb3\\xf6\\xcb>:\\x9b\\x19\\x86{8[\\xdd~\\xebv(\\x07\\xd5\\xf1*\\xed\\x833\\x15\\x99X\\x8f\\xb4\\xbc\\xa7R\\xa1\\t\\xcc6Ae\\x95\\t2{\\xb5\\xb1\\\\\\xc9\\xf5X&\\xef\\xa4/*\\x1af\\xb3\\xd9\\xb2\\xe1+%k\\x148~\\xd4\\xfd\\x13\\xe0\\xe3N\\xf0W\\xe1iR\\xea1\\x86\\x9b\\xd6\\xea\\xcdM\\xf4\\xc9\\t\\x8b\\x92\\xae\\xc3\\xd9m\\xfa\\x11V\\xd5\\xf8\\x80\\x7f\\x80\\xb7\\xbf>x\\x12\\x0fx\\xa8\\x93U\\xb9\\x16\\xfb\\n]\\x9e\\x14\\x0bA\\x02\\xbao\\xa8\\xfd\\x18w\\x9c\\x97[\\x18\\x14\\xb9\\x11\\xa0(:\\x84\\xb6\\xf2]-\\x8f\\x1e\\x88\\x0b\\x9b\\xd2\\xa5K\\xbc\\x9bu\\x96B^S\\xf6\\x06Ap\\x0c)\\x90\\x89\\x12\\x8c\\xa1\\xcbFp\\xe0\\xded\\xf5\\x9a\\xba`\\xc6\\xbf\\xf3\\xbf\\x7f\\xe5n-_x\\x8e\\xf9B\\xcd\\x12x\\xa2\\x80>\\x12\\xe75\\x0c\\x7fR\\xe2\\x93\\x18s\\x7f?\\x88\\x01\\x08\\x95\\xf6\\xf7\\xda\\x00\\xa6|\\xbb\\xcdAZ\\x93w\\x97\\x86\\x85\\xcc\\xf8\\x84\\x86\\xa2 *\\xd1p\\xed\\x14\\x7f\\xc6|\\x1b\\xd9o^\\xc9M\\xf4\\xe1<v\\xe1(\\x1f\\xccapC\\xee\\x0b>[s\\xbdt*\\x95\\xd5\\xd28\\x8e\\xb6y\\x94/\\xdba\\xa0i\\xdau\\xf5\\x13\\xdawk\\xbb\\xfbZ7\\xdfl\\x07\\xaeB^\\xd3\\xe9\\x14fma[\\x1d\\xc8\\xb2\\x9b\\xca\\xb2L\\x03/\\xb4\\x87\\xdf\\xdc\\xca\\x05\\xcc\\xf0Bg\\xf4KP\\xa58\\xb6\\x05\\x1d\\xff\\x1c;<\\x9d;\\t\\xe8\\x90\\xe3\\xc2p\\xf5\\xdd\\xcf\\xebc:;v-\\x1b\\x13\\xb2\\xdc]\\x11)12\\xf4\\x9ak+ \\xbc\\xbd \\xccj8>!\\x1d\\xd3\\x9e4\\xaa\\x0b0\\xe5\\xd9\\xbc\\xde\\'\\xd8?\\x99\\x99\\x9d\\xf8\\x15\\x1e\\xe1\\x1aIW\\x1b\\x8ev\\xc7?y\\x9dc\\xf9R\\xda\\x87o\\xe3\\xd5F\\x06>\\xa3\\xb2%n[2\\x08fr\\xcd|1\\x0b\\xf3\\x15\\x8fk\\xb5\\xb89\\xe6\\x81s\\xf5\\xc3\\xef~\\x13>\\xdf\\xb9\\x01\\xc4\\x9c\\x95\\xc7\\xb2\\xb8\\x91\\xc8/\\xe5\\xc8_$9\\xc8D\\x8bgR\"#f$hVq<\\xf1[y\\xe1q)n\\x06\\xba\"\\x06\\xdc\\xee\\x813\\xd8f\\xcev\\x01\\x94+\\xb4\\x89\\x91\\xfb\\x85<\\xbeQ\\xe0\\x8f_\\xd4\\x16\\xe6D/z\\x1bF?\\xb0*\\xe8\\xd5\\x07\\xcbm\\xe2\\x9aT\\x95^\\x81a\\xf5\\xfb\\xeb*a(\\xcb\\x9c\\x06FQ\\xd5\\xac>\\xec*\\xb5\\x9f\\x8c\\xf1\\xc2\\xc0\\xb7\\xf3j\\x8c\\xee\\xf0\\xb2b\\xf2\\xb7\\r\\xc0\\xf62\\x06\\xf7\\x13\\xc4\\xc3L\\xba\\xc3\\x1do\\x02(\\xbd\\xd3 k&\\xfd\\x85`\\x0c\\xbaQ\\xa4\\xac\\x98\\x0bw\\xb8b\\xaf\\xa2&\\x03L\\xee\\x15\\xf3&%\\xb8\\xee\\xea\\xa7k\\xda\\xe8\\'\\xc3 \\x86\\x01\\xef{\\x85h\\xc34\\x8f!\\x05\\xa8g%\\x9d\\tA\\xbd\\xbc) \\xbd]\\x96\\xc3\\xed6\\x8dxR{\\xc6\\x88\\x9f+]\\x90\\xc5\\x90HPj\\xe3ErQ\\x8c\\xf3\\x8c\\xa4k\\xfc\\x93#E\\xe1\\xd6=\\x18\\xa2;\\xad\\x0f\\xb5\\xa8\\xac*\\xf6C\\x0b\\xd9\\xd4\\xf8\\xee0t\\xe3\\xf5\\xa9d\\xc9\\x03`\\r\\xff4\\x8b@}:5\\x8d\\x8e\\\\PP\\x8b3\\xea\\xa0\\x87\\xe1\\xcd\\xad\\xac\\x0c\\\\\\xae7\\xb7yC\\x99\\xb1O\\xc3~\\xd0\\xabx\\xdb\\xcc\\xb7\\xeb\\x1a\\xc8\\xa1Y3L\\xf1\\xca\\xa9q\\x12PV]\\xc7\\x92\\x8c\\xdb\\xf2\\\\\\x14Y\\x87a\\xd0\\xe2\\xed\\xf6\\'W\\x0e\\x06\\xe1x\\x985R\\xf8e#\\xeav\\xd4ZXQ6L\\x03\\xa3\\xe7k\\xb7\\x81j \\xc8k\\x9f\\xcc\\xb4ce3)\\x01|/\\x12\\xaf*4\\x81\\x1c\\x13L\\xcb\\x18ZX\\xf6\\xe2P\\xbdD\\x1d\\xe0i\\xe3\\x02V\\xf7\\x0eh\\x1fr\\n)q\\x8c\\x9b\\xf6)\\xd3\\x05\\xee\\xe4[\\x88\\xef\\x8d\\xe1\\xa2w\\x95B\\x00k\\x15\\xd6\\xc7\\xa1\\xd39\\xfc\\x11\\xc4U\\xa2}K\\xb1:\\xd9\\xcb:\\xb3Z\\x17/\\xac6\\xb1(<V\\xde\\xc3\\xdb\\xc8\\xa7\\xa9\\x9b\\xdew\\x86\\x00t\\xc1\\x9f*\\xaf\\x0bk\\xd3\\xaa\\x0e,\\x9cvU7\\xc7\\x11Z\\xe0{J\\xb3<m\\x88g\\x9bd\\xcf\\x034\\xe4w\\x0f\\xe9\\x8e-\\x82\\xe8\\x9e\\xfa\\xf2\\xa9\\x9eT\\xf4\\x97\\xd9\\x8bi6\\x8f\\x7fJ\\xa0\\x8aL\\x0c\\x9d\\xca\\xb8\\xf8\\xaf\\x8b\\xca\\xae\\x99\\xa1\\xac\\x9e_\\x9f:\\x93\\xa4\\x01^\\xcd\"\\xb3t\\xda\"\\xfe\\xa1\\xe7\\xe7I\\x8dt\\xaa\\x81\\xb5j\\xf3\\xf0\\xa4,d\\xa5\\x18\\x8e\\x97P\\x16\\xc18\\x89\\xb2\\xc3\\x998>\\xc0S\\xe5\\xeal\\xac\\x1e!\\xb8\\xadvF\\xdec\\xb1]\\r\\xe6\\xdb\\x95\\x97\\xb0\\x1a\\xc4T\\xd4\\xe8\\xab\\x84\\x1c\\xabU\\xc1\\x13N\\xb0\\xf0\\t*O\\xda\\xd5Z}\\'\\x9c\\xd5*\\x88+\\xb6\\x1d]P\\xc99\\x9f\\xe2U&!\\x93i\\xfb\\x90\\x99\\'@\\xbb\\x98\\xfd\\xc9\\x08\\xabdb\\xdbv\\x93\\xdbM\\x9b\\xef:I\\xd9\\xe4\\xf1\\xfa\\xea\\xa8\\xddENo4\\x165k\\x99\\x88d\\xe0R\\xdc\\xe79\\x92\\x8e\\x95iQ\\x9d\\xfer\\xebk\\xc3`\\xb3m1w\\xe8\\xc5iNW.K\\xf6\\xcd\\xea\\xfc,\\x88!\\xd6jgn\\xd0\\n\\xb9r\"Yy)\\xc3,+\\x86\\x86\\xad\\xd5R\\xca\\xa4\\x99[\\x9fm\\xf22^,\\x86\\x96\\x859\\x84\\x9cE,K\\xaf\\xca\\r\\x0b\\x0b\\xed\\x7fw;Z\\xe9\\xac\\xb5\\xa3\\xa6h\\xf0\\x94k\\r,\\xacl[\\xc7y\\xc7\\x02\\x1bxrR3\\x84?Z6\\x8eqZ\\xc7\\xbd\\x13\\xbbQ\\x03Ox%\\x0f\\x12\\x13N\\xc1\\x9e\\xd7L\\xae\\xa3>\\xedR\\x94\\xd5_\\x7f\\xbb\\x1a\\xe1\\x8d\\xec\\xec\\xeb\\xd9\\xcd\\xb2\\x9bK\\x1f;\\xf9n\\x06?y\\xcfm\"J\\xb9\\xcb\\xa7\"\\xe2\\xaeK\\t\\xba\\ty\\x196\\xad\\xcf\\x92\\xacO\\x98q\\xdb\\xa8kGP\\xd2\\xd9*w\\'\\x90/\\xae~\\n\\xfdZ\\x0e\\xe5\\xc6P\\xc1|\\xf6\\xb6j\\x07\\xfb\\xb2?\\\\\\xe5\\xf7\\xde\\'\\x95\\xafn\\x91X\\x96\\x86>\\n\\x0b\\x9aZ\\xf5\\xce3\\x9d\\xbc~\\xc09\\xb6\\x9a\\xbc\\x04c\\x00\\x15\\x82\\x14\\xaf<\\xf2\\xe7\\tpuW\\x84\\xaa\\xe2V\\x8ai\\xa2\\xa7ij\\xab\\xbfw\\xbe\\x04\\xce-\\xbb\\x13\\xb4f\\xb2xb+\\x95\\x80\\xbb,\\xee\\x95\\xcf\\xfd`\\xb1U\\x9c\\xaeS\\xd3\\xb4\\xf1ia_I\\xd2AF\\xb7\\x94t\\x1c\\xf6\\x1d=\\xcd\\x17#S\\x06\\x86\\x85\\xcc\\x18\\xcc\\xc7RM(=1\\xc3\\x9f5[<\\x88\\xc7H_\\xb1\\x92\\x8d\\x91p`\\x8e\\'\\xd2JV\\xb5\\xd2t\\xd2\\xbd\\x92\\xc2\\x9f-\\xf1_\\xa0K_C\\xa2\\xfee\\x8b\\xae\\x92o\\x9b\\x19\\xe7\\xd1$y\\xc4\\xd91\\xaeZB\\xae,\\x033\\xdf\\x92\\x8c\\xb6\\x8fa;\\xf3O\\xc0~\\x05$\\xedOb\\x01\\x98\\xdf\\xf4}\\xed\\xdcM^\\xa3}F\\xa7\\xf8$\\x0fi\\xd9\\xb4\\xcf\\x1f\\xd6\\x19\\x85\\xbd\\xd4\\x0e\\xfb\\xaa\\x94\\x07\\xff~\\xbe{\\xe3\\x1eL_V\\x0f\\\\\\xb9\\xb95}\\x98\\xfe\\x11\\x06\\xb5\\xbd0\\x7f\\xf0t\\x14\\x88.\\xa8\\x97L} *\\xe7\\xcd\\xc0\\xcf\\xd2\\xad\\x9f\\xde%\\x83\\rMv\\x8dRG>G\\xc1\\xd3\\xc8v\\x9a\\xeb{x\\xb5\\x9e\\x07\\xf0s\\xaf\\xae0Q=\\x19\\x13q\\x8d\\xecX\\xda\\x15\\xfd>\\xf0\\'\\x03\\xf7\\x0b<\\x00\\xfb\\xf7\\x8d\\xdb|\\xbc\\xd5\\xed\\x9b\\x01\\xb0p\\xa2\\xed\\xb3TJ)\\xfa\\xd9\\xff\\xba\\xa9\\x02\\x90eY\\xa7$$\\x88/w\\x8fO\\xd8\\x8dSQ\\xa2,\\xc9\\x9b\\xa8\\xc1\\xc8\\x02w\\xbd\\xae\\x9dD\\x05\\x06^\\xcb\\xd3!z\\x82W\\xa9\\x063\\x9e\\xac\\xa1\\xed\\xe1{\\x11\\xfb\\x92#F\\xfd\\xa4r\\xdcH\\xb6\\xc6\\xe5\\xa4\\x13\\x8f\\xac\\xec\\xfa\\xb9\\xbc!=\\x9d\\x17N\\xde\\xec\\xc8\\xfd:\\x82\\xbc\\xf0b\\xd6\\xac\\\\\\x8e?\\xc3*\\xc5\\xde\\xfd\\x18t\\xcc\\x03H\\x0c\\x82$2[\\xb8(\\xbb4\\x8b\\x9f\\xee\\xb5\\xcd.\\x8fb\\xd8^u\\xec\\xa8WHK\\xd9\\xb70\\xb96^\\xcb\\xeeZ\\x83\\xe8x\\xc1\\xe0\\xfd \\x0f\\t\\x18\\x02\\xd8gN\\xd1\\xbb\\x19\\xe2\\xa4Y\\xe1\\x8f\\xd2u\\x8d_C\\xa3\\xbf\\x84`\\xee\\xdeDl\\xf0%S6\\xe9\\x87/\\x80\\x17\\x04\\xb12\\xd3\\x10*/\\x979\\x11Q\\xa2d\\xbb\\xabN\\x1d\\xb2\\xa2\\x1e=\\x82\\x15]\\x02x\\xdf\\xea\\x04\\xfc\\xb2\\x0c\\xf8Ly\\xb1\\xea\\xd0D\\x17E\\t?\\xb5m\\xa7_\\xddo\\x0b\\xb42\\x11L\\x91\\xa6\\x05\\xa9\\xa8\\x80\\x1dG\\x0c\\xc7\\x92sy\\x07\\xfb\\x18\\xb8\\x19%7\\x0b\\xfew\\xc0\\x1f&\\xc0\\x8e\\x17A\\xea\\xed\\xf2\\xd2\\xc3\\x17\\x15;r\\xca\\xfd(-\\xe5\\xd6\\xa6\\xb5Te*\\xaaH\\x9e\\xf1\\xf8y\\x9d\\x91\\xb2M\\xce\\xf0\\xea\\xb0\\x80\\x12\\xab\\xdd4 <\\xf8\\xad\\x8cU\\xe7\\xbcv\\xe5\\r\\x0exd]p\\x95@:H6Xg\\xc4\\x8f\\xc0\\x8f\\xf7\\x80\\x13\\xda\\xd9\\xd8\\xb7\\xf5\\x00\\x92\\x9d\\xf1l>\\xa3~\\x7f\\xd915\\xff\\xda\\x99\\xe9\\xd7N,t\\xbe\\x9a&\\xd0hH\\xb2\\x82(\\xf8\\x0f\\xe1\\xd2\\xb4 K7\\xbd\\x02g_ci\\xaf\\xc4\\xfb\\x11\\xc4_\\xb7\\xad\\xcf\\x9b\\xd5r\\x08\\x96>\\xb3\\x8f\\x11\\x1d\\'\\xefr^\\x8d\\xb6\\xe3\\x86@VI{vLq\\xe6\\xc2\\xf1\\xb8\\x1d1\\xe7s%lMf\\x84\\xce\\xbfF\\xc2\\xa7g~B\\xc2\\xa7\\'\\xfe\\xff$\\\\\\xe0\\xfdZ\\twl\\xab\\x8c\\xa5|\\xe4\\x0bE_\\xa1k\\x89\\xde\\x0c&\\xae;\\xe3\\x82\\x93\\x9dF-\\x13<.U\\x99=\\xe4\\xba\\x16\\xafu\\xa4A\\x91\\x06/D3\\xb8?\\xe5?\\x8b\\x1c\\xc3\\xa7\\x01\\xd9\\xc5\\xacp\\xa7\\x93.w\\xdav)\\xe0C?\\xea+9\\x1de=\\xf4EA\\xc6\\xfa\\xf28f\\xf5?;JZ\\xb2$k\\xcc\\xfd\\x8a\\xe4\\xbeFo\\xeeF^\\xbaoc\\xe9L\\xae\\xcb\\xc2d\"W\\xff<\\xe5l\\x9cB\\x15+L:\\xde\\xd6;\\xbe\\xec\\xe7e\\xd1\\x96]\\xf5\\x82]\\xe2\\xe1\\xfez\\xfd\\xfd\\x1dx\\xf9\\xf4n(^\\x1bu\\xf67\\xd7/\\x17Oo>\\xfc\\xf0\\xfb\\xbf~\\x1d\\x84\\xd7\\xde\\xcf\\x0fd\\xfc\\xf3/\\xeb\\xff|\\xfeT\\xbb\\xb9\\xfe\\xfb5\\x8c\\x99\\xfalnj\\xb3\\x89>3\\r\\xcd\\xb0&\\x86\\xad[\\x9a5\\xd3uslic\\xdd\\xb4\\xe7\\xc6\\x04Z\\xcb\\x9c\\xcef\\xd8\\xceu\\xc3\\x84vl\\xccm\\x1b[kl\\xf3\\xfb\\xc9|l`;\\xb7\\xc6\\x087\\x99\\xcc\\xc68ojN\\xa7Sl\\'\\xe0\\xf9\\xb0\\x9d\\xcd\\xa7:\\xb6\\xf3\\xc9\\xa4h\\xc5\\xbd=\\xb7\\xe6\\xa2\\xe5xf\\xe6T7y;\\x9b!\\x9e\\x99\\x058y;3\\xe7\\xbc\\xb5\\'\\xb8>\\xacb\\xcfxkO\\xf8\\xf8T\\xb7Ek[\\x86h\\xf9>g\\xf31\\xc7\\x0f\\xedd\\xca\\xdb\\xd9t\\x8c\\xadm\\xe8\\xfc\\xde\\x1e\\x8f\\xf9z6\\xec\\x98\\xb7\\xf3\\x99\\x18\\x9f\\xdb\\xa2\\xb5\\'\\xd8\\x02\\xf9S\\\\on\\xe8V\\xd9\"\\xfe\\xb9\\xa9s\\xbcs\\xd3\\x98Nxk\\x1a|\\xdc\\x9c\\x1a|\\x1c\\xd8\\xc2\\xc7\\xc7\\xc0Q\\xdeZ\\x9c\\xbfs\\xd87\\xef\\x9f\\xe8\\x13\\x0e?\\x99\\x9a\\xbc\\x9d\\xea\\x86\\xc1[\\xd3\\xd6y;\\x9fr\\xf8\\xd9\\xcc\\xe0\\xf3g6\\x97\\xc7\\x1c\\x11\\x8a\\xd6\\x9a\\x8av\\xcc\\xc7\\xe7S\\x81\\xdf\\xd6u\\xd1\\n:\\xe7\\xb6%\\xf6m[\\xe3\\xe2~,\\xee\\xc7s\\xbe\\x9e=\\xe1|\\x9a\\xdbS[\\x8c\\xcf\\xc6F\\xd1\\xda\\xa2\\x9d >@;\\x9f\\xf2\\xd6\\x9a\\x98\\xbc\\x1d\\xeb\\x86h\\xb9\\xdcm\\xe0\\xd4T\\x9b[\\xe0ml\\xd1\\x9a3\\x8b\\xb7\\x10\\x025\\xa0v:\\x05\\xbd\\x82vf\\xc1\\xba\\xd8\\x8e\\x81O\\xd8\\xce\\'s\\xd1\\xda\\xfc~\\xaeO\\x8av\\xca\\xe1\\xe7\\x13\\xe0\\x07\\xb66\\xf0\\x0bZ\\x1b0\\xf1\\x16\\xf5\\xd5\\xd0MXpn\\xa1\"\\xc3\\x0f\\xd3|\\xaa\\x81i\\x85\\xf8\\x8e\\xf2B\\xd7nr/_<\\xf5l\\xcf6\\xe6\\x81\\xbe2\\xc7O\\x0fKa\\'\\xc3\\x9b\\x1f_9O\\x83\\xec\\xe9\\xf2\\xd0\\xef\\xf5\\x97\\xb2=\\x15\\x00\\xb1\\xe7\\xbc}WB\\xc7\\x91\\xa3\\x97\\xbf\\xd7\\x94]\\xbft\\xaa\\t\\xa4\\xbf\\x0f\\xd2\\xacwK2\\xc5]\\x92\\xf3\\xf3\\xde\\x13\\x82 \\xcf\\x19\\xcb\"\\x17\\xca\\x8e\\xc7\\xc7\\'=\\xd7\\xa9\\xf7\\xf5T\\x1a\\xf9j\\x1f\\x02U\\x9f\\xc0\\x90\\xf0\\x1e\\xbf\\xa6>\\x14\\xa4\\x94\\xed\\xb2Dq\\x1f\\x1f\\xcb}^\\xbf<H+\\xbf:\\xb5\\xb4\\x93\\xec\\xe2\\xf8\\xf3\\xd7\\x8f?\\xb5\\x81jQ|_>w$\\xfe\\x08\\x08\\xfe\\x96~\\xbeP\\x1d\\xa7\\xf0?\\xe0\\xebxA:\\xdcf)\\x83j1\\xae0l\\xe2\\xf6t\\x05\\xb7[A\\xdcI\\x10Ds\\xfb{\\x96=\\xec\\xab\\xd9\\xbd\\xeb,\\x032I_{b\\xc0\\xe0\\x01\\xd6\\xf1\\xc2\\x9e\\xd7\\xdf\\x1f*\\x04,\\xda\\xd0\\xf6\"\\xbd\\x84\\xde)\\xdf\\x13F\\xfbH\\xfd\\x1b\\x80\\xe9\\xf5\\xab)P/\\xd6\\x16\\xd5<\\xcd\\xd7\\xd6\\xfd=q\\x8e\\x00\\x7fe\\xb14\\xb4\\x8c\\x82\\x9e\\xaa>q\\x80\\xed\\xc0n@\\xfd\\x12s\\x80%\\xb2\\x9fV\\x93<-\\xa8~GK\\xfa6x\\xe7\\xb8Kw\\x08\\xe1\\x18\\x89p\\xf0\\x17\\xd4+>\\xffA X3y\\xdb>\\x8d)\\xa3\\n\\xce:,k~\\xfd\\xfc\\xbcv;\\xbc\\xa5qG\\xd70\\xdeu\\xf7\\x02\\xf3`\\x13y\\xe69DR\\xe9\\xe0\\xc28\\xc8\\xfc\\x00r;Y\"(TU\\x89\\xb4\\xfc\\xf1QU\\x97\\xde\\xe3\\xe3\\xc0x\\x02\\xb4\\xe4\\xfc\\x03\\x8d\\x9ezN#G\\xed?>\\xf6\\x00\\x9c\\xff\\xbe\\x90\\x8d\\xa6\\xe7\\xf7\\xb5\\x81\\xe1\\xc8\\xf01\\x9f\\x00Z\\xeb;5%\\x07P\\xec\\xa5\\x17N\\x01s\\x81\\x89;q`Eu\\xa4^\\xf4\\xd6\\xd0\\xaei\\xb22\\xf5\\xb1\\xda\\xbfP\\x9f\\x11\\xf6\\xb0u\\xa2s\\x8f\\x01$\\xb9P\\xcf=`\\xb1z\\xe1^\\xd0\\x8b\\x00\\xee>\\xdc\\x1fw\\xc2\\xb8\\x1a,G\\xff->3\\x89\\x86\\x8c\\xe6\\x0c\\xf8s~.+|\\x0fWoj\\xa0JT\\xae\\x83{`\\xe4\\x82h\\xebx\\x83/@\\xf75\\x02\\xbc\\xe9\\x97\\x96C*\\x8e>8\\xfb\\xea\\xf7}C\\xc1K\\x90\\xb7d\\x18\\xf9\\xef\\x9c\\xb7\\xd0\\xf9\\xae\\xc0\\xf0\\xc48\\xca\\xe4\\xbd\\xec\\x83Pm\\xea\\xe29:\\xab\\xf7\\xc3\\xed.\\x0f{o\\xdf\\x92w8\\xf0N\\xd6s\\xe2?\\x8f\\x9b\\x06\\xd6\\x9c\\x87\\xeb\\xc3\\x9cC\\x7f\\x08Y^\\xdcca\\x94\\xd7\\xbd\\xa2p2o\\xdb~\\xd2\\xab\\x18\\x07\\x19\\xe2\\rx\\x16XO\\xd5T\\xdf\\x8b\\xd5\\xfe\\xa1\\xda<\\xdc:O\\x0c\\xe9\\xce\\xab\\xb9\\xb1c\\xff3\\xd2\\xeb/\\\\\\xb1+\\x02;*\\xa1\\x14\\x0f\\x96\\x04\\x03|r\\x04\\x95\\xa79O\\xf0\\x8c@\\xf8B\\x02z\\x02*\\x16F\\x01\\xeb\\xa1\\x83\\x03\\xa3?\\x14F\\x01\\x85\\xf7\\xf5-\\xb8\\xbaWQ\\xce(\\x98\\xe4\\xb3\\x9e\\x0f\\xd5\\xfc\\x06zZC=\\xf5\\xfb\\xdf~)>\\x10z\\x054Q\\xa0\\xca\\x03\\xe9\\xf7\\xb5\\x13\\xb8J\\xd29P\\x7fQB1F\\xbc\\x90\\x03V\\xa6)\\xf5\\xf5T\\xe1\\x0f`Z\\xbf\\xc1}\\xc8\\xf9D\\xb2W$}\\x8a\\xf8:\\x8a\\x7f\\xd9\\xf4\\x0f\\xb9%\\xa2W\\xbdj\\xc2]5\\xc5F\\x8e\\xac\\x0e\\x8e\\x11\\x03\\xbc_\\xe1\\xf7\\xafc\\x8a\\x1c\\xd0|\\x1eC4\\n\\xa1\\x8e^\\xae\\x87^\\x18\\xc5>\\xc6\\x84|\\x18\\xd3d\\xcd\\xc2%\\xbd\\xb8\\x10\\x18CG\\x1e~K\\xdf-\\x07\\xc6eOU\\xd4\\x8bp\\xe8\\xc5$\\xcf\\x7f%\\x1bz\\x01\\xf7\\xfd!?\\x82\\xf8\\r\\x1c\\xa7\\xd2<\\xe5U\\n\\xbb\\x0f\\xfb\\x07\\x15\\xcb\\x15\\x08%\\xfe\\x90\\xa7\\xb9\\xc3\"\\x8f\\x06\\xe9\\xd4;\\xd0\\x07\\x1d\\xddUO\\r\\xb7d\\x03\\xbav~K\\xd1\\xda\\x83F\\x8c\\xf3\\t#\\x03\\x18\\xc28\\xb7ha\\xe2K\\x1e4\\xd0iU\\xa0\\x04DPUl\\xd4w\\x9a\\xe7\\xa0\\x04\\x96\\xee[\\xfd]\\x04\\x8a\\x07\\x11\\xd4\\x1b\\xd2{\\xea\\xfd\\xc9\\xf9\\xfb\\xf8(\\xdf\\xf5Td\\x08\\xb8\\x1a\\x00\\xeeW*x\\x03\\xdeV0\\rH\\xbc9j#\\xa8c9\\xf0\\xf8x\\x9bB-\\xa8;\\x8eC\\x9eyoo\\xde=\\xf3\\x1cl\\x16\\xa2\\x01\\xdf\\xb1\\xe0-9\\xa9\\x16#\\xf1\\xe1\\x1b>wS8\\xd7\\x1d5\\xcc\\xb3\\xad\\xaa\\xb8k^\\x9a8*\\x1e\\x97\\xc3?U\\x11\\x95\\x86\\xa8D\\x1cU/;x\\xc5\\xc1\\xef\\xa1\\x06\\x11]xwu\\xe9G\\xb7J\\x04.\\xd9%\\xd9\\xd5%~\\xc3\\x00\\xcb\\x14k\\xac]\\xe3\\xaa\\xfa\\xda\\xecr\\xe4^)\\x97\\xe48T|\\xe0&\\x92\\x83\\xd1\\xe8\\xee\\xae\\nDA6\\x12^\\xffY\\x08\\xce(;g\\xee\\xc6\\x89r/<\\xcf\\xd3]\\xe6Q\\']\\x9f3\\xe2B6\\xa1^\\xf1\\xb8\\x9a_\\x8e\\xc8Gqo\\xc86\\x97\\x90\\xe3m\\x89\\x1a\\xf1\\xc4\\xea\\xd5/\\xd0\\xf5),\\xa8\\x0c%\\x16/\\xdd\\x8cd\\x14s\\xf5\\xea5\\x0c\\x7f\\n\\x05\\x12\\x89\\xef\\xad\\xec\\\\\\x81B\\xbc\\xda\\x90?[\\xc7\\xce\\x0f\\x7f\\x08L\\x86z\\xf5\\xeft\\xf7\\x06 >\\x85\\x0c\\xf2\\n\\x99\\xaa\\xe4.\\x0f\\xb7\\xf2\\x9e\\x12\\xf5\\xea\\xb9\\xc7vP\\x87\\xb3\\xff\\xfd\\x0c\\x16E\\xb1L\\x1c\\xde\\x8f\\x9eq<\\x1b\\xf5\\xea\\x05\\xde~\\n\\x85\\x9fA\\xf1[c\\x10\\x9f\\x9e\\xaaW\\xdf\\xe3H{:73\\xe1\\xa6\\x9a\\x8f)\\xd4\\x8fjG\\x94\\xb0x\\x04m\\xba\\xc5\\t\\xf9\\x08\\xd4p\\x07\\xfc\\xdf\\x01\\x95\\xbb+\\xe5<#\\xefw\\xe9\\x12\\xd7\\xbb\\x1c\\t\\x8d\\x1c\\x81\\x96\\x1eU\\x15S~E(4\\x16\\xe9\\xa5\\xda\\xe2cE\\xa1\\xcaI\\xb5\\xc9\\x08}&\\xf4\\xcb\\xa3A5\\x1at\\x8c\\xd2\\xaa\\x8fH4\\xb4H\\x00\\x03ei\\xf6\\x80$\\x80>\\x08\\xb1\\xa9\\x15\\xe2\\xf1\\xd5\\x8f|<z\\xbf\\xa3\\xca\\xbf\\xa8\\xcby\\xf7\\x88\\xdc+?\\x0b\\xddBC\\xc1%{4oO~M2\\xb2\\xf9\\x1f\\x96\\x15\\x96\\xc1\\'2|!\\x9e9+0_\\xb1\\xd1\\xd5Lo0\\x99x^\\xbaKX.\\xcb\\xf0O\\x9a\\xddF\\x1e}\\x95\\x82\\xc1\\x17\\xca\\xb5\\x85e@\\x9e\\x0e\\xcbv\\xf4\\x1c\\x9f\\xf5D\\xc9\\x8e:\\x1f\\xb3\\xe3o\\xac\\x1f\\xde\\x7fc}\\xcf\\xbf@\\x95\\xf7\\t13\\xa1\\xf7 \\xc2nY\\x95\\x80a\\xa1)\\xe2q\\xcd\\xc7 \\x8a\\xe7\\x05%H\\xf1\\xb5\\x12x\\xfcM\\x02\\xbe\\x8e\\x9fwq\\x1f\\xe6\\xd18.\\x8e\\xd6\\xab\\xfb\\xe2MH~_hf\\xebh\\x07?\\xa6\\x85-\\xb2\\xb0P\\x1f\\xd5\\xb0L\\x0c\\xab,\\x94;\\'3\\xab\\xddi\\xce\\xe6\\xc7\\xce\\xe2\\xc7\\x88#\\xc3\\xff~\\xe9\\x96\\xf9S8U\\xb9\\xe5\\xa7g`\\x1b\\xe9\\xf6\\xe8c\\xd5\\xf2\\xe1\\x1a~\\xc9l\\x1c\\x15ltG\\xdd\\xd2\\xf4\\xab\\xbd\\x7f\\xd5\\xf3\\xf1\\xb1\\xf4F\\xb8u<;\\xb6[\\x8f\\xc7\\xd5j?\\x10\\x10\\xf0\\xf3aG}\\x91Bh(\\xbe)V~L7\\xc8,.V\\xdc\\xaa\\x90\\xc7\\x88\\xf9\\x1d\\xb4B\\x04B\\x83\\x01\\x16\\xd5\\xe9\\xae\\xa4\\xd0\\xf88\\x01\\xf0\\xe2\\xdb\\xec\\xe5p\\xd7\\xcb\\xae\\x0b}\\xd9x\\xc2\\x02I\\x05\\xcfk\\x80[B\\'\\x05\\x05,\\xc7\\x90GY\\x98\\xc2\\xcd\\x8b\\xeb7\\xaa\\x82\\xaf\\xb99\\xea:WK\\xf5\\xf9r\\xb5\\x91\\x0f\\xebt\\xf93\\xcb\\xa6\\x1a\\xf9\\xb2\\x16\\xab\\xfc\\xa1`\\xb5\\xec\\'\\xd6j\\xea\\x8dx\\x00\\xa7V*8\\x99\\x1c\\x99)\\x0e\\xc1\\x0b=:\\xa5\\xda\\xc5G\\x9a\\x00\\xc5\\x9f\\xd4Ix9\"\\xb0p\\xb5\\xb0\\xdfB\\xdeUd\\x07\\x9d\\xc33J\\xf0\\x16[\\xacI\\x1d5\\xc5<\\x02\\xb9\\x9b\\xbba\\x8a\\xf37\\xe4^d2 c}</\\x99\\xfc^\\x95\\x12U\\xb5\\xa6$\\xdc2F\\x9c\\x13\\r\\xe5\\xa9\\xb1\\xcc\\xcf\\xd5\\x06\\x0b]\\x17z \\xa9ci\"uV$\\xc8\\x9b\\x16\\x9bpY\\xf2\\xa2\\xdcG\\xbes7\\x11\\xee\\x84\\xbb\\xf3RK]\\xfee\\xfdW\\x9b\\xd5\\xc0\\xc2Gw\\x03\\xa3\\xf6\\xb5\\x85\\xf4f\\x8d\\xd5\\xb2\\xad*\\x82\\x8c\\x04!\\x15\\x07N\\xf1\\x07\\xcd\\xe1\\x84u]\\x9d\\'n\\xbe]\\x1eg\\xfd\\x1f\\x00\\x00\\x00\\xff\\xff'\n", |
| " padding = '\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00'\n" |
| ] |
| }, |
| { |
| "output_type": "stream", |
| "stream": "stdout", |
| "text": [ |
| "\n", |
| "###[ HTTP/2 Frame ]### \n", |
| " len = 0x15b2\n", |
| " type = DataFrm\n", |
| " flags = set(['Padded (P)'])\n", |
| " reserved = 0L\n", |
| " stream_id = 5L\n", |
| "###[ HTTP/2 Padded Data Frame ]### \n", |
| " padlen = 189\n", |
| " data = '\\xdc=\\xdbv\\xea\\xc6\\x92\\xef\\xf3\\x15\\n\\x99\\xec\\x93\\xacc\\xee\\x17\\x03\\xfb\\xe0,\\x19\\x9b\\x8b16\\x18\\xe3[\\x92\\xe5%\\xa4\\x06\\xb5\\x11\\x92\\xac\\x0b\\x18\\x92\\xfcK\\xde\\xe7\\x13\\xe6e^\\xe7/\\xce\\xdb,\\xff\\xc5TuK a\\xecmc\\xd8;{\\xaf\\xec`]Z\\xdd]\\xd5\\xd5U\\xd5U\\xddU@7/\\xb27%D&\\x9f\\xda\\x9e\\x17\\xd8\\x85\\x17y2\\xcb\\x17\\xf3:4H\\x8e\\x1e\\xbe\\xc7]v\\x02nT\\x13p\\xfb\\x97\\x80\\xfb\\xb8\"{\\xe7\\x06J\\xf3%F\\x1f\\xc1\\x02\\x91\\xbd\\xb9\\x12\\xe1}z\\x04\\x1f\\xf8\\xac\\xd0S\\x1c\\xefK\\x8cX?H#\\xf3#%<\\xa0\\x03\\xbb1\\xad\\x91R\\xa2c\\xddfw\\x9eB\\xa9\\xe9#~?\\xd74\\xd9K\\xa9t\\xc5.p\\xcd\\x90\\x90\\xd4n\\xe3p\\x02\\xaay\\xa1w\\x90\\x1a\\xd7\\xda\\xa2zQN\\x9d\\x19\\x8dZ\\xfb\\xa8*\\x8aF\\xfbV\\xec\\xd6\\xf7\\xdbA\\x8d\\xf4\\xcbt\\x7fL\\x95u{\\x0f\\xd4rA\\x95G\\xe3\\x0b\\xf6\\x1e\\x94\\xd8u{?YVw\\xbf\\x0c\\x04\\xb6j\\x98k\\x82P\\x16#{\\x1d\\xf8\\xdc\\x04\\x1e\\xbf&\\x00/\\xadx\\x82@\\xb9\\xa3R\\xf2)tkt\\xb9\\xbdX;}\\x19|\\xf7\\x86\\xebRL\\x19\\xe8\\xfd\\x98\\x8e\\xad\\xd0l]\\xc0\\xf0~\\x0e\\xb8\\x99z8\\xd3fKwf\\xa6\\xb8\\xa3=\\x13\\x06:\\xe2\\xdfQ@\\xac+s\\x81\\xab\\x10{\\x88;\\x8f<\\x15g\\x1e\\xf1\\xe3v\\xdf\\xdd\\xc1\\x1f\\xef8\\x92\\x7f\\xed\\xc7\\xb6\\x90\\xf0\\x9e\\xbf\\xe1\\x97\\xcf\\x9d\\x9d\\x1a\\xee\\xf7BG\\xa0\\xd8\\x81\\xd5\\xe5}\\xed\\xaf?\\xd4\\xbapVz\\xca\\x0cS*\\xf9\\x16\\xdb\\x15:0h\\xbd\\xa9\\xb9\\xf9\\x02d\\x04\\x8f\\xf5#\\x9c\\xf2U (\\x9a)X\\x07j~\\x89\\x11Q<\\x1d\\xaf\\xa7\\xb0\\x98:\\xc1\\x97N\\xcfa\\xcf\\x16\\xf7\\x86\\xed\\xe9\\xb4\\xd6-\\x97>\\x82Fl\\xc1\\x94\\xa6P1~\\x1b*\\xeb\\xf2\\xb2\\xb2\\x83\\x07/`\\xc9dM+gAB\\xbf\\x7f/\\x81;\\x1e}\\xdb%h\\xa38o\\x83=\\x95\\xadR\\xf8\\xc1\\xdbH\\xdf\\x9ct\\xeb\\x07\\xc0,[\\x00\\xda_E\\xa1bI\\xb0\\x88\\xe43\\x00\\xe1\\x8c\\xbb\\xda\\x9e\\x0f\\xf1\\xdb0\\xe6\\x10\\x8e3\\x8c\\xb7\\xe4\\x92\\x17\\xd0\\x06\\x1f`\\x99\\xdb$\\x8b\\xc9\\xb4\\r\\xa4iV\\xd1o\\x81=\\xd3\\xac\\x12\\xbb\\xf7n\\xd7E\\x18\\x08v\\x81\\xe8B\\x1fP\\xf6\\x7f\\x12\\xb5\\xdf\\x83\\xb4{\\x05\\xb1\\x86\\x1e\\'\\x81\\xea\\n\\xed\\xf7\\x1f\\xd1\\xbeJ\\x9eG\\x1a~\\xa0n\\t]Pwq\\x1d\\x9d\\xc7\\xc7\\x8c\\xd04\\xa8n\\x0b\\xca?\\\\\\x9d\\x08*q\\xad\\x00==\\x07\\x8b\\xb2EX\\xd6\\xd1\\x80\\x96a!B*\\xf3\\x17\\x83\\xc5\\xfe40\\x93-\\x023\\xd9\\xd4\\xc0\\xd8d$Q\\xfd\\x15C3\\xda\"4\\xa3\\xcd@#\\x8c\\x0c\\xfa\\x8aq\\x99n\\x11\\x92\\xe9\\x86 \\x91\\xf4w1_\\x1a\\x14W\\xd6#\\xda\\x93%\\xe7%\\xe6Ko\\x93\\xdb\\xe2\\xba\\xb4\\x98|\\x07R\\x9a\\x86#\\xfc\\x1b\\x06\\xd6Y\\x85\\x0f~\\x15Z_\\xae\\xb6\\x91-\\xceC\\x86W\\x99\\xb6\\xa7\\r\\x04N\\x13F\\xf6\\x0e\\xf51\\xb5\\x0c]H\\x16\\x12\\x1f\\xbeO\\xe6\\x12\\x1f\\x13\\x89\\xc4_\\x01$\\x06\\xcd\\xc6\\xf8e\\xa0\\x1d\\xff\\xccddo\\xa9\\xd8\\\\\\xf7\\xf2\\x1fP\\xfe\\xa1\\xa1\\x85\\xfa3@#^\\xda\\xbf\\xe3\\x82\\xd0\\x1b\\x08\\xd7\\xd2`\\x14\\x02fc\\x9b\\xc8\\n\\x19\\xb3\\xf8\\x86\\xa6e\\xdc\\x11\\xd9\\xb1\\xe3l\\x90\\xe2>\\xba\\xbb\\xafGwe0\\xe86E\\x91/\\x03\\xecAI\\xac\\xb4\\xef\\xca\\'\\xb5\\xda0}x\\x9d\\xbfI\\xb6\\xba\\xbb\\x07w\\xb2\\xa8\\r\\xab\\x9939}ag\\x0b\\xd8\\xd3\\xde^\\x07\\xdbcN\\x9c\\xa8\\xd0!\\xf2\\x01\\xef\\x8fg\\xe1K\\x87Q\\x1d\\xc6\\xfcp\\xbcl\\x19\\xf3\\xcf\\xba2U\\x17\\x0f\\xbd\\xef=\\x07%4l\\xfb\\r\\xc7\\xff\\x15geC+\\x0c}\\xbf\\x176l\\x857\\xd6E\\x04C\\x975*\\x0fK\\x9e\\xeb.\\x86\\x8e;\\xcf?\\x16a[\\x1a\\xa3\\xe4\\xc1\\x94t\\x05\\xfd\\x82}I\\xb3\\x89\\xf7T\\x95l\\xd30]P\\xb5\\xd1\\xce\\x1d\\xc1\\xb8 \\xccA\\xc9\\x8cq\\xbe\\xbf\\x10n>\\x85\\xee\\xdd\\xfdD\\xbdr.\\x8aKV\\xa5\\xdb\\xd3D\\xc0\\xce\\xb3\\xbc\\xe8\\x08\\x06\\xf4\\xf2\\r\\xe6\\x91e\\xafhD\\xb0\\x0c\\x86Tv\\xbd\\xe8_\\x14\\xe77N\\x97\\xc5\\xf4\\xc7\\xa3&\\xa1\\x85\\xd8\\r\\xdc\\xaf&7\\xd2\\x93%Y\\xf5\\xfd8\\xe8*\\xf1\\xc2\\\\2w@\\xc8\\x9e\\xcf\\n\\x16E\\x9bVNT\\xad\\x962\\x87G\\xc5W\\x11\\xed\\x0f\\xa9lj\\x9f]\\xfe\\x90\\xca\\xa9\\x1a\\xd4\\xd4\\xb7\\xe0Jv\\xb0NM\\x1f\\xaeA\\xd4uqp\\xf5\\x94\\xa8\\x0fm9g4\\xaeN\\xf7{\\xb4\\xad\\xe8\\xd3q\\xf2x&f\\xf6\\xc9A\\xe20;\\xc0\\xc9/0\\x08V\\x89\\x91\\x17\\x11\\xe61\\xca\\x10s\\xbc/1#\\x1aQ\\x8a/\\xc3\\xfe\\xcf\\x05s\\x05\\x9e\\\\Z\\x87_\\xd6&\\x83\\xeb&\\x12\\x14WHm:\\xa2\\x9aDCzJ\\x90[\\x06~CfMgiZS[\\x90\\x04\\xd3\\x98\\xc0\\xb2\\r\\x04\\x0f;`\\xc47\\xea\\xc2\"H\\x1e\\x12G\\x18I:5]\\x8d9\\xe9\\x04\\x00k`I\\xa3\\x98Pw\\xd8\\x97,\\x98\\x9c!\\xf4\\x01d\"\\x18\\x96\\xf0\\xaf\\x9e\\xb5\\xf7\\x1f\\xe8\\xd4S\\xfc\\xefm\\xc1\\xe8C\\x0b\\x13\\nOtw\\xd4#\\x16>\\xf0\\xb7\\x80\\xd9;\\xa0\\x9f\\xe8\\x8a\\xe0\\xa8d\\x04s\\x16\\xffBQ\\x8b\\xec\\xc0\\x18\\x99\\x0eha\\xdc\\x8e\\x19\\x8b\\xc5\\xfcI\\x83\\xbe\\xa2\\x00\\'0lmM\\x1e\\xaa\\x18\\xf2:|41\\xa8\\xd7\\xabt \\xae \\xbb\\xfa\\xa4.[\\x86\\x9a\\xbd\\x16\\xfb\\xd5\\xb3h}\\xb7z]Q\\x8e\\xa9|ry\\x88\\x16\\x1el\\xf4\\x1f \\xfc\\xbd\\xed$\\x0c\\x9f\\xdf1G]TX\\x1b\\x00\\xd7\\x06b\\x88a\\xa8\\xc6uA\\x99\\x0e\\xf6\\x9f\\x82R\\x19)\\xd1\\xdd\\x06\\xed\\xe5\\xa5\\xccq\\x99\\xea\\xc9\\xa1\\x9c\\xa8\\x1ee\\x13\\xfb\\xf5N\\x06@\\xe9b\\xa3\\xef\\xea9\\x19\\x19\\xef\\xe9t\\xad<(\\xaf\\x90e\\x17v.\\xe1\\xce&m[\\xad\\xa52\\x83\\xb3j\\xbes\\xa4\\xe4n\\xbb\\xd5\\xec\\x04\\xd4\\x8c\\xb6\\x0b\\xe2@\\xc0\\x96\\x85\\xa2\\x80^\\xdb\\x05\\xa5\\xbf\\x03\\x14\\x07T\\xebu\\xa9\\xa8\\xd6\\x19\\x1c\\xac\\xa0\\xa26\\x9dM\\x1aW jnv5\\xcd\\xb0\\xef\\x1e*\\x85D\\xfb>Y\\xbdIL<*\\xc2F\\x9f\\xd8\\xae\\x9eX\\xe16\\xa3i\\xbc\\x9b\\xc8@\\xef\\xe87\\xc5\\xc3\\xb7\\x13\\x98\\xf0\\xe1\\xfb|*\\x99\\xfa(\\x84\\xd8\\xd58\\x15K\\xc6\\x92Q\\xe8mx&}9\\xf5$\\x8c\\xa1\\xafVY\\xa9\\x1f\\x88\\xfb\\xdf\\xac\\xb2R\\x1f\\xb65\\xbb%\\xf7\\xa4\\x8b\\xee+\\x95\\x95\\xf0\\xa8nGu\\xa1\\xab\\xe6E>=\\xa8;U\\xf1\\xa0s{vY\\xef\\xcb\\'\\x8dQ2Q\\xbd\\x99\\x1d\\xf7\\xda_Hu\\tcb3\\x8a\\xcc\\x1d@\\xbeAE\\xe6\\xc3\\xf7\\xe9\\xc2G\\x9b\\xab3\\x01\\x05\\xc6V\\x89\\xa6\\xa1\\x9ab\\xb9\\xc8\\xefA\\x0b\\x81w#\\xaaK\\x1a(\\x1d\\xb6\\x8d[\\xd1\\x853\\x8c\\xc1lZtL5\\x82\\xbd\\x91,PS\\x08\\x86\\xa7\\xe1\\xba\\x0c(7\\xbe\\x82\\xe2+4\\xa0\\xb2\\x18\\xc2\\x84\\xb0F\\xa1\\xb4kS} \\xd8\\xaeb\\x08*\\xb1HQ\\xf8O~\\x13d\\x12\\xc2%\\xd1\\x804\\x99\\xae\\x14dg+\\xb5\\x9b\\xf7\\xf0st\\x02\\x19&\\xd1Y)\\xcb0F6\\x9b\\x122\\xac\\xda\\x01\\xe4\\xb8\\xa7\\xcb\\x91YT#v\\xd4\\x94\\xee]\\x80\\'\\n\\xa8\\'\\x92\\x1b\\x95\\xc6D\\x8e.\\x86\\xf7\\xcdl^k\\x8a\\xf5er\\x1e\\xda\\xc3kRKM\\xaf*\\xbaD\\x0e\\xdb\\'G\\x83l\\xb7pz\\x99\\x1b\\xcb\\xcc\\x83\\xe4\\xf5\\xc6\\xb3\\xb9\\xb3\\xde\\xa01\\x03z#`o\\x84\\xa5\\x05\\xe8)@V\\x9eC\\xb6).\\xff\\x02\\xde`d^\\x81\\xb3\\xe0H\\x7f\\xb5\\xfc\\xff\\xe8N,\\x7f\\xb3\\xfc\\xbf\\x93=P\\x86\\xb6}~ig8\\xff\\xdf\\xcc<\\xd9\\x8eX0\\x9e\\xce\\xa3\\xea\\xb1y<\\x99\\xb9\\xd9D\\xbe3k\\xd7\\xecV\\xb4\\xdb\\xcfL\\xeeo$5\\xbf+nM,l\\x0eO\\x9b\\x11\\x1a&\\xe0e\\x03B#\\x95\\x10tc\\x1c\\x13R\\x89d\\x1a\\x19\\x0c\\xe3\\xbe\\xb8I9\\xc8k\\x88\\xed\\x08\\xcc\\xdc\\xac\\x00t\\xb0<v-\\xa15uT\\\\\\x01\\x83\\x08!\\x0e\\x06\\xf0Ag\\x01[\\xf8Z;\\x02\\xd1\\xc7\\xc6\\x14/\\xacG\\x990\\xc7\\xa4\\x0e\\x0b]X=3!\\xe2\\xa3\\xc9\\x82O\\x96\\x19]L\\xe8P\\xe0\\x7f>\\xdb\\x1b\\xa3M\\x17\\x84\\xd8#\\x80f\\x13\\xa8a+\"\\xa2o\\xc5&tHML\\x85\\xc1d>\\xde\\xc5;\\xeb\\xf3~\\xbb)6\\x97i\\xf6\\xbcN\\xc7\\xc7m\\x9a\\xb8\\xea\\x0f&\\xd7\\xbax\\xd0R\\x9b7\\x8d\\x9bl\\')\\x8bK6\\x08_\\xd3\\xbf\\xc4>=B\\x9f6\\xcd\\xdaW\\xc3\\x1b\\xec\\xc3W\\xcb\\xb7\\x8f\\xcf\\xc5\\x83o\\x96o7m\\xe5\\xc0\\xd6\\x12\\xed\\x93Ky\\xc1\\xb7_ \\xde\\xed0\\xe4\\xf1S\\xe2\\xae\\x94\\'\\xd5\\xcb|F\\xbf==\\xcd]\\xd5\\xb5C\\xb3\\xa9\\xf6\\xad\\xf1\\x90\\xe4\\xe4\\xe8\\xf6\\x19\\xf2\\x0b\\x08\\xd8\\x0c\\xa7\\x9d\\x00\\xc0\\x9b\\xb63z\\x1cU3\\x06T\\xa6\\x04\\x93\\x81\\xf4@y\\x06\\x16\\x1a\\xb2/2\\xb3aH\\x0f|\\x94-\\xea\\xa0\\xfb\\xddd\\xfc7&\\xd45\\xceT\\xb1B\\xa8\\x9d%(\\x81\\xf7\\x0e\\xd4&\\xb9\\xb8\\xf9}GP\\x98n\\xce\\x96\\x02\\xc8\\x8d\\x81\\xef\\xa2\\x99\\xd2\\x92\\xfaT\\x06\\xdd\\xdc\\xc2~\\xd8d\\x80\\xb6\\x03\\xaf\\x95\\x9d\\xb5\\xcd\\x8c\\x9f$\\xc8\\xb48\\x06Y\\xc1\\xb2h(\\xe4v]\\xf5\\x1a\\xedEMfu\\\\\\xa6\\xc4\\x9a\\xbb_=\\xbdJX\\xe3h\\xf7\\xf8\\xbe\\x7f\\xefv\\xf5\\\\\\xa5Ro\\x1fYwh\\xec\\x9e7\\x8e\\x98\\xf5\\x94\\xd4g\\x8d]\\x9f\\x86\\xe5\\xf0\\x81\\xe0n\\xdf[%\\x96\\xdau\\x1d\\xaaQ\\x9b\\r\\xdb\\xbb!cF\\xc8\\'s\\xec\\xac\\xd7\\x12\\xaf\\x065gVO\\x11\\xda\\xb7\\xc5d\\xe7\\xd8\\xbe?\\x11\\xd5\\x9c\\x88ka\\xde\\x15t\\xa6.:\\xb2\\x19(O\\x0c\\x07F\\x8b8\\xb7V\\xac\\x9c\\x8e\\x89\\x85>\\xff\\xc3\\x8f]\\xac\\t\\xe2\\t3Y>\\x91\\x91\\x0333\\xbeq\\xfb\\xa7\\xa94\\xcd\\x9fh\\x9d\\xc3\\xc6\\xedY\\xaa\\xda\\xd7Ng\\xe70x\\xac\\x1f\\xa8DX\\x8fl\\x9f\\x88\\xbcb\\xcb\\xda\\xbb\\xcc~\\xa0\\xb49\\xaec\\xd8\\n\\xd1\\xa9l0&\\xcc\\xee\\xa3\\n\\x89\\xe2\\x93\\xf8;V\\x83\\xa9\\xa6\\xd8^\\x86\\xf6h v\\xef\\xb2n\\xe3\\xce\\xack\\x83\\xd3\\x93#Q\\xdd\\xddMWf\\xf6\\x85\\xda^\\xe2\\x16\\x7f\\x08\\xc7\\x00\\xfa9v\\x06\\xc7\\xf4\\x04:\\xb3I\\xa3\\xde\\'\\x01\\xff&\\x96t\\'3\\xb4\\xb2|\\xa3\\xaa\\x81\\x9e=:(\\xec\\x0f*\\x07N\\xd8\\xff\\xf8:\\x9a\\xde\\x8e\\xa2\\x90}J\\xf3\\x87\\xc6}&\\xf3pQ6\\xedf\\xed|b\\x99\\xc9Yn7uqQ\\xbdl\\xa8\\xdb5\\xe8\\xbd\\x0e\\x0f\\x9b\\xd1\\x17rM\\xe4\\xc8\\xef_\\x99\\xe5\\x04il\\xb1\\x95Y\\xe2S+3\\x03\\xb9>3\\x08\\t\\x1d\\xb6%\\xc5S\\x14L\\tVj*\\x08\\x04\\xd3$\\xc2>\\x88\\x04\\x85\\xc6\\x842\\xf0P&%\\x1c\\xec\\x98\\xb7\\x84C\\xbe\\x12^\\x9d\\xed\\xcc\\x97s\\xca#z0\\xe1\\xe2\\x11\\xd7z\\xe8\\x8e\\xb4\\x88L\\xc6\\x06\\xb5\\x82\\xa6\\xaa\\xad,\\xcd\\x06\\xd4Q\\xdd\\x9eG\\xf5h\\x93}\\x0f\\x13.4\\xc5\\xee\\xb2T}\\xc8]ej\\xd3;\\xe3\\xd8\\xd1k\\xe5\\xeb\\xb3\\x199)\\xd4k\\xd3\\x87V\\xf5n\\x12\\xd9\\xabR\\xa7\\xe6\\xf6@rzm\\x07\\xf9`14\\x10En\\x12eJY\\xb4\\'\\xd9DY\\xe5<f\\xc8\\xd9\\xecZ\\xee)\\x82\\xbe\\tf\\xdd\\xba\\x13+\\xdf,\\xb3v\\xb2\\xe5\\xcai~\\xfc`e\\xea\\x8bu\\xdc3\\x94\\xbe\\x15\\xd6\\xac\\x8a+f\\xc29\\x1d\\xe7\\xa7\\xe7N\\xf3\"=j\\xbb\\x8e\\x1a\\xcd\\xbb\\x92b\\x1dw\\xcf\\x9c\\xd3\\x95\\xac\\xf9\\xf5\\xab\\x9e\\x85\\xdd?\\xba\\xc6\\x9cY\\xb5\\xe1B`}\\xe7\\xfc\\nWN\\x925}-\\xd7a\\xfd\\xf3hf\\x11\\ts\\x89\\xd40\\']d\\xef\\x97\\xd6A\\xe57\\xafZ\\xff\\x00\\x19o\\xe3U\\xac\\xcb\"\\xa6\\x11\\x9b\\x11}\\x18\\x85\\xf1t\\x81\\x1bO\\xd9\\xe0\\xb6\\xbc\\xbd\\x1e\\xa0Ss\\xcb\\xe0\\xc3-\\x7f\\xcfu\\xf68hz8\\xe6\\x89\\n\\xf0\\xf1\\x1e\\xb1\\xa8w\\xab\\x10\\xf6\\x87!/f*\\xfd\\xb58\\xa0\\nJ\\xf7\\xf5\\xb2\\x1a:\\x9eN\\xeb\\x83}3}\\xdd\\x87\\xef\\xcej\\x0f\\x99\\xa9S\\xd1\\xc8\\xd5)\\xcd\\x02\\x07D\\xbds\\xd1\\x13.$BN\\x88\\x1b\\x00\\x90{\\x9b\\x19\\x88,\\xb5.;RgX\\xd3M\\xf3\\xbag0\\x8an\\t\\x86\\xb5\\x10\\xce\\x18\\xc6\\x12\\xc1\\xde\"\\xda\\xbeZ\\x86\\xd8\\x9e\\x89\\xd5o\\x96!&\\xedl\\x938\\xa7\\x0f\\xd9\\xcc\\xf5\\x82!\\xbeo\\xfe<\\x99A\\xf39\\x14\\x9cE\\xdb\\xe1\\xae\\x95\\xa7\\xb3\\xac\\xd6,\\xb4\\xadB2\\x7f/\\xba\\x93\\x165\\xb4j#\\xa9\\xb5\\x86\\x9di\\xe3h\\xba\\xbdMx\\x9f\\x87\\x13mDiV\\xab\\x80\\xb3\\r(\\xcd\\x9e[\\xc2\\x97\\x0f\\x01VU\\x14d\\xebqn\\x16\\xf1\\\\\\x19\\x86\\xcbll\\\\\\xaa\\x8c\\x88\\x10{\\xc5\\x7f\\xc9T\\x8cK\\x9et,\\x19\\x13\\x9eo\\x10\\xd8\\x12\\x14\\xce\\t\\xff+\\xab\\x92> \\x0bc\\x1e^]\"t\\xaad\\r\\x851\\xb1\\xec\\xa5\\x0f7\\xa5@{k@h\\x7f\\xd4#S\\xcb\\xd0y\\xd8\\x10\\x98\\xe11S5\\xe3\\xf6\\xd4v\\xc8\\x88x\\x0e\\xaa\\x07o\\x83C\\x9e;\\xa9\\x98\\x0b\\x0b\\x85\\xf2:&\\x1e\\x904\\xf5\\xa6(//\\xfe\\xd2d<n4\\x1er\\x89:!\\xe9\\x9b}Z?=\\xbf;\\xd0\\x0ef\\x8d\\x07\\x904h\\xdd\\xc0\\xd8\\xaa!\\\\\\xec\\xa0F\\xc0s\\xbd\\xf3]M\\xc7D\\xe8i\\xc6\\x00Qx\\xaeRbmN\\xc8\\xbc\\x02S(hB\\x9b\\x9d\\xf2!g\\xf7\\x02e_\\xad\\x94\\xe9\\x9c\\x8b\\xb5oV\\xca4\\x07\\x9d^\\x85\\xe6.\\x86W\\x87!\\x1b\\xc9;\\xe7\\xc7vd\\xc8\\xf1\\xd3\\xf9S\\xcd\\xb4\\x9c\\xde\\xb0>\\x12E\\xb5#w\\xee$w\\x9c\\xba\\x9e\\xe5.\\xaf\\xa7jf\\xbb\\x1b\\xb9\\xdf\\x89\\xa0\\xcd\\x08\\x88& d\\x03\\x02\"Y\\x80\\xc5\\xbc\\xe90\\xb3J&hVi\\xa1W\\x1b(H\\x97(:O4I\\xc0\\xf4\\x15\\x84\\xf9\\xa8\\x81\\xa0F8\\xf3\\xec\\xf06\\xa6\\x0f\\x03\\xe7\\xa3\\xff\\xbf\\xa0\\xd9\\xf2\\x8f?\\xc1\\x8c4\\xd9(\\x98\\x06\\xb5\\x81a\\x15\\xa1Zv\\xc1wO\\xb1\\xe8C|{\\x16\\x1f,a\\x02\\xab>\\xe1\\xc7)\\xb6\\xdd\\x14\\xcb;c\\n\\x8cn\\xe4\\x95\\xa8\\xb7~\\x82\\x96]4\\xebC\\xb5\\xb8\\xad\\xaa\\x08z\\xb6\\xae\\xbc\\xd5\\xd0\\xf2y\\x96<\\x9e\\x9e\\xc15\\xff\\x98e\\x18\\x0e\\xcc}\\xe6M8\\x83\\x19RN\\xc3\\x8fX@:\\x89W\\xce\\x98\\x02\\x11]\\xa8\\x11\\xec\\x8a\\xe8\\xec\\x8f\\x89\\x01\\xb0@L\\xae\\xbf\\xc8i5\\xc5\\xc1\\xf2\\xe2\\xf6\\xfe\\xaa\\xd3~h\\xcd\\xae\\xcfG\\xa3\\xa3\\xa3\\xe3\\xd3\\xab\\xd6\\xee\\xe5iFI9\\x17\\xb5e[;\\xfa\\xd6\\xbc.\\x84\\x163|o\\\\\\x93lJ\\xde<\\x83,\\x941\\x88 DOh\\xf5\\xf2\\x03\\xc7P\\x08?_\\xad\\x9c\\xe9\\x1e\\xe0\\xe6\\x95oT\\xceL\\x8e\\x8f\\xe4]\\xe9\\xf0|\\xd8M\\xcc\\xe5\\xcc\\x0bS\\xc3\\x9b\\x1cK\\xd3\\xc3\\x9f \\xc1)2\\x9f$K\\xd3d;\\x12\\xa8\\xf3t\\x1a\\xd5\\x1a\\xddkz^;?\\xc9\\xb5\\xd2e\\xe3h\\xbf\\x91/O\\xa6\\xa9\\x94\\xd5\\xb1[\\xdb\\x93@\\x1b\\xe7*\\x9b\\x91G\\xe7\\x80\\x9eM\\xc8\\xa3]a$Q\\x90F\\x89|P\\x1a\\xfd\\xd7s<\\xe9\\xbfq\\xc9Q>=\\x11*g|\\xa3P\\xf2\\xa3\\x00u4\\xfd:\\x90e\\xe9\\x92\\xab\\x08\\xc7\\xb4/\\xab\\xd4\\x99\\xc5\\x84tLh\\xbbL\\xa6\\x10\\xdb\\x89\\xca\\x9e\\x9d\\x1f\\xf9[\\xa8\\x91\\x9f\\x85\\x16\\xba\\xff\\xfd\\x13\\x04\\x83G\\xfd\\xd1\\x92\\x80?@3\\x85\\xdcn\\xf6cL\\xa8\\xa3u\\xce\\xb4\\x1e\\x1d2\\xdf\\x00\\xb6q\\xa3?\\xcc\\x15T\\xf0c#I1\\x8d\\x89\\xa4\\xb2\\xb1\\x960\\x9b\\x02\\xe8\\x13\\x9e\\x86\\xc15\\x90\\xb5O`\\xa8\\x97Mq\\xb8\\xac[5\\x1a\\xc6\\x904N\\xaf\\x0f\\xfbV\\xdeN4.G\\xe3\\xf4\\xfd\\x89\\x06\\xf7xZ\\xe6\\x97\\x9a1\\x11\\xce\\x8d\\xdf\\xbaa\\xdf\\xfa\\x92\\x8fV\\xd6\\x0cW\\xf1d\\xf7>\\xc0\\xb0)I\\xf1\\x02>B\\xab\\x91\\x05Z\\xbeZ\\xb9p1\\x13\\x8f\\xbeY\\xb9P\\x16\\x9b\\x1a\\x89V\\x9b\\x15W\\x9e\\xcb\\x857\\xd0\\xfav\\xb8\\xfc\\xcd\\x8a\\xb9\\xa0+\\x8d.\\xd9M:\\'\\xe9\\xecQK\\xee6;V#\\x17\\x9d\\xe6o\\xb3\\xed\\xed9i\\xdf\\x80\\x88\\xcd\\xf0o\\t\\x00\\xdf\\x04\\xff\\xce\\xcf\\xd7\\x13a\\x0e\\xfe\\xe2v/\\xe5qL4\\xc34\\x1f\\x17[\\xb9\\x84{\\x97\\x06|\\xb1\\xdc\\xf7\\x1a\\xdc!\\xbb3w\\xd1\\xda:\\xed\\xf7\\xf9\\x86Z,\\xc9\\xbc\\xb8=\\n5q\\xee\\xc3\\xf7}y\\xa1\\x1em\\xfe\\x06\\xfd\\xbdX\\x15.4\\xf8\\x07\\x8a\\xfbI\\xde\\x1d7V\\xa2 0\\xfd`|$\\xab\\x08,K]N\\xb0\\xbe\\xfb4+K\\x98\\xfd,e\\x08\\x0f\\xa7#M\"\\xf7\\x9b\\x87)\\x04Xl\\xdb\\x90\\xe9#\\\\\\xfd\\xfb\\xafH\\x90\\xe9EBAN_\\x1f\\xa5r\\x1el)\\x1c?\\xc1\\x9cS\\xee\\xfeH^\\xe2\\xcc,!Z\\x9e\\xb1e\\xe9e\\x9a\\xe6{\\tx\\xf0\\xf2u\\xe2r%\\xdb\\xf5\\xfa\\x15\\x1d\\x88\\x11\\x0e\\'\\x92\\x92W\\x19\\xf7\\xe9\"\\x89\\x9a\\xabC@\\xac\\x0c\\x17\\x9a\\xe4\\xf1B7\\t\\x1c\\xf7V\\xae\\x0b\\xdbt\\xb0\\x1f\\x80\\x8d\\xd7\\xf5\\x14\\xb4``\\xd8\\xed\\r\\x93\\xe3\\xd9\\x1d\\xd7\\x84\\xe5\\xba<(\\x07`\\xf1k\\xfb\\xdb\\x0c\\x14g.\\xffL\\xaf\\x0b^gp\\x10\\x00\\xcfcU\\xe9/5X\\x8c\\xf3\\xad\\x0b\\n\\x1d\\x1c\\x06@aU\\xfd}\\x86\\t~\\xd7\\x85k:\\xa8\\x04\\x87\\x08.\\xbe\\xd4\\xf0\\x84\\xce \\xaf\\t\\xceMyP\\r\\x80\\x13\\xaa\\xf2\\xef3\\\\\\xca\\xbaTx\\xd3\\x19\\xd4\\x82\\xa3\\xa5\\xac\\xa0\\xc1Uq\\x7f\\xe7\\x92\\x17\\x83\\xe9\\xf4a\\x1d\\x1c\\xf1\\x85\\x9e\\x07>\\x0f\\xf9\\xf3\\xa6\\x00\\xdfX\\x15\\x06\\x19d\\xe1p\\xc3T\\x01x\\xf5\\xee\\x99\\xad\\xd0G]oI9\\x971\\xaa\\xf0\\x93\\xa0\\xc0\\x8b\\x0c|\\xd1\\x14K\\xac\\xecE\\xf9Mq\\x0c\\xfb\\xda\\xc6\\x1e\\x87\\xdc\\x0f\\x13\\xf9\\xa6z\\xb3\\xe9`\\xbd\\x89p\\xbd\\xc9p\\xc5su\\xb4\\xaf\\xad\\x19\\xe6\\x89\\xd0\\xd2\\x8a\\x0cq\\x9c\\x02\\x1c\\xd0SK\\xc9\\x84O\\x0e\\'o\\xc5\\xd0n\\xe69HR\\x9c*>#\\x18\\xa9m\\x80\\x91\\xfe\\xec`\\xa4\\xb7\\x01F\\xe6\\xb3\\x83\\x91\\xd9\\x06\\x18\\xd9\\xcf\\x0eFv\\x1b`\\xe4>;\\x18\\xb9m\\x80\\xb1\\xfb\\xd9\\xc1\\xd8\\xdd\\x06\\x18\\xf9\\xcf\\x0eF~\\x1b`\\x14>;\\x18\\x85m\\x80\\x91L\\x04\\xe1X\\x88\\xeeP\\xaa\\x19\\x9e\\x98\\xd6s\\x04~f\\t\\xf9|G\\xde\\x84\\x81B.\\x80\\x81\\xdddP\\x07\\x08\\xba<W\\xa5\\xc6\\xe0\\x8a!*\\x11\\x91\\xbd\\x8eK\\xf1X\\xd8\\xdc\\xc4(\\xad\\xd2\\xc2\\x16\\xca\\xa3|\\xc0\\x15\\xa7\\x1e\\xe2*\\xacD&\\x0b,=y\\xe2c\\x000O-\\x0b\\xe8\\x95\\x922\\xc6`\\xc3\\xca\\xed\\xab1\\x1c0\\x85\\x08\\x12~\\xfc\\xc8\\xado\\x0bU\\xd55M\\xc3r\\xd0&\\xc9+\\x8d\\xf7\\xa8\\x1e\\x97t{B\\xac\\x989\\xfd\\x99_\\x95\\x92\\xe9Lf\\xb7\\xc0\\xea\\xe6iR\\xf6D\\x8cC\\x86g\\x005\\t\\xf7\\xf4\\xfbI\\xaax\\x8e\"\\xafr\\xc704;\\xde\\'D\\xc1Q\\x80\\xb6\\xac1\\x99\\xc6\\xd1\\x10\\xf7\\xb3\\xc9\\xb7\\xe6\\xd4\\x95R\\xb2\\x90\\xe3\\n\\xb2K\\xaci\\x00 \\xaf\\x9dC~ |\\xeeLG\\x85~an3\\xc3\\x96j\\x1f\\xc3}m5\\x861\\xcf\\x860\\xbfz\\x19\\xd9\\x18\\x0e_v\\t\\xd5\\xb8\\xb1\\x8b\\'fY\\x02\\xd0O\\xa4$a\"\\x8d\\x96\\xdb\\xd3\\xa8L\\x9d\\xc7g\\n\\x99\\x06\\xbe&v\\x1c\\xa3\\xa4H\\xf2\\x14Z(\\x1bz\\x1f\\xf0\\xa8;\\x94\\x85\\xdd\\xff\\xd4\\x87\\x18u\\xc5\\xe6\\x9f)\\xd4\\x0b\\xda\\xbd\\xba?=\\xc3u\\x98\\xc53\\xb2\\xf7?\\xb8I\\xcd\\xe4\\xc7\\xbf\\x16@<M\\x89\\xe1\\x85\\x0f\\xb7T\\xfb\\xd6KQ\\x13\\xd6\\xeb\\x83\\x94\\x8d\\xd1\\xd4\\x17\\x14\\xfer\\xd2\\xbc\\xe5\\x1cy\\x04\\x93\\xf1AK+3\\'\\xcfs\\xc6\\x1e\\xd6\\x85\\x92_\\x94\\'\\x8e}\\x92\\xa4\\x0fslF\\xe2\\x0fwv\\xfc6\\x0e?\\xc3\\x12\\\\\\xc6T3F\\xf4\\xdbn\\'vy\\x92\\xbe2;\\xb3\\xe8~5\\x1f;\\x8d\\x8fJv\\xefV%;J\\x1c\\x18\\xca]\\x1c\\xa8.\\xee\\x94f2`\\xd3\\xb2Kb\\xf9\\xbc\\x900\\xaac\\xa5&\\xed\\x9e\\x1f\\xa7.o\\xeb\\xed\\xab\\xa4\\x9d\\xddo=\\\\\\xd7k\\xa4;f\\x87\\xea^\\x99\"\\xd0\\xeb\\xbf\\xb4\\xc8\\xd5(\\xc91\\xf9\\xc7\\xdf#\\xd2\\x80\\xe8\\x91\"\\xfa9v\"r\\xf0Z\\xc3t\\xe6\\x91bD%\\xd4\\xd2\\x0cc\\x84\\xc9\\xc1ML\\xeb\\xa8\\xfaE\\x14\\xf5\\xde\\x99_\\xdbP\\x14\\xde\\x02\\x0b\\xf1\\x9e\\xb0\\x141\\xc5\\xc8<Y\\x01\\xbc\\xa4v\\x0f>N\\xe5w\"w\\xd2(RL\\xc0_\\xdb\\xd0M\\xff\\x0bm\\xe4_\\x8d\\xec\\x01\\xd4\\xf7{D\\xa6=\\xa8/r\\xd8\\xefK2\\tOi\\xec\\xc9t\\x84/m[\\x9a\\x92\\x19\\x8f\\'#\\x13\\xc7\\xc18\\x85\\x8e\\x8a\\xfb\\x1fM\\xe0.E(\\xa8\\xc9\\xc3)\\x94<\\xfa\\xd5M$R9fP\\xa6HvP\\x1f\\xeed\\x94\\xb12m\\xc4Z\\x02\\x1e+\\xb1c@\\xa6\\xe6\\xda\\xf0\\xd8\\xb0\\x87\\x08\\xc5)Z\\x9b\\xf9\\x19[\\x89\\xda\\x14?0a\\x9c\\xe1M\\x99\\xb5h\\xbb\\x83\\x01\\xb1\\x99\\x17M\\xe2\\xe6\\xe9G\\xe7Q@&f\\xd1\\xd1#\\xdb)96p\\x13\\x0ev!]\\xf6&\\xc6\\xaf\\x11?_\\xd8\\xaf\\x11\\xf6\\xe2P\\r\\xa5\\x07\\xe3\\x85\\xe3\\x12\\x7f\\x17\\xe3\\x8db7;\\xbcb\\x82H\\xb5{\\x14{\\xb8\\xe0\\xa7xB\\x8a\\xa5\\xaf\\xc1\\x97\\x18\\xb26\\xf8\\x92\\xcf\\xb4\\xc8\\x9f;\\x11\\x1d\\x87\\x8c\\xa3\\xdb\\x18[\\x80mxf\\xdeCa\\xc6\\xea\\xe0[\\xe8\\xa1\\xa9\\xf8E\\xac>\\x94\\xfe\\x85\\xbf\\x13<\\xd3-\\xd6\\xcf\\xee}\\x13\\xe1\\xfc\\x01\\xb3D\\xcd\\xefB\\x06\\x8f\\xf9Sn#\\x9d\\xdf\\xfav\\xb8\\xc5\\x03\\xf8]\\xdc(\\xfd\\xc8ox\\x03\\x1dJ&\\xf0\\x82D\\x8aY\\xf8\\xeb\\x18C\\xe8\\xf2\\xb8\\xa0\\xea\\x85\\xc3\\x93\\xd6E\\xaa|\\x9f\\xbc8\\x10\\xdd\\x9c\\xabds\\xe7\\xb3\\xe1\\xb4\\x1d\\xf9\\xf3\\xa7\\x17\\xd3c\\x86s\\xe5\\xca\\x8aQ\\xfa\\xddK\\xd9\\x90\\xd8\\xe1r8\\xf1\\xe7\\x934\\xa8\\x92\\x9f\\xf2\\x98b\\x18\\x90K,\\xb6\\xd3\\x0b=\\xab\\xb1:0_\\xf0w\\xd2\\x1f\\x7f|\\xd7\\xfb\\t?\\x93\\xfd\">Fv\\x80\\xb1\\x95;\\x9dd\\xd9\\x18\\x99\\x92\\x13)\\x95d\\xf4\\xb4\\xc1e\\xd3P\\xc8\\xcf\\xf2\\xbc\\x9c\\x97\\x9f\\xb3(\\xc7\\x90\\xc3\\xedH%%\\xc6\\xe7\\xa7\\xdf\\xb4\\x7f\\xef5+}\\xf8\\xd0\\xfb\\xf0\\xe1G\\xe9\\xbb\\xd2\\x02\\xae\\x18\\x83\\xe6\\x8f?z\\xa1\\x87\\x1c\\xd6E\\xea[\\x96T\\x13\\xd0\\x0e\\xff\\xe2\\xbcJL\\xb0\\xfb\\xf3\\x07/\\xbbn\\x8fN\\xbc\\xf4\\xba=\\xaa\\xb2\\xf4\\xba\\xe1$\\xbf\\xc0\\x1f\\x97\\x93\\x98.1\\xc9\\xb8\\xc7\\xa3Q\\x08\\xec\\xfd?\\x00\\x00\\x00\\xff\\xff'\n", |
| " padding = '\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00'\n" |
| ] |
| }, |
| { |
| "output_type": "stream", |
| "stream": "stdout", |
| "text": [ |
| "\n", |
| "###[ HTTP/2 Frame ]### \n", |
| " len = 0x5b\n", |
| " type = DataFrm\n", |
| " flags = set(['End Stream (ES)', 'Padded (P)'])\n", |
| " reserved = 0L\n", |
| " stream_id = 5L\n", |
| "###[ HTTP/2 Padded Data Frame ]### \n", |
| " padlen = 80\n", |
| " data = '\\x03\\x00\\x1d\\x82P[\\x14\\xaa\\x00\\x00'\n", |
| " padding = '\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00'\n", |
| "\n" |
| ] |
| } |
| ], |
| "prompt_number": 137 |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "Let's display the answer in human-readable format. We assume, once more for the sake of simplicity that we received very few headers." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "collapsed": false, |
| "input": [ |
| "stream_txt = srv_tblhdr.gen_txt_repr(h2seq.frames[0])\n", |
| "data = ''\n", |
| "for frgmt in h2seq.frames[1:]:\n", |
| " data += frgmt.payload.data\n", |
| "print(stream_txt)\n", |
| "HTML(zlib.decompress(data, 16+zlib.MAX_WBITS).decode(\"utf-8\", \"ignore\"))" |
| ], |
| "language": "python", |
| "metadata": {}, |
| "outputs": [ |
| { |
| "output_type": "stream", |
| "stream": "stdout", |
| "text": [ |
| ":status 200\n", |
| "date: Tue, 13 Dec 2016 17:36:19 GMT\n", |
| "p3p: CP=\"This is not a P3P policy! See https://www.google.com/support/accounts/answer/151657?hl=en for more info.\"\n", |
| "server: gws\n", |
| "content-length: 4420\n", |
| "expires: Fri, 16 Dec 2016 06:23:59 GMT\n", |
| "set-cookie: NID=91=Wt1Jkm3Eretgg-hJ32fkj7kSSOLTc8tfEEIP5F2QTzHqbsXcCFve-QoN1oZvkGEqqqAWklc2wlj97YDkMnGXQUw20iCYMc3FD6X-KVuK1wdFURafcqQMQZ8e-F14YUfn; expires=Wed, 14-Jun-2017 17:34:51 GMT; path=/; domain=.google.fr; HttpOnly\n", |
| "alt-svc: quic=\":443\"; ma=2592000; v=\"35,34\"\n", |
| "date: Tue, 13 Dec 2016 17:36:19 GMT\n", |
| "cache-control: private, max-age=0\n" |
| ] |
| }, |
| { |
| "html": [ |
| "<!doctype html><html itemscope=\"\" itemtype=\"http://schema.org/SearchResultsPage\" lang=\"fr\"><head><meta content=\"text/html; charset=UTF-8\" http-equiv=\"Content-Type\"><meta content=\"/images/branding/googleg/1x/googleg_standard_color_128dp.png\" itemprop=\"image\"><link href=\"/images/branding/product/ico/googleg_lodp.ico\" rel=\"shortcut icon\"><title>scapy - Recherche Google</title><style>#gbar,#guser{font-size:13px;padding-top:1px !important;}#gbar{height:22px}#guser{padding-bottom:7px !important;text-align:right}.gbh,.gbd{border-top:1px solid #c9d7f1;font-size:1px}.gbh{height:0;position:absolute;top:24px;width:100%}@media all{.gb1{height:22px;margin-right:.5em;vertical-align:top}#gbar{float:left}}a.gb1,a.gb4{text-decoration:underline !important}a.gb1,a.gb4{color:#00c !important}.gbi .gb4{color:#dd8e27 !important}.gbf .gb4{color:#900 !important} </style><style>.star{float:left;margin-top:1px;overflow:hidden}._yhd{font-size:11px}.j{width:34em}body,td,div,.p,a{font-family:arial,sans-serif;tap-highlight-color:rgba(255,255,255,0)}body{margin:0}a img{border:0}#gbar{float:left;height:22px;padding-left:2px;font-size:13px}.gsfi,.gsfs{font-size:17px}.w,.q:active,.q:visited,.tbotu{color:#11c}a.gl{text-decoration:none}._Umd a:link{color:#0E1CB3}#foot{padding:0 8px}#foot a{white-space:nowrap}h3{font-size:16px;font-weight:normal;margin:0;padding:0}#res h3{display:inline}.hd{height:1px;position:absolute;top:-1000em}.g,body,html,table,.std{font-size:13px}.g{margin-bottom:23px;margin-top:0;zoom:1}ol li,ul li{list-style:none}h1,ol,ul,li{margin:0;padding:0}#mbEnd h2{font-weight:normal}.e{margin:2px 0 0.75em}#leftnav a{text-decoration:none}#leftnav h2{color:#767676;font-weight:normal;margin:0}#nav{border-collapse:collapse;margin-top:17px;text-align:left}#nav td{text-align:center}.nobr{white-space:nowrap}.ts{border-collapse:collapse}.s br{display:none}.csb{display:block;height:40px}.images_table td{line-height:17px;padding-bottom:16px}.images_table img{border:1px solid #ccc;padding:1px}#tbd,#abd{display:block;min-height:1px}#abd{padding-top:3px}#tbd li{display:inline}._ITd,._JTd{margin-bottom:8px}#tbd .tbt li{display:block;font-size:13px;line-height:1.2;padding-bottom:3px;padding-left:8px;text-indent:-8px}.tbos,.b{font-weight:bold}em{font-weight:bold;font-style:normal}.mime{color:#1a0dab;font-weight:bold;font-size:x-small}._lwd{right:-2px !important;overflow:hidden}.soc a{text-decoration:none}.soc{color:#808080}._AC a{text-decoration:none}._AC{color:#808080}._kgd{color:#e7711b}#_vBb{border:1px solid #e0e0e0;margin-left:-8px;margin-right:-8px;padding:15px 20px 5px}._m3b{font-size:32px}._eGc{color:#777;font-size:16px;margin-top:5px}._H0d{color:#777;font-size:14px;margin-top:5px}._HLh{border:1px solid #e0e0e0;padding-left:20px}._Tki{border:1px solid #e0e0e0;padding:5px 20px}#vob{border:1px solid #e0e0e0;padding:15px 15px}#_Nyc{font-size:22px;line-height:22px;padding-bottom:5px}#vob_st{line-height:1.24}._Tsb{border-width:1px;border-style:solid;border-color:#eee;background-color:#fff;position:relative;margin-bottom:26px}._Peb,._Qeb,._Usb{font-family:Arial;font-weight:lighter}._Peb{margin-bottom:5px}._Peb{font-size:xx-large}._Qeb{font-size:medium}._Usb{font-size:small}._Tsb{margin-left:-8px;margin-right:-15px;padding:20px 20px 24px}._rOc{border-spacing:0px 2px}._sOc{max-width:380px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;padding-left:0px}._v9b{padding-left:15px;white-space:nowrap;color:#666}._pOc{padding-left:0px}._rkc{color:#212121}._HOb{color:#878787}._lMf{color:#093}._jMf{color:#c00}._kMf{padding:1px}._CKg{color:#dd4b39}.gssb_a{padding:0 10px !important}.gssb_c{left:132px !important;right:295px !important;top:78px !important;width:572px !important}.gssb_c table{font-size:16px !important}.gssb_e{border:1px solid #ccc !important;border-top-color:#d9d9d9 !important}.gssb_i{background:#eee !important}#res{padding:0 8px}#rhs_block{padding-top:43px}#_FQd{padding:0 8px}#subform_ctrl{font-size:11px;height:17px;margin:5px 3px 0 17px}.taf{padding-bottom:3px}._chd{padding:20px 0 3px}._bhd{padding:20px 0 3px}#topstuff .e{padding-bottom:6px}.slk .sld{width:250px}.slk{margin-bottom:-3px}.slk ._z3b{padding-bottom:5px;width:250px}._QPd{margin-top:1px;margin-bottom:-11px}._zuc{color:#545454}._Auc{padding-top:2px;padding-bottom:1px}._Buc{padding-top:1px;margin-bottom:14px}.ac,.st{line-height:1.24}.mfr,#ofr{font-size:16px;margin:1em 0;padding:0 8px}._tLi{padding-bottom:25px}.s{color:#545454}.ac,._JEe{color:#545454}a.fl,._cD a,.osl a{color:#1a0dab;text-decoration:none}a:link{color:#1a0dab;cursor:pointer}#tads a:link{color:#1a0dab}#tads .soc a:link{color:#808080}#tads ._AC a:link{color:#808080}._AC a:link{color:#808080}._AC a:visited{color:#808080}._AC a:hover{color:#808080;text-decoration:underline}a:visited{color:#61C}.blg a{text-decoration:none}cite,cite a:link{color:#006621;font-style:normal}#tads cite{color:#006621}.kv{font-size:15px}.kvs{margin-top:1px}.kv,.kvs,.slp{display:block;margin-bottom:1px}.kt{border-spacing:2px 0;margin-top:1px}#mbEnd li{margin:20px 8px 0 0}.f{color:#808080}._pJb{color:#093}h4.r{display:inline;font-size:small;font-weight:normal}.g{line-height:1.2}._sPb{display:inline-block;vertical-align:top;overflow:hidden;position:relative}._Gnc{margin:0 0 2em 1.3em}._Gnc li{list-style-type:disc}.osl{color:#777;margin-top:4px}.r{font-size:16px;margin:0}.spell{font-size:16px}.spell_orig{font-size:13px}.spell_orig a{text-decoration:none}.spell_orig b i{font-style:normal;font-weight:normal}.th{border:1px solid #ebebeb}.ts td{padding:0}.videobox{padding-bottom:3px}.slk a{text-decoration:none}#leftnav a:hover,#leftnav .tbou a:hover,.slk h3 a,a:hover{text-decoration:underline}#mn{table-layout:fixed;width:100%}#leftnav a{color:#222;font-size:13px}#leftnav{padding:43px 4px 4px 0}.tbos{color:#dd4b39}._AEd{border-top:1px solid #efefef;font-size:13px;margin:10px 0 14px 10px;padding:0}.tbt{margin-bottom:28px}#tbd{padding:0 0 0 16px}.tbou a{color:#222}#center_col{border:0;padding:0 8px 0 0}#topstuff .e{padding-top:3px}#topstuff .sp_cnt{padding-top:6px}#ab_name{color:#dd4b39;font:20px \"Arial\";margin-left:15px}._fld{border-bottom:1px solid #dedede;height:56px;padding-top:1px}#resultStats{color:#999;font-size:13px;overflow:hidden;white-space:nowrap}.mslg>td{padding-right:1px;padding-top:2px}.slk .sld{margin-top:2px;padding:5px 0 5px 5px}._Mvd,.fmp{padding-top:3px}.close_btn{overflow:hidden}#fll a,#bfl a{color:#1a0dab !important;margin:0 12px;text-decoration:none !important}.ng{color:#dd4b39}#mss{margin:.33em 0 0;padding:0;display:table}._mY{display:inline-block;float:left;white-space:nowrap;padding-right:16px}#mss p{margin:0;padding-top:5px}.tn{border-bottom:1px solid #ebebeb;display:block;float:left;height:59px;line-height:54px;min-width:980px;padding:0;position:relative;white-space:nowrap}._UXb,a._UXb{color:#777;cursor:pointer;display:inline-block;font-family:arial,sans-serif;font-size:small;height:54px;line-height:54px;margin:0 8px;padding:0 8px;text-decoration:none;white-space:nowrap}._Ihd{border-bottom:3px solid #dd4b39;color:#dd4b39;font-weight:bold;margin:2px 8px 0}a._Jhd:hover{color:black;text-decoration:none;white-space:nowrap}body{margin:0;padding:0}._sxc{display:inline-block;float:left;margin-top:2px}._Hhd,a._Hhd{margin-left:1px}.sd{line-height:43px;padding:0 8px 0 9px}a:active,.osl a:active,.tbou a:active,#leftnav a:active{color:#dd4b39}#_Xud a:active,#bfl a:active{color:#dd4b39 !important}.csb{background:url(/images/nav_logo229.png) no-repeat;overflow:hidden}.close_btn{background:url(/images/nav_logo229.png) no-repeat -138px -84px;height:14px;width:14px;display:block}.star{background:url(/images/nav_logo229.png) no-repeat -94px -245px;height:13px;width:65px;display:block}.star div,.star span{background:url(/images/nav_logo229.png) no-repeat 0 -245px;height:13px;width:65px;display:block}._nBb{display:inline;margin:0 3px;outline-color:transparent;overflow:hidden;position:relative}._nBb>div{outline-color:transparent}._O0{border-color:transparent;border-style:solid dashed dashed;border-top-color:green;border-width:4px 4px 0 4px;cursor:pointer;display:inline-block;font-size:0;height:0;left:4px;line-height:0;outline-color:transparent;position:relative;top:-3px;width:0}._O0{margin-top:-4px}.am-dropdown-menu{display:block;background:#fff;border:1px solid #dcdcdc;font-size:13px;left:0;padding:0;position:absolute;right:auto;white-space:nowrap;z-index:3}._Ykb{list-style:none;white-space:nowrap}._Ykb:hover{background-color:#eee}a._Zkb{color:#333;cursor:pointer;display:block;padding:7px 18px;text-decoration:none}#tads a._Zkb{color:#333}.sfbgg{background:#f1f1f1;border-bottom:1px solid #e5e5e5;height:71px}#logocont{z-index:1;padding-left:4px;padding-top:4px}#logo{display:block;height:49px;margin-top:12px;margin-left:12px;overflow:hidden;position:relative;width:137px}#logo img{left:0;position:absolute;top:-41px}.lst-a{background:white;border:1px solid #d9d9d9;border-top-color:silver;width:570px}.lst-a:hover{border:1px solid #b9b9b9;border-top:1px solid #a0a0a0;box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.lst-td{border:none;padding:0}.tia input{border-right:none;padding-right:0}.tia{padding-right:0}.lst{background:none;border:none;color:#000;font:16px arial,sans-serif;float:left;height:22px;margin:0;padding:3px 6px 2px 9px;vertical-align:top;width:100%;word-break:break-all}.lst:focus{outline:none}.lst-b{background:none;border:none;height:26px;padding:0 6px 0 12px}.ds{border-right:1px solid #e7e7e7;position:relative;height:29px;margin-left:17px;z-index:100}.lsbb{background-image:-moz-linear-gradient(top,#4d90fe,#4787ed);background-image:-ms-linear-gradient(top,#4d90fe,#4787ed);background-image:-o-linear-gradient(top,#4d90fe,#4787ed);background-image:-webkit-gradient(linear,left top,left bottom,from(#4d90fe),to(#4787ed));background-image:-webkit-linear-gradient(top,#4d90fe,#4787ed);background-image:linear-gradient(top,#4d90fe,#4787ed);border:1px solid #3079ed;border-radius:2px;background-color:#4d90fe;height:27px;width:68px}.lsbb:hover{background-image:-moz-linear-gradient(top,#4d90fe,#357ae8);background-image:-ms-linear-gradient(top,#4d90fe,#357ae8);background-image:-o-linear-gradient(top,#4d90fe,#357ae8);background-image:-webkit-gradient(linear,left top,left bottom,from(#4d90fe),to(#357ae8));background-image:-webkit-linear-gradient(top,#4d90fe,#357ae8);background-color:#357ae8;background-image:linear-gradient(top,#4d90fe,#357ae8);border:1px solid #2f5bb7}.lsb{background:transparent;background-position:0 -343px;background-repeat:repeat-x;border:none;color:#000;cursor:default;font:15px arial,sans-serif;height:29px;margin:0;vertical-align:top;width:100%}.lsb:active{-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.3);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.3);box-shadow:inset 0 1px 2px rgba(0,0,0,0.3);background:transparent;color:transparent;overflow:hidden;position:relative;width:100%}.sbico{color:transparent;display:inline-block;height:15px;margin:0 auto;margin-top:2px;width:15px;overflow:hidden}</style><script>(function(){window.google={kEI:'kzFQWN-hEcKya4KMgVA',kEXPI:'20782,750721,1351903,3700243,4029815,4032677,4038012,4041899,4043492,4045841,4048347,4055745,4062666,4065787,4067860,4068550,4068560,4069838,4069841,4072602,4072775,4073405,4073728,4073959,4074597,4074955,4076095,4076931,4076999,4078438,4078456,4078764,4079106,4079442,4079626,4079874,4079894,4079954,4080167,4081037,4081039,4082056,4082165,4082217,4082619,4083476,4084298,4084343,4084956,4085057,4085627,4086011,4086290,4086863,4087718,4087977,4088429,4088436,4088448,4088643,4089003,4089106,4089337,4089346,4089347,4089481,4089538,4089696,4089741,4089749,4089753,4090086,4090352,4090401,4090445,4090806,8300096,8300273,8300478,8506615,8507381,8507419,8507858,8507899,8508059,8508065,8508590,8508957,8509066,8509243,10200083,13500022',authuser:0,kscs:'c9c918f0_24'};google.kHL='fr';})();(function(){google.lc=[];google.li=0;google.getEI=function(a){for(var b;a&&(!a.getAttribute||!(b=a.getAttribute(\"eid\")));)a=a.parentNode;return b||google.kEI};google.getLEI=function(a){for(var b=null;a&&(!a.getAttribute||!(b=a.getAttribute(\"leid\")));)a=a.parentNode;return b};google.https=function(){return\"https:\"==window.location.protocol};google.ml=function(){return null};google.wl=function(a,b){try{google.ml(Error(a),!1,b)}catch(c){}};google.time=function(){return(new Date).getTime()};google.log=function(a,b,c,d,g){a=google.logUrl(a,b,c,d,g);if(\"\"!=a){b=new Image;var e=google.lc,f=google.li;e[f]=b;b.onerror=b.onload=b.onabort=function(){delete e[f]};window.google&&window.google.vel&&window.google.vel.lu&&window.google.vel.lu(a);b.src=a;google.li=f+1}};google.logUrl=function(a,b,c,d,g){var e=\"\",f=google.ls||\"\";c||-1!=b.search(\"&ei=\")||(e=\"&ei=\"+google.getEI(d),-1==b.search(\"&lei=\")&&(d=google.getLEI(d))&&(e+=\"&lei=\"+d));a=c||\"/\"+(g||\"gen_204\")+\"?atyp=i&ct=\"+a+\"&cad=\"+b+e+f+\"&zx=\"+google.time();/^http:/i.test(a)&&google.https()&&(google.ml(Error(\"a\"),!1,{src:a,glmm:1}),a=\"\");return a};google.y={};google.x=function(a,b){google.y[a.id]=[a,b];return!1};google.lq=[];google.load=function(a,b,c){google.lq.push([[a],b,c])};google.loadAll=function(a,b){google.lq.push([a,b])};}).call(this);(function(){var b=[function(){google.c&&google.tick(\"load\",\"dcl\")}];google.dcl=!1;google.dclc=function(a){google.dcl?a():b.push(a)};function c(){if(!google.dcl){google.dcl=!0;for(var a;a=b.shift();)a()}}window.addEventListener?(document.addEventListener(\"DOMContentLoaded\",c,!1),window.addEventListener(\"load\",c,!1)):window.attachEvent&&window.attachEvent(\"onload\",c);}).call(this);</script><script type=\"text/javascript\"></script><script>(function(){var a=function(f){for(var g=f.parentElement,d=null,e=0;e<g.childNodes.length;e++){var h=g.childNodes[e];-1<(\" \"+h.className+\" \").indexOf(\" am-dropdown-menu \")&&(d=h)}\"none\"==d.style.display?(d.style.display=\"\",google.log(\"hpam\",\"&ved=\"+f.getAttribute(\"data-ved\"))):d.style.display=\"none\"},b=[\"google\",\"sham\"],c=this;b[0]in c||!c.execScript||c.execScript(\"var \"+b[0]);for(var k;b.length&&(k=b.shift());)b.length||void 0===a?c[k]?c=c[k]:c=c[k]={}:c[k]=a;}).call(this);</script></head><body class=\"hsrp\" bgcolor=\"#ffffff\" marginheight=\"0\" marginwidth=\"0\" topmargin=\"0\"><div id=gbar><nobr><b class=gb1>Recherche</b> <a class=gb1 href=\"https://www.google.fr/search?hl=fr&tbm=isch&source=og&tab=wi\">Images</a> <a class=gb1 href=\"https://maps.google.fr/maps?hl=fr&tab=wl\">Maps</a> <a class=gb1 href=\"https://play.google.com/?hl=fr&tab=w8\">Play</a> <a class=gb1 href=\"https://www.youtube.com/results?gl=FR&tab=w1\">YouTube</a> <a class=gb1 href=\"https://news.google.fr/nwshp?hl=fr&tab=wn\">Actualits</a> <a class=gb1 href=\"https://mail.google.com/mail/?tab=wm\">Gmail</a> <a class=gb1 href=\"https://drive.google.com/?tab=wo\">Drive</a> <a class=gb1 style=\"text-decoration:none\" href=\"https://www.google.fr/intl/fr/options/\"><u>Plus</u> »</a></nobr></div><div id=guser width=100%><nobr><span id=gbn class=gbi></span><span id=gbf class=gbf></span><span id=gbe></span><a href=\"http://www.google.fr/history/optout?hl=fr\" class=gb4>Historique Web</a> | <a href=\"/preferences?hl=fr\" class=gb4>Paramtres</a> | <a target=_top id=gb_70 href=\"https://accounts.google.com/ServiceLogin?hl=fr&passive=true&continue=https://www.google.fr/search%3Fq%3Dscapy\" class=gb4>Connexion</a></nobr></div><div class=gbh style=left:0></div><div class=gbh style=right:0></div><table id=\"mn\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" style=\"position:relative\"><tr><th width=\"132\"></th><th width=\"573\"></th><th width=\"278\"></th><th></th></tr><tr><td class=\"sfbgg\" valign=\"top\"><div id=\"logocont\"><h1><a href=\"/webhp?hl=fr\" style=\"background:url(/images/nav_logo229.png) no-repeat 0 -41px;height:37px;width:95px;display:block\" id=\"logo\" title=\"Go to Google Home\"></a></h1></div></td><td class=\"sfbgg\" colspan=\"2\" valign=\"top\" style=\"padding-left:0px\"><form style=\"display:block;margin:0;background:none\" action=\"/search\" id=\"tsf\" method=\"GET\" name=\"gs\"><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" style=\"margin-top:20px;position:relative\"><tr><td><div class=\"lst-a\"><table cellpadding=\"0\" cellspacing=\"0\"><tr><td class=\"lst-td\" width=\"555\" valign=\"bottom\"><div style=\"position:relative;zoom:1\"><input class=\"lst\" value=\"scapy\" title=\"Rechercher\" autocomplete=\"off\" id=\"sbhost\" maxlength=\"2048\" name=\"q\" type=\"text\"></div></td></tr></table></div></td><td><div class=\"ds\"><div class=\"lsbb\"><button class=\"lsb\" value=\"Rechercher\" name=\"btnG\" type=\"submit\"><span class=\"sbico\" style=\"background:url(/images/nav_logo229.png) no-repeat -36px -111px;height:14px;width:13px;display:block\"></span></button></div></div></td></tr></table></form></td><td class=\"sfbgg\"> </td></tr><tr style=\"position:relative\"><td><div style=\"border-bottom:1px solid #ebebeb;height:59px\"></div></td><td colspan=\"2\"><div class=\"tn\"><div class=\"_UXb _Ihd _sxc _Hhd\">Tous</div><div class=\"_sxc\"><a class=\"_UXb _Jhd\" href=\"/search?q=scapy&ie=UTF-8&prmd=ivns&source=lnms&tbm=isch&sa=X&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ_AUIBQ\">Images</a></div><div class=\"_sxc\"><a class=\"_UXb _Jhd\" href=\"/search?q=scapy&ie=UTF-8&prmd=ivns&source=lnms&tbm=vid&sa=X&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ_AUIBg\">Vidos</a></div><div class=\"_sxc\"><a class=\"_UXb _Jhd\" href=\"/search?q=scapy&ie=UTF-8&prmd=ivns&source=lnms&tbm=nws&sa=X&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ_AUIBw\">Actualits</a></div><div class=\"_sxc\"><a class=\"_UXb _Jhd\" href=\"/search?q=scapy&ie=UTF-8&prmd=ivns&source=lnms&tbm=shop&sa=X&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ_AUICA\">Shopping</a></div><div class=\"_sxc\"><a class=\"_UXb _Jhd\" href=\"https://maps.google.fr/maps?q=scapy&um=1&ie=UTF-8&sa=X&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ_AUICQ\">Maps</a></div><div class=\"_sxc\"><a class=\"_UXb _Jhd\" href=\"/search?q=scapy&ie=UTF-8&prmd=ivns&source=lnms&tbm=bks&sa=X&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ_AUICg\">Livres</a></div></div><div style=\"border-bottom:1px solid #ebebeb;height:59px\"></div></td><td><div style=\"border-bottom:1px solid #ebebeb;height:59px\"></div></td></tr><tbody data-jibp=\"h\" data-jiis=\"uc\" id=\"desktop-search\"><style>._Bu,._Bu a:link,._Bu a:visited,a._Bu:link,a._Bu:visited{color:#808080}._kBb{color:#61C}.ellip{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}</style><tr><td id=\"leftnav\" valign=\"top\"><div><h2 class=\"hd\">Search Options</h2><ul class=\"med\" id=\"tbd\"><li><ul class=\"tbt\"><li class=\"tbos\" id=\"lr_\">Tous les pays</li><li class=\"tbou\" id=\"ctr_countryFR\"><a class=\"q\" href=\"/search?q=scapy&ie=UTF-8&prmd=ivns&source=lnt&tbs=ctr:countryFR&cr=countryFR&sa=X&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQpwUIDw\">Pays: France</a></li></ul></li><li><ul class=\"tbt\"><li class=\"tbos\" id=\"lr_\">Toutes les langues</li><li class=\"tbou\" id=\"lr_lang_1fr\"><a class=\"q\" href=\"/search?q=scapy&ie=UTF-8&prmd=ivns&source=lnt&tbs=lr:lang_1fr&lr=lang_fr&sa=X&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQpwUIDw\">Pages en franais</a></li></ul></li><li><ul class=\"tbt\"><li class=\"tbos\" id=\"qdr_\">Date indiffrente</li><li class=\"tbou\" id=\"qdr_h\"><a class=\"q\" href=\"/search?q=scapy&ie=UTF-8&prmd=ivns&source=lnt&tbs=qdr:h&sa=X&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQpwUIDw\"> Moins d'une heure</a></li><li class=\"tbou\" id=\"qdr_d\"><a class=\"q\" href=\"/search?q=scapy&ie=UTF-8&prmd=ivns&source=lnt&tbs=qdr:d&sa=X&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQpwUIDw\"> Moins de 24heures</a></li><li class=\"tbou\" id=\"qdr_w\"><a class=\"q\" href=\"/search?q=scapy&ie=UTF-8&prmd=ivns&source=lnt&tbs=qdr:w&sa=X&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQpwUIDw\"> Moins d'une semaine</a></li><li class=\"tbou\" id=\"qdr_m\"><a class=\"q\" href=\"/search?q=scapy&ie=UTF-8&prmd=ivns&source=lnt&tbs=qdr:m&sa=X&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQpwUIDw\"> Moins d'un mois</a></li><li class=\"tbou\" id=\"qdr_y\"><a class=\"q\" href=\"/search?q=scapy&ie=UTF-8&prmd=ivns&source=lnt&tbs=qdr:y&sa=X&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQpwUIDw\"> Moins d'un an</a></li></ul></li><li><ul class=\"tbt\"><li class=\"tbos\" id=\"li_\">Tous les rsultats</li><li class=\"tbou\" id=\"li_1\"><a class=\"q\" href=\"/search?q=scapy&ie=UTF-8&prmd=ivns&source=lnt&tbs=li:1&sa=X&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQpwUIDw\">Mot mot</a></li></ul></li></ul></div></td><td valign=\"top\"><div id=\"center_col\"><div class=\"sd\" id=\"resultStats\">Environ 190 000rsultats</div><div id=\"res\"><div id=\"topstuff\"></div><div id=\"search\"><div id=\"ires\"><ol><div class=\"g\"><h3 class=\"r\"><a href=\"/url?q=http://www.secdev.org/projects/scapy/&sa=U&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQFggUMAA&usg=AFQjCNHHk3EY8Z1PU7DjcAlkG4Rc3Vs59g\"><b>Scapy</b> - SecDev.org</a></h3><div class=\"s\"><div class=\"kv\" style=\"margin-bottom:2px\"><cite>www.secdev.org/projects/<b>scapy</b>/</cite><div class=\"_nBb\"><div style=\"display:inline\" onclick=\"google.sham(this);\" aria-expanded=\"false\" aria-haspopup=\"true\" tabindex=\"0\" data-ved=\"0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ7B0IFTAA\"><span class=\"_O0\"></span></div><div style=\"display:none\" class=\"am-dropdown-menu\" role=\"menu\" tabindex=\"-1\"><ul><li class=\"_Ykb\"><a class=\"_Zkb\" href=\"/url?q=http://webcache.googleusercontent.com/search%3Fq%3Dcache:AsiFNhlH2pkJ:http://www.secdev.org/projects/scapy/%252Bscapy%26hl%3Dfr%26ct%3Dclnk&sa=U&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQIAgXMAA&usg=AFQjCNEsc6oKXOBbiQdnyv1LzA4BeD0E5g\">En cache</a></li><li class=\"_Ykb\"><a class=\"_Zkb\" href=\"/search?ie=UTF-8&q=related:www.secdev.org/projects/scapy/+scapy&tbo=1&sa=X&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQHwgYMAA\">Pages similaires</a></li></ul></div></div></div><span class=\"st\"><b>Scapy</b> is a powerful interactive packet manipulation program. It is able to forge or <br>\n", |
| "decode packets of a wide number of protocols, send them on the wire, capture ...</span><br><div class=\"osl\"><a href=\"/url?q=http://www.secdev.org/projects/scapy/doc/&sa=U&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ0gIIGigAMAA&usg=AFQjCNEIwIcroh5YAfGR-I7GYFdLicNWEA\">Scapy's documentation!</a> - <a href=\"/url?q=http://www.secdev.org/projects/scapy/doc/usage.html&sa=U&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ0gIIGygBMAA&usg=AFQjCNFmd-7Kib8a4LCin1kc0GJ50BIS4A\">Usage</a> - <a href=\"/url?q=http://www.secdev.org/projects/scapy/demo.html&sa=U&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ0gIIHCgCMAA&usg=AFQjCNHVs60uzwQshH24gRG8SJd6_UG5ww\">Quick demo : an interactive</a> - <a href=\"/url?q=http://www.secdev.org/projects/scapytain/&sa=U&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ0gIIHSgDMAA&usg=AFQjCNEQizwKXdatZ7llosjxF90Qq1GZ0w\">Scapytain</a></div></div></div><div class=\"g\"><h3 class=\"r\"><a href=\"/url?q=http://www.secdev.org/projects/scapy/doc/usage.html&sa=U&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQFggfMAE&usg=AFQjCNFmd-7Kib8a4LCin1kc0GJ50BIS4A\">Usage — <b>Scapy</b> v2.1.1-dev documentation - SecDev.org</a></h3><div class=\"s\"><div class=\"kv\" style=\"margin-bottom:2px\"><cite>www.secdev.org/projects/<b>scapy</b>/doc/usage.html</cite><div class=\"_nBb\"><div style=\"display:inline\" onclick=\"google.sham(this);\" aria-expanded=\"false\" aria-haspopup=\"true\" tabindex=\"0\" data-ved=\"0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ7B0IIDAB\"><span class=\"_O0\"></span></div><div style=\"display:none\" class=\"am-dropdown-menu\" role=\"menu\" tabindex=\"-1\"><ul><li class=\"_Ykb\"><a class=\"_Zkb\" href=\"/url?q=http://webcache.googleusercontent.com/search%3Fq%3Dcache:IkQlsPcbaVUJ:http://www.secdev.org/projects/scapy/doc/usage.html%252Bscapy%26hl%3Dfr%26ct%3Dclnk&sa=U&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQIAgiMAE&usg=AFQjCNFm83gItGADS_RWIfcNKm10GZzLbQ\">En cache</a></li><li class=\"_Ykb\"><a class=\"_Zkb\" href=\"/search?ie=UTF-8&q=related:www.secdev.org/projects/scapy/doc/usage.html+scapy&tbo=1&sa=X&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQHwgjMAE\">Pages similaires</a></li></ul></div></div></div><span class=\"st\"><b>Scapy's</b> interactive shell is run in a terminal session. Root privileges are needed <br>\n", |
| "to send the packets, so we're using sudo here: $ sudo <b>scapy</b> Welcome to <b>Scapy</b> ...</span><br></div></div><div class=\"g\"><h3 class=\"r\"><a href=\"/url?q=https://openclassrooms.com/courses/manipulez-les-paquets-reseau-avec-scapy&sa=U&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQFgglMAI&usg=AFQjCNFkskYeH2yXFnaeEQNJg5U9OW6vcQ\">Manipulez les paquets rseau avec <b>Scapy</b> - OpenClassrooms</a></h3><div class=\"s\"><div class=\"kv\" style=\"margin-bottom:2px\"><cite>https://openclassrooms.com/.../manipulez-les-paquets-reseau-avec-<b>scapy</b></cite><div class=\"_nBb\"><div style=\"display:inline\" onclick=\"google.sham(this);\" aria-expanded=\"false\" aria-haspopup=\"true\" tabindex=\"0\" data-ved=\"0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ7B0IJjAC\"><span class=\"_O0\"></span></div><div style=\"display:none\" class=\"am-dropdown-menu\" role=\"menu\" tabindex=\"-1\"><ul><li class=\"_Ykb\"><a class=\"_Zkb\" href=\"/url?q=http://webcache.googleusercontent.com/search%3Fq%3Dcache:S5DdkssTWs4J:https://openclassrooms.com/courses/manipulez-les-paquets-reseau-avec-scapy%252Bscapy%26hl%3Dfr%26ct%3Dclnk&sa=U&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQIAgoMAI&usg=AFQjCNGLpLwzu508SzQHsP-Uf4wqZah87A\">En cache</a></li><li class=\"_Ykb\"><a class=\"_Zkb\" href=\"/search?ie=UTF-8&q=related:https://openclassrooms.com/courses/manipulez-les-paquets-reseau-avec-scapy+scapy&tbo=1&sa=X&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQHwgpMAI\">Pages similaires</a></li></ul></div></div></div><span class=\"st\">20 nov. 2013 <b>...</b> <b>Scapy</b> est un module pour Python permettant de forger, envoyer, rceptionner et <br>\n", |
| "manipuler des paquets rseau. Si le rseau vous intresse et ...</span><br></div></div><div class=\"g\"><h3 class=\"r\"><a href=\"/url?q=https://fr.wikipedia.org/wiki/Scapy&sa=U&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQFggsMAM&usg=AFQjCNGTIivLQi0XfgwYnADPhMZKZ5S1cA\"><b>Scapy</b> — Wikipdia</a></h3><div class=\"s\"><div class=\"kv\" style=\"margin-bottom:2px\"><cite>https://fr.wikipedia.org/wiki/<b>Scapy</b></cite><div class=\"_nBb\"><div style=\"display:inline\" onclick=\"google.sham(this);\" aria-expanded=\"false\" aria-haspopup=\"true\" tabindex=\"0\" data-ved=\"0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ7B0ILTAD\"><span class=\"_O0\"></span></div><div style=\"display:none\" class=\"am-dropdown-menu\" role=\"menu\" tabindex=\"-1\"><ul><li class=\"_Ykb\"><a class=\"_Zkb\" href=\"/url?q=http://webcache.googleusercontent.com/search%3Fq%3Dcache:MsdDsl0QNWcJ:https://fr.wikipedia.org/wiki/Scapy%252Bscapy%26hl%3Dfr%26ct%3Dclnk&sa=U&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQIAgvMAM&usg=AFQjCNFCwGW84n_OO6XIlEpMhfrvke6c-A\">En cache</a></li><li class=\"_Ykb\"><a class=\"_Zkb\" href=\"/search?ie=UTF-8&q=related:https://fr.wikipedia.org/wiki/Scapy+scapy&tbo=1&sa=X&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQHwgwMAM\">Pages similaires</a></li></ul></div></div></div><span class=\"st\"><b>Scapy</b> est un logiciel libre de manipulation de paquets rseau crit en python. Il <br>\n", |
| "est capable, entre autres, d'intercepter le trafic sur un segment rseau, ...</span><br><div class=\"osl\"><a href=\"/url?q=https://fr.wikipedia.org/wiki/Scapy%23Avantages_de_scapy&sa=U&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ0gIIMigAMAM&usg=AFQjCNHuBGOX0rv-ULqfquUn6FFIQJrj5g\">Avantages de scapy</a> - <a href=\"/url?q=https://fr.wikipedia.org/wiki/Scapy%23Exemple_d.27utilisation_de_scapy&sa=U&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ0gIIMygBMAM&usg=AFQjCNFRbPAXgHtzI2eifsA1SLsqNAh6AQ\">Exemple d'utilisation de scapy</a> - <a href=\"/url?q=https://fr.wikipedia.org/wiki/Scapy%23Notes_et_r.C3.A9f.C3.A9rences&sa=U&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ0gIINCgCMAM&usg=AFQjCNGgp4vZufO23i8NlSEK_R2GflOzTg\">Notes et rfrences</a></div></div></div><div class=\"g\"><h3 class=\"r\"><a href=\"/url?q=http://www.lestutosdenico.com/tutos-de-nico/scapy&sa=U&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQFgg2MAQ&usg=AFQjCNGJgAUj5uKjpIlgONJAh773FzsVhQ\"><b>Scapy</b> | Les Tutos de Nico</a></h3><div class=\"s\"><div class=\"kv\" style=\"margin-bottom:2px\"><cite>www.lestutosdenico.com/tutos-de-nico/<b>scapy</b></cite><div class=\"_nBb\"><div style=\"display:inline\" onclick=\"google.sham(this);\" aria-expanded=\"false\" aria-haspopup=\"true\" tabindex=\"0\" data-ved=\"0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ7B0INzAE\"><span class=\"_O0\"></span></div><div style=\"display:none\" class=\"am-dropdown-menu\" role=\"menu\" tabindex=\"-1\"><ul><li class=\"_Ykb\"><a class=\"_Zkb\" href=\"/url?q=http://webcache.googleusercontent.com/search%3Fq%3Dcache:n5JD9BgFDtkJ:http://www.lestutosdenico.com/tutos-de-nico/scapy%252Bscapy%26hl%3Dfr%26ct%3Dclnk&sa=U&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQIAg5MAQ&usg=AFQjCNEoq44xVCpsMHTwrp1z672VVGWKhQ\">En cache</a></li><li class=\"_Ykb\"><a class=\"_Zkb\" href=\"/search?ie=UTF-8&q=related:www.lestutosdenico.com/tutos-de-nico/scapy+scapy&tbo=1&sa=X&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQHwg6MAQ\">Pages similaires</a></li></ul></div></div></div><span class=\"st\">26 avr. 2010 <b>...</b> <b>Scapy</b> est un outil Open Source crit par Philippe Biondi. Cet utilitaire permet de <br>\n", |
| "manipuler, forger, dcoder, mettre, recevoir les paquets ...</span><br></div></div><div class=\"g\"><h3 class=\"r\"><a href=\"/url?q=https://github.com/secdev/scapy&sa=U&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQFgg9MAU&usg=AFQjCNFx6X4HyjoLtnHCYRzeN9IHyxPGjw\">GitHub - secdev/<b>scapy</b>: <b>Scapy</b>: the python-based interactive packet ...</a></h3><div class=\"s\"><div class=\"kv\" style=\"margin-bottom:2px\"><cite>https://github.com/secdev/<b>scapy</b></cite><div class=\"_nBb\"><div style=\"display:inline\" onclick=\"google.sham(this);\" aria-expanded=\"false\" aria-haspopup=\"true\" tabindex=\"0\" data-ved=\"0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ7B0IPjAF\"><span class=\"_O0\"></span></div><div style=\"display:none\" class=\"am-dropdown-menu\" role=\"menu\" tabindex=\"-1\"><ul><li class=\"_Ykb\"><a class=\"_Zkb\" href=\"/url?q=http://webcache.googleusercontent.com/search%3Fq%3Dcache:t5CFO8vxr4IJ:https://github.com/secdev/scapy%252Bscapy%26hl%3Dfr%26ct%3Dclnk&sa=U&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQIAhAMAU&usg=AFQjCNFTiv8yTtMV3mQuth-8uadrLURtOQ\">En cache</a></li></ul></div></div></div><span class=\"st\"><b>scapy</b> - <b>Scapy</b>: the python-based interactive packet manipulation program & <br>\n", |
| "library.</span><br></div></div><div class=\"g\"><span style=\"float:left\"><span class=\"mime\">[PDF]</span> </span><h3 class=\"r\"><a href=\"/url?q=https://repo.zenk-security.com/Protocoles_reseaux_securisation/Les%2520Fourberies%2520de%2520Scapy.pdf&sa=U&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQFghCMAY&usg=AFQjCNGvyyIgBp3Yf9bDRHx4ytFleXOi5w\">Les Fourberies de <b>Scapy</b> - Zenk - Security - Repository</a></h3><div class=\"s\"><div class=\"kv\" style=\"margin-bottom:2px\"><cite>https://repo.zenk-security.com/.../Les%20Fourberies%20de%20<b>Scapy</b>.pdf</cite><div class=\"_nBb\"><div style=\"display:inline\" onclick=\"google.sham(this);\" aria-expanded=\"false\" aria-haspopup=\"true\" tabindex=\"0\" data-ved=\"0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ7B0IQzAG\"><span class=\"_O0\"></span></div><div style=\"display:none\" class=\"am-dropdown-menu\" role=\"menu\" tabindex=\"-1\"><ul><li class=\"_Ykb\"><a class=\"_Zkb\" href=\"/url?q=http://webcache.googleusercontent.com/search%3Fq%3Dcache:1s5MetOx54YJ:https://repo.zenk-security.com/Protocoles_reseaux_securisation/Les%252520Fourberies%252520de%252520Scapy.pdf%252Bscapy%26hl%3Dfr%26ct%3Dclnk&sa=U&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQIAhFMAY&usg=AFQjCNHM9Qr918qAuwPiolGK1lPkSyKJyg\">En cache</a></li><li class=\"_Ykb\"><a class=\"_Zkb\" href=\"/search?ie=UTF-8&q=related:https://repo.zenk-security.com/Protocoles_reseaux_securisation/Les%2520Fourberies%2520de%2520Scapy.pdf+scapy&tbo=1&sa=X&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQHwhGMAY\">Pages similaires</a></li></ul></div></div></div><span class=\"st\">Python & <b>Scapy</b> : cration de module ou de programme . . . . . . . . . . . . . . . . . . 12. <br>\n", |
| "3.1. Python & <b>Scapy</b> .... 16 change de paquet de Wireshark vers <b>Scapy</b> .</span><br></div></div><div class=\"g\"><h3 class=\"r\"><a href=\"/url?q=http://www.chambeyron.fr/index.php/systeme-reseaux/scapy/8-scapy-les-bases&sa=U&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQFghIMAc&usg=AFQjCNE3evvKKx60Iee3ZBiIOTjDlDzKxw\">Tutorial <b>Scapy</b>, introduction - Le blog de Thierry</a></h3><div class=\"s\"><div class=\"kv\" style=\"margin-bottom:2px\"><cite>www.chambeyron.fr/index.php/systeme.../<b>scapy</b>/8-<b>scapy</b>-les-bases</cite><div class=\"_nBb\"><div style=\"display:inline\" onclick=\"google.sham(this);\" aria-expanded=\"false\" aria-haspopup=\"true\" tabindex=\"0\" data-ved=\"0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ7B0ISTAH\"><span class=\"_O0\"></span></div><div style=\"display:none\" class=\"am-dropdown-menu\" role=\"menu\" tabindex=\"-1\"><ul><li class=\"_Ykb\"><a class=\"_Zkb\" href=\"/url?q=http://webcache.googleusercontent.com/search%3Fq%3Dcache:MgSbFi6VkXEJ:http://www.chambeyron.fr/index.php/systeme-reseaux/scapy/8-scapy-les-bases%252Bscapy%26hl%3Dfr%26ct%3Dclnk&sa=U&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQIAhLMAc&usg=AFQjCNG4PtbkImAAhScSjauv2Yz6WYyh4g\">En cache</a></li><li class=\"_Ykb\"><a class=\"_Zkb\" href=\"/search?ie=UTF-8&q=related:www.chambeyron.fr/index.php/systeme-reseaux/scapy/8-scapy-les-bases+scapy&tbo=1&sa=X&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQHwhMMAc\">Pages similaires</a></li></ul></div></div></div><span class=\"st\">19 sept. 2014 <b>...</b> Pour connaitre la liste des commandes <b>scapy</b> >>> lsc() arpcachepoison : Poison <br>\n", |
| "target's cache with (your MAC,victim's IP) couple arping : Send ...</span><br></div></div><div class=\"g\"><span style=\"float:left\"><span class=\"mime\">[PDF]</span> </span><h3 class=\"r\"><a href=\"/url?q=http://repository.root-me.org/R%25C3%25A9seau/FR%2520-%2520Scapy%2520en%2520pratique.pdf&sa=U&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQFghPMAg&usg=AFQjCNFqXSQxPzYTmmJJLOXP7WO4d2tVHQ\"><b>Scapy</b> en pratique - Repository Root Me</a></h3><div class=\"s\"><div class=\"kv\" style=\"margin-bottom:2px\"><cite>repository.root-me.org/.../FR%20-%20<b>Scapy</b>%20en%20pratique.pdf</cite><div class=\"_nBb\"><div style=\"display:inline\" onclick=\"google.sham(this);\" aria-expanded=\"false\" aria-haspopup=\"true\" tabindex=\"0\" data-ved=\"0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ7B0IUDAI\"><span class=\"_O0\"></span></div><div style=\"display:none\" class=\"am-dropdown-menu\" role=\"menu\" tabindex=\"-1\"><ul><li class=\"_Ykb\"><a class=\"_Zkb\" href=\"/url?q=http://webcache.googleusercontent.com/search%3Fq%3Dcache:wLJc7aETkU0J:http://repository.root-me.org/R%2525C3%2525A9seau/FR%252520-%252520Scapy%252520en%252520pratique.pdf%252Bscapy%26hl%3Dfr%26ct%3Dclnk&sa=U&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQIAhSMAg&usg=AFQjCNHKUYiTHTN6P3CoJBK8Cwy22rSsPg\">En cache</a></li><li class=\"_Ykb\"><a class=\"_Zkb\" href=\"/search?ie=UTF-8&q=related:repository.root-me.org/R%25C3%25A9seau/FR%2520-%2520Scapy%2520en%2520pratique.pdf+scapy&tbo=1&sa=X&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQHwhTMAg\">Pages similaires</a></li></ul></div></div></div><span class=\"st\">17 mai 2008 <b>...</b> <b>Scapy</b> en pratique. PyCON FR – 17 Mai 2008 - Renaud Lifchitz. 3. Qu'est-ce <br>\n", |
| "que <b>Scapy</b> ? Prsentation gnrale. ○. Interprteur Python ...</span><br></div></div><div class=\"g\"><h3 class=\"r\"><a href=\"/url?q=http://blog.madpowah.org/articles/scapy/index.html&sa=U&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQFghWMAk&usg=AFQjCNGKKokeKOYEfr8s0KWmv3qNlOYEww\">[How To]Utilisation de <b>Scapy</b> | cloud's Blog</a></h3><div class=\"s\"><div class=\"kv\" style=\"margin-bottom:2px\"><cite>blog.madpowah.org/articles/<b>scapy</b>/index.html</cite><div class=\"_nBb\"><div style=\"display:inline\" onclick=\"google.sham(this);\" aria-expanded=\"false\" aria-haspopup=\"true\" tabindex=\"0\" data-ved=\"0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ7B0IVzAJ\"><span class=\"_O0\"></span></div><div style=\"display:none\" class=\"am-dropdown-menu\" role=\"menu\" tabindex=\"-1\"><ul><li class=\"_Ykb\"><a class=\"_Zkb\" href=\"/url?q=http://webcache.googleusercontent.com/search%3Fq%3Dcache:CAMle-GMFucJ:http://blog.madpowah.org/articles/scapy/index.html%252Bscapy%26hl%3Dfr%26ct%3Dclnk&sa=U&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQIAhZMAk&usg=AFQjCNGndKUe71tN35JPcUMSrK6-y8_5QQ\">En cache</a></li><li class=\"_Ykb\"><a class=\"_Zkb\" href=\"/search?ie=UTF-8&q=related:blog.madpowah.org/articles/scapy/index.html+scapy&tbo=1&sa=X&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQHwhaMAk\">Pages similaires</a></li></ul></div></div></div><span class=\"st\">18 sept. 2008 <b>...</b> <b>Scapy</b> est un logiciel dvelopp en python qui permet de forger des paquets, de <br>\n", |
| "sniffer et de faire bien d'autres actions bien utiles pour faire du ...</span><br></div></div></ol></div></div></div><div style=\"clear:both;margin-bottom:17px;overflow:hidden\"><div style=\"font-size:16px;padding:0 8px 1px\">Recherches associes \"<b>scapy</b>\"</div><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tr><td valign=\"top\"><p class=\"_Bmc\" style=\"margin:3px 8px\"><a href=\"/search?ie=UTF-8&q=scapy+windows&sa=X&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ1QIIXigA\">scapy <b>windows</b></a></p></td><td valign=\"top\" style=\"padding-left:10px\"><p class=\"_Bmc\" style=\"margin:3px 8px\"><a href=\"/search?ie=UTF-8&q=scapy+github&sa=X&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ1QIIXygB\">scapy <b>github</b></a></p></td></tr><tr><td valign=\"top\"><p class=\"_Bmc\" style=\"margin:3px 8px\"><a href=\"/search?ie=UTF-8&q=scapy+tutorial&sa=X&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ1QIIYCgC\">scapy <b>tutorial</b></a></p></td><td valign=\"top\" style=\"padding-left:10px\"><p class=\"_Bmc\" style=\"margin:3px 8px\"><a href=\"/search?ie=UTF-8&q=scapy+python+3&sa=X&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ1QIIYSgD\">scapy <b>python 3</b></a></p></td></tr><tr><td valign=\"top\"><p class=\"_Bmc\" style=\"margin:3px 8px\"><a href=\"/search?ie=UTF-8&q=scapy+sniff&sa=X&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ1QIIYigE\">scapy <b>sniff</b></a></p></td><td valign=\"top\" style=\"padding-left:10px\"><p class=\"_Bmc\" style=\"margin:3px 8px\"><a href=\"/search?ie=UTF-8&q=scapy+pcap&sa=X&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ1QIIYygF\">scapy <b>pcap</b></a></p></td></tr><tr><td valign=\"top\"><p class=\"_Bmc\" style=\"margin:3px 8px\"><a href=\"/search?ie=UTF-8&q=scapy+documentation&sa=X&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ1QIIZCgG\">scapy <b>documentation</b></a></p></td><td valign=\"top\" style=\"padding-left:10px\"><p class=\"_Bmc\" style=\"margin:3px 8px\"><a href=\"/search?ie=UTF-8&q=scapy+pdf&sa=X&ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ1QIIZSgH\">scapy <b>pdf</b></a></p></td></tr></table></div></div><div id=\"foot\"><table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"nav\"><tr valign=\"top\"><td align=\"left\" class=\"b\"><span class=\"csb\" style=\"background-position:-24px 0;width:28px\"></span><b></b></td><td><span class=\"csb\" style=\"background-position:-53px 0;width:20px\"></span><b>1</b></td><td><a class=\"fl\" href=\"/search?q=scapy&ie=UTF-8&prmd=ivns&ei=kzFQWN-hEcKya4KMgVA&start=10&sa=N\"><span class=\"csb\" style=\"background-position:-74px 0;width:20px\"></span>2</a></td><td><a class=\"fl\" href=\"/search?q=scapy&ie=UTF-8&prmd=ivns&ei=kzFQWN-hEcKya4KMgVA&start=20&sa=N\"><span class=\"csb\" style=\"background-position:-74px 0;width:20px\"></span>3</a></td><td><a class=\"fl\" href=\"/search?q=scapy&ie=UTF-8&prmd=ivns&ei=kzFQWN-hEcKya4KMgVA&start=30&sa=N\"><span class=\"csb\" style=\"background-position:-74px 0;width:20px\"></span>4</a></td><td><a class=\"fl\" href=\"/search?q=scapy&ie=UTF-8&prmd=ivns&ei=kzFQWN-hEcKya4KMgVA&start=40&sa=N\"><span class=\"csb\" style=\"background-position:-74px 0;width:20px\"></span>5</a></td><td><a class=\"fl\" href=\"/search?q=scapy&ie=UTF-8&prmd=ivns&ei=kzFQWN-hEcKya4KMgVA&start=50&sa=N\"><span class=\"csb\" style=\"background-position:-74px 0;width:20px\"></span>6</a></td><td><a class=\"fl\" href=\"/search?q=scapy&ie=UTF-8&prmd=ivns&ei=kzFQWN-hEcKya4KMgVA&start=60&sa=N\"><span class=\"csb\" style=\"background-position:-74px 0;width:20px\"></span>7</a></td><td><a class=\"fl\" href=\"/search?q=scapy&ie=UTF-8&prmd=ivns&ei=kzFQWN-hEcKya4KMgVA&start=70&sa=N\"><span class=\"csb\" style=\"background-position:-74px 0;width:20px\"></span>8</a></td><td><a class=\"fl\" href=\"/search?q=scapy&ie=UTF-8&prmd=ivns&ei=kzFQWN-hEcKya4KMgVA&start=80&sa=N\"><span class=\"csb\" style=\"background-position:-74px 0;width:20px\"></span>9</a></td><td><a class=\"fl\" href=\"/search?q=scapy&ie=UTF-8&prmd=ivns&ei=kzFQWN-hEcKya4KMgVA&start=90&sa=N\"><span class=\"csb\" style=\"background-position:-74px 0;width:20px\"></span>10</a></td><td class=\"b\" style=\"text-align:left\"><a class=\"fl\" href=\"/search?q=scapy&ie=UTF-8&prmd=ivns&ei=kzFQWN-hEcKya4KMgVA&start=10&sa=N\" style=\"text-align:left\"><span class=\"csb\" style=\"background-position:-96px 0;width:71px\"></span><span style=\"display:block;margin-left:53px\">Suivant</span></a></td></tr></table><p class=\"_cD\" id=\"bfl\" style=\"margin:19px 0 0;text-align:center\"><a href=\"/advanced_search?q=scapy&ie=UTF-8&prmd=ivns\">Recherche avance</a><a href=\"/support/websearch/bin/answer.py?answer=134479&hl=fr\">Aide sur la recherche</a> <a href=\"/tools/feedback/survey/html?productId=196&query=scapy&hl=fr\">Envoyer des commentaires</a></p><div class=\"_cD\" id=\"fll\" style=\"margin:19px auto 19px auto;text-align:center\"><a href=\"/\">Accueil Google</a> <a href=\"/intl/fr/ads\">Publicit</a> <a href=\"/intl/fr/policies/privacy/\">Confidentialit</a> <a href=\"/intl/fr/policies/terms/\">Conditions</a> <a href=\"/intl/fr/about.html\"> propos de Google</a></div></div></td><td id=\"rhs_block\" valign=\"top\"></td></tr></tbody></table><script type=\"text/javascript\">(function(){var eventid='kzFQWN-hEcKya4KMgVA';google.kEI = eventid;})();</script><script src=\"/xjs/_/js/k=xjs.hp.en_US.WN3XpSz-BG8.O/m=sb_he,d/rt=j/d=1/t=zcms/rs=ACT90oGvdHa7TL2W_IQX1s5BPxYIHeUvhQ\"></script><script type=\"text/javascript\">google.ac&&google.ac.c({\"agen\":true,\"cgen\":true,\"client\":\"heirloom-serp\",\"dh\":true,\"dhqt\":true,\"ds\":\"\",\"fl\":true,\"host\":\"google.fr\",\"isbh\":28,\"jam\":0,\"jsonp\":true,\"lm\":true,\"msgs\":{\"cibl\":\"Effacer la recherche\",\"dym\":\"Essayez avec cette orthographe :\",\"lcky\":\"J\\u0026#39;ai de la chance\",\"lml\":\"En savoir plus\",\"oskt\":\"Outils de saisie\",\"psrc\":\"Cette suggestion a bien t supprime de votre \\u003Ca href=\\\"/history\\\"\\u003Ehistorique Web\\u003C/a\\u003E.\",\"psrl\":\"Supprimer\",\"sbit\":\"Recherche par image\",\"srch\":\"Recherche Google\"},\"nds\":true,\"ovr\":{},\"pq\":\"scapy\",\"refpd\":true,\"rfs\":[\"scapy windows\",\"scapy tutorial\",\"scapy sniff\",\"scapy documentation\",\"scapy github\",\"scapy python 3\",\"scapy pcap\",\"scapy pdf\"],\"scd\":10,\"sce\":5,\"stok\":\"v9hn9ENPV2Cq1VDAu6ud56TzkyQ\"})</script><script>(function(){window.google.cdo={height:0,width:0};(function(){var a=window.innerWidth,b=window.innerHeight;if(!a||!b)var c=window.document,d=\"CSS1Compat\"==c.compatMode?c.documentElement:c.body,a=d.clientWidth,b=d.clientHeight;a&&b&&(a!=google.cdo.width||b!=google.cdo.height)&&google.log(\"\",\"\",\"/client_204?&atyp=i&biw=\"+a+\"&bih=\"+b+\"&ei=\"+google.kEI);}).call(this);})();</script></body></html>" |
| ], |
| "metadata": {}, |
| "output_type": "pyout", |
| "prompt_number": 141, |
| "text": [ |
| "<IPython.core.display.HTML at 0x7f26f59e9e10>" |
| ] |
| } |
| ], |
| "prompt_number": 141 |
| } |
| ], |
| "metadata": {} |
| } |
| ] |
| } |