From Chris.Greenhalgh@nottingham.ac.uk Fri Nov 01 10:51:24 2013
Received: from ppsw-42.csi.cam.ac.uk ([131.111.8.142])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VcCK4-0003FJ-Ot (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Chris.Greenhalgh@nottingham.ac.uk>);
	Fri, 01 Nov 2013 10:51:24 +0000
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1537405 
	*  0.0 HTML_MESSAGE BODY: HTML included in message
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from engine03-20433-10.icritical.com ([93.159.202.53]:33439)
	by ppsw-42.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with smtp id 1VcCK2-0007yw-9b (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Chris.Greenhalgh@nottingham.ac.uk>);
	Fri, 01 Nov 2013 10:51:24 +0000
Received: (qmail 19673 invoked from network); 1 Nov 2013 10:51:16 -0000
Received: from localhost (127.0.0.1)
	by engine03-20433-10.icritical.com with SMTP; 1 Nov 2013 10:51:16 -0000
Received: from engine03-20433-10.icritical.com ([127.0.0.1])
	by localhost (engine03-20433-10.icritical.com [127.0.0.1]) (amavisd-new,
	port 10024) with SMTP id 19610-04 for <cl-mirage@lists.cam.ac.uk>;
	Fri,  1 Nov 2013 10:51:13 +0000 (GMT)
Received: (qmail 19482 invoked by uid 599); 1 Nov 2013 10:50:58 -0000
Received: from unknown (HELO smtp3.nottingham.ac.uk) (128.243.44.55)
	by engine03-20433-10.icritical.com (qpsmtpd/0.28) with ESMTP;
	Fri, 01 Nov 2013 10:50:58 +0000
Received: from uiwexhub01.ad.nottingham.ac.uk ([128.243.15.133])
	by smtp3.nottingham.ac.uk with esmtps (TLSv1:AES128-SHA:128)
	(Exim 4.77) (envelope-from <Chris.Greenhalgh@nottingham.ac.uk>)
	id 1VcCJj-0008UV-Ga; Fri, 01 Nov 2013 10:51:03 +0000
From: Christopher Greenhalgh <Chris.Greenhalgh@nottingham.ac.uk>
To: Mirage List <cl-mirage@lists.cam.ac.uk>
Date: Fri, 1 Nov 2013 10:50:59 +0000
Subject: RE: mutable store on mirage?
Thread-Topic: mutable store on mirage?
Thread-Index: Ac7OmmHTUEh3RJL7SkGfmrT4cK7fBQBatQIgAbp+rgA=
Message-ID: <4C20415C7327A849961F3B8421413725010CD7203BB2@EXCHANGE1.ad.nottingham.ac.uk>
References: <4C20415C7327A849961F3B8421413725010CD72B64D9@EXCHANGE1.ad.nottingham.ac.uk>
	<CAG_esB2eEF=gKmfVddFN87+pA7dSSewuWnLGJ0g2ZpJSRpxD2w@mail.gmail.com>
	<2A9BC77A-0999-4C6E-AC17-C35983A7A6E3@nottingham.ac.uk>
	<4C20415C7327A849961F3B8421413725010CD72B64DC@EXCHANGE1.ad.nottingham.ac.uk>
	<CAG_esB2qXxkoJT6DeEJkf2aGO3ou=RiyH22G_r1ebPUSuwDXMQ@mail.gmail.com>
	<4C20415C7327A849961F3B8421413725010CD7203AAC@EXCHANGE1.ad.nottingham.ac.uk>
In-Reply-To: <4C20415C7327A849961F3B8421413725010CD7203AAC@EXCHANGE1.ad.nottingham.ac.uk>
Accept-Language: en-US, en-GB
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
acceptlanguage: en-US, en-GB
Content-Type: multipart/alternative;
	boundary="_000_4C20415C7327A849961F3B8421413725010CD7203BB2EXCHANGE1ad_"
MIME-Version: 1.0
X-Virus-Scanned: by iCritical at engine03-20433-10.icritical.com
Cc: Christopher Greenhalgh <Chris.Greenhalgh@nottingham.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Fri, 01 Nov 2013 10:51:24 -0000
Content-Length: 26360
Lines: 497

--_000_4C20415C7327A849961F3B8421413725010CD7203BB2EXCHANGE1ad_
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

As I said in the call, I've got baardskeerder running in Xen/mirage over bl=
kif.
https://github.com/cgreenhalgh/baardskeerder/
https://github.com/cgreenhalgh/baardskeerder/blob/master/xen_test/README.md
I've run the bsmgr benchmark(s) to run on it, but my dev set-up is in a vir=
tual box vm and I was using xen blktap for the vdisk
https://github.com/cgreenhalgh/baardskeerder/blob/master/benchmark-out.txt
I added page cacheing to the baardskeerder store over blkif but performance=
 is still ~10 slower then direct lwt on unix, and my xen setup is currently=
 about twice as slow again (hopefully down to the blktap disk - I couldn't =
get xen-disk to compile and I haven't got lvm set up at the mo).

Anyway, I'll leave the performance alone for now and try building a web app=
 with it and cohttp/etc

Cheers
Chris



From: cl-mirage-bounces@lists.cam.ac.uk [mailto:cl-mirage-bounces@lists.cam=
.ac.uk] On Behalf Of Christopher Greenhalgh
Sent: 23 October 2013 16:42
To: David Scott
Cc: Mirage List
Subject: RE: mutable store on mirage?

I don't feel like I know enough about block device internals to suggest an =
alternative yet.

I've now made a first-cut port of baardskeerder to mirage (splitting out mi=
rage & unix dependencies into sub-packages):
https://github.com/cgreenhalgh/baardskeerder
This has a store that runs over blkif, but currently only the basic baardsk=
eerder Flog0 log option (which has little resilience and no compaction). Th=
e store also does no cacheing at the moment...  (needs mirage 0.9.8, i.e. i=
o_page fix)

I've make a very simple mirage btree fa=E7ade over this:
https://github.com/cgreenhalgh/ocaml-btree
This is passing basic tests on unix, but I haven't got a test harness toget=
her yet to try it on Xen.

The Opam packages are in:
https://github.com/cgreenhalgh/opam-dev-repository
unix-simple-blkdev
mirage-baardskeerder
ocaml-btree

cheers
Chris


From: cl-mirage-bounces@lists.cam.ac.uk<mailto:cl-mirage-bounces@lists.cam.=
ac.uk> [mailto:cl-mirage-bounces@lists.cam.ac.uk] On Behalf Of David Scott
Sent: 21 October 2013 21:16
To: Christopher Greenhalgh
Cc: Mirage List
Subject: Re: mutable store on mirage?

Hi Chris,

Thanks for taking a look at this. When I get a moment I'll check out your c=
ode and see if it makes sense to merge in some patches I've got lying aroun=
d.

The Blkif API is very quirky. I think we should chuck it away and put somet=
hing sensible in place. Feel free to propose a new signature! :-)

Cheers,
Dave

On Mon, Oct 21, 2013 at 8:57 PM, Christopher Greenhalgh <Chris.Greenhalgh@n=
ottingham.ac.uk<mailto:Chris.Greenhalgh@nottingham.ac.uk>> wrote:
Partly as a learning exercise I have made a blkif implementation over a sin=
gle file using Lwt_unix - https://github.com/cgreenhalgh/mirage-unix-simple=
-blkif
It has a couple of basic tests which it passes, but hasn't been exercised b=
eyond that yet;
Neither is it abstracted over threading, but then the Blkif interface isn't=
 yet either...
i intend to try using it as a baardskeerder store next, so we'll see what h=
appens.

Threw up a few questions...

As noted in the comment near the top of https://github.com/cgreenhalgh/mira=
ge-unix-simple-blkif/blob/master/lib/blkdev.ml i don't think it will behave=
 precisely the same as ocaml-xen-block-driver for concurrent multi-block re=
ads and writes: currently it will do each in one chunk while the xen driver=
 subdivides and potentially interleaves large reads and...

Btw there seems to be an ambiguity in the OS.Devices.Blkif interface, speci=
fically what should happen if write_page is called with an Io_page which is=
 actually >1 page long (e.g.from Io_page.get N)? ocaml-xen-block-driver wri=
te_page seems to assume that it will be exactly one page (without checking)=
 but is the intended bevaviour (a) split pages and handle each page in turn=
 or (b) explicit error?

It is also slightly unclear (to me) what the ordering semantics are intende=
d to be for read_512; currently this and the xen-block-driver only actually=
 initiate the read when a thread attempts a (blocking) get on the returned =
Lwt_sequence. This is the more obvious route as read_512 is non-blocking (i=
.e. has to immediately return the sequence), but feels slightly odd.

p.s. as there is no sync operation, is there a particular level of sync to =
disk/durability defined in the xen block protocol?

I'm also unsure if it is deliberate that Io_page.page_size isn't visible; i=
 had to use Io_page.round_to_page_size 1 to get page_size out...

cheers
chris


_________________________
From: Richard Mortier [Richard.Mortier@nottingham.ac.uk<mailto:Richard.Mort=
ier@nottingham.ac.uk>]
Sent: 16 October 2013 21:16
To: David Scott
Cc: Christopher Greenhalgh; Mirage List
Subject: Re: mutable store on mirage?

On 16 Oct 2013, at 21:08, David Scott wrote:

> I'd like to see unix blkif implemented (without using the xen implementat=
ion). I've got some patches lying around which open files with O_DIRECT and=
 perform unbuffered sector-aligned I/O. I was thinking of making a 'unix-bl=
ock-driver' with this code in it, mirroring the xen implementation. It's mo=
stly a thin veneer over Lwt_bytes, replacing Bigarray.t with Cstruct.t. In =
future I was thinking the mirage-platform repo could become the minimal 'bo=
ot' code plus module types for Blkif, Netif etc; and all the concrete imple=
mentations could be spun out into other repos.
>
> What do people think?

absolutely agree. thought perhaps we would want to functorise(*) over Lwt, =
eg packages named

mirage-blk-xen-lwt
mirage-blk-posix-async
mirage-blk-bsd-blah

etc...?  opam can handle the constraints though (i firmly expect :)

(*) if i'm making up a verb there and/or using it incorrectly, i apologise.=
.. :)


--
Cheers,

R.



This message and any attachment are intended solely for the addressee and m=
ay contain confidential information. If you have received this message in e=
rror, please send it back to me, and immediately delete it.   Please do not=
 use, copy or disclose the information contained in this message or in any =
attachment.  Any views or opinions expressed by the author of this email do=
 not necessarily reflect the views of the University of Nottingham.

This message has been checked for viruses but the contents of an attachment
may still contain software viruses which could damage your computer system,=
 you are advised to perform your own checks. Email communications with the =
University of Nottingham may be monitored as permitted by UK legislation.






--
Dave Scott


This message and any attachment are intended solely for the addressee and m=
ay contain confidential information. If you have received this message in e=
rror, please send it back to me, and immediately delete it.   Please do not=
 use, copy or disclose the information contained in this message or in any =
attachment.  Any views or opinions expressed by the author of this email do=
 not necessarily reflect the views of the University of Nottingham.

This message has been checked for viruses but the contents of an attachment=
 may still contain software viruses which could damage your computer system=
, you are advised to perform your own checks. Email communications with the=
 University of Nottingham may be monitored as permitted by UK legislation.


This message and any attachment are intended solely for the addressee and m=
ay contain confidential information. If you have received this message in er=
ror, please send it back to me, and immediately delete it.   Please do not u=
se, copy or disclose the information contained in this message or in any att=
achment.  Any views or opinions expressed by the author of this email do not=
 necessarily reflect the views of the University of Nottingham.=0D=0A
=0D=0A
This message has been checked for viruses but the contents of an attachment=
=0D=0A
may still contain software viruses which could damage your computer system,=
 you are advised to perform your own checks. Email communications with the U=
niversity of Nottingham may be monitored as permitted by UK legislation.=0D=0A
=0D=0A
=0D=0A
=0D=0A
=0D=0A

--_000_4C20415C7327A849961F3B8421413725010CD7203BB2EXCHANGE1ad_
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<html xmlns:v=3D"urn:schemas-microsoft-com:vml" xmlns:o=3D"urn:schemas-micr=
osoft-com:office:office" xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" xmlns=3D"http:=
//www.w3.org/TR/REC-html40"><head><meta http-equiv=3DContent-Type content=
=3D"text/html; charset=3Diso-8859-1"><meta name=3DGenerator content=3D"Micr=
osoft Word 12 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
	{font-family:Tahoma;
	panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0cm;
	margin-bottom:.0001pt;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-priority:99;
	color:purple;
	text-decoration:underline;}
p
	{mso-style-priority:99;
	mso-margin-top-alt:auto;
	margin-right:0cm;
	mso-margin-bottom-alt:auto;
	margin-left:0cm;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
	{mso-style-priority:99;
	mso-style-link:"Balloon Text Char";
	margin:0cm;
	margin-bottom:.0001pt;
	font-size:8.0pt;
	font-family:"Tahoma","sans-serif";}
span.BalloonTextChar
	{mso-style-name:"Balloon Text Char";
	mso-style-priority:99;
	mso-style-link:"Balloon Text";
	font-family:"Tahoma","sans-serif";}
span.EmailStyle19
	{mso-style-type:personal;
	font-family:"Calibri","sans-serif";
	color:#1F497D;}
span.EmailStyle21
	{mso-style-type:personal-reply;
	font-family:"Calibri","sans-serif";
	color:#1F497D;}
.MsoChpDefault
	{mso-style-type:export-only;
	font-size:10.0pt;}
@page WordSection1
	{size:612.0pt 792.0pt;
	margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
	{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1" />
</o:shapelayout></xml><![endif]--></head><body lang=3DEN-GB link=3Dblue vli=
nk=3Dpurple><div class=3DWordSection1><p class=3DMsoNormal><span style=3D'f=
ont-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>As I said=
 in the call, I&#8217;ve got baardskeerder running in Xen/mirage over blkif=
.<o:p></o:p></span></p><p class=3DMsoNormal><span style=3D'font-size:11.0pt=
;font-family:"Calibri","sans-serif";color:#1F497D'><a href=3D"https://githu=
b.com/cgreenhalgh/baardskeerder/">https://github.com/cgreenhalgh/baardskeer=
der/</a> <o:p></o:p></span></p><p class=3DMsoNormal><span style=3D'font-siz=
e:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><a href=3D"https=
://github.com/cgreenhalgh/baardskeerder/blob/master/xen_test/README.md">htt=
ps://github.com/cgreenhalgh/baardskeerder/blob/master/xen_test/README.md</a=
><o:p></o:p></span></p><p class=3DMsoNormal><span style=3D'font-size:11.0pt=
;font-family:"Calibri","sans-serif";color:#1F497D'>I&#8217;ve run the bsmgr=
 benchmark(s) to run on it, but my dev set-up is in a virtual box vm and I =
was using xen blktap for the vdisk<o:p></o:p></span></p><p class=3DMsoNorma=
l><span style=3D'font-size:11.0pt;font-family:"Calibri","sans-serif";color:=
#1F497D'><a href=3D"https://github.com/cgreenhalgh/baardskeerder/blob/maste=
r/benchmark-out.txt">https://github.com/cgreenhalgh/baardskeerder/blob/mast=
er/benchmark-out.txt</a><o:p></o:p></span></p><p class=3DMsoNormal><span st=
yle=3D'font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>I=
 added page cacheing to the baardskeerder store over blkif but performance =
is still ~10 slower then direct lwt on unix, and my xen setup is currently =
about twice as slow again (hopefully down to the blktap disk &#8211; I coul=
dn&#8217;t get xen-disk to compile and I haven&#8217;t got lvm set up at th=
e mo).<o:p></o:p></span></p><p class=3DMsoNormal><span style=3D'font-size:1=
1.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></=
span></p><p class=3DMsoNormal><span style=3D'font-size:11.0pt;font-family:"=
Calibri","sans-serif";color:#1F497D'>Anyway, I&#8217;ll leave the performan=
ce alone for now and try building a web app with it and cohttp/etc<o:p></o:=
p></span></p><p class=3DMsoNormal><span style=3D'font-size:11.0pt;font-fami=
ly:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p cla=
ss=3DMsoNormal><span style=3D'font-size:11.0pt;font-family:"Calibri","sans-=
serif";color:#1F497D'>Cheers<o:p></o:p></span></p><p class=3DMsoNormal><spa=
n style=3D'font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497=
D'>Chris<o:p></o:p></span></p><p class=3DMsoNormal><o:p>&nbsp;</o:p></p><p =
class=3DMsoNormal><span style=3D'font-size:11.0pt;font-family:"Calibri","sa=
ns-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=3DMsoNormal><=
span style=3D'font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F=
497D'><o:p>&nbsp;</o:p></span></p><div><div style=3D'border:none;border-top=
:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=3DMsoNormal><b><sp=
an lang=3DEN-US style=3D'font-size:10.0pt;font-family:"Tahoma","sans-serif"=
'>From:</span></b><span lang=3DEN-US style=3D'font-size:10.0pt;font-family:=
"Tahoma","sans-serif"'> cl-mirage-bounces@lists.cam.ac.uk [mailto:cl-mirage=
-bounces@lists.cam.ac.uk] <b>On Behalf Of </b>Christopher Greenhalgh<br><b>=
Sent:</b> 23 October 2013 16:42<br><b>To:</b> David Scott<br><b>Cc:</b> Mir=
age List<br><b>Subject:</b> RE: mutable store on mirage?<o:p></o:p></span><=
/p></div></div><p class=3DMsoNormal><o:p>&nbsp;</o:p></p><p class=3DMsoNorm=
al><span style=3D'font-size:11.0pt;font-family:"Calibri","sans-serif";color=
:#1F497D'>I don&#8217;t feel like I know enough about block device internal=
s to suggest an alternative yet.<o:p></o:p></span></p><p class=3DMsoNormal>=
<span style=3D'font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1=
F497D'><o:p>&nbsp;</o:p></span></p><p class=3DMsoNormal><span style=3D'font=
-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>I&#8217;ve n=
ow made a first-cut port of baardskeerder to mirage (splitting out mirage &=
amp; unix dependencies into sub-packages): <o:p></o:p></span></p><p class=
=3DMsoNormal><span style=3D'font-size:11.0pt;font-family:"Calibri","sans-se=
rif";color:#1F497D'><a href=3D"https://github.com/cgreenhalgh/baardskeerder=
">https://github.com/cgreenhalgh/baardskeerder</a><o:p></o:p></span></p><p =
class=3DMsoNormal><span style=3D'font-size:11.0pt;font-family:"Calibri","sa=
ns-serif";color:#1F497D'>This has a store that runs over blkif, but current=
ly only the basic baardskeerder Flog0 log option (which has little resilien=
ce and no compaction). The store also does no cacheing at the moment&#8230;=
 &nbsp;(needs mirage 0.9.8, i.e. io_page fix)<o:p></o:p></span></p><p class=
=3DMsoNormal><span style=3D'font-size:11.0pt;font-family:"Calibri","sans-se=
rif";color:#1F497D'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <o:p></o:p></span></p=
><p class=3DMsoNormal><span style=3D'font-size:11.0pt;font-family:"Calibri"=
,"sans-serif";color:#1F497D'>I&#8217;ve make a very simple mirage btree fa=
=E7ade over this:<o:p></o:p></span></p><p class=3DMsoNormal><span style=3D'=
font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><a href=
=3D"https://github.com/cgreenhalgh/ocaml-btree">https://github.com/cgreenha=
lgh/ocaml-btree</a> <o:p></o:p></span></p><p class=3DMsoNormal><span style=
=3D'font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>This=
 is passing basic tests on unix, but I haven&#8217;t got a test harness tog=
ether yet to try it on Xen.<o:p></o:p></span></p><p class=3DMsoNormal><span=
 style=3D'font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D=
'><o:p>&nbsp;</o:p></span></p><p class=3DMsoNormal><span style=3D'font-size=
:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>The Opam packages=
 are in: <o:p></o:p></span></p><p class=3DMsoNormal><span style=3D'font-siz=
e:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><a href=3D"https=
://github.com/cgreenhalgh/opam-dev-repository">https://github.com/cgreenhal=
gh/opam-dev-repository</a><o:p></o:p></span></p><p class=3DMsoNormal><span =
style=3D'font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'=
>unix-simple-blkdev<o:p></o:p></span></p><p class=3DMsoNormal><span style=
=3D'font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>mira=
ge-baardskeerder<o:p></o:p></span></p><p class=3DMsoNormal><span style=3D'f=
ont-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>ocaml-btr=
ee<o:p></o:p></span></p><p class=3DMsoNormal><span style=3D'font-size:11.0p=
t;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span=
></p><p class=3DMsoNormal><span style=3D'font-size:11.0pt;font-family:"Cali=
bri","sans-serif";color:#1F497D'>cheers<o:p></o:p></span></p><p class=3DMso=
Normal><span style=3D'font-size:11.0pt;font-family:"Calibri","sans-serif";c=
olor:#1F497D'>Chris<o:p></o:p></span></p><p class=3DMsoNormal><span style=
=3D'font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p=
>&nbsp;</o:p></span></p><p class=3DMsoNormal><span style=3D'font-size:11.0p=
t;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span=
></p><div style=3D'border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt=
 0cm 0cm 0cm'><p class=3DMsoNormal><b><span lang=3DEN-US style=3D'font-size=
:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span lang=3DEN-=
US style=3D'font-size:10.0pt;font-family:"Tahoma","sans-serif"'> <a href=3D=
"mailto:cl-mirage-bounces@lists.cam.ac.uk">cl-mirage-bounces@lists.cam.ac.u=
k</a> [<a href=3D"mailto:cl-mirage-bounces@lists.cam.ac.uk">mailto:cl-mirag=
e-bounces@lists.cam.ac.uk</a>] <b>On Behalf Of </b>David Scott<br><b>Sent:<=
/b> 21 October 2013 21:16<br><b>To:</b> Christopher Greenhalgh<br><b>Cc:</b=
> Mirage List<br><b>Subject:</b> Re: mutable store on mirage?<o:p></o:p></s=
pan></p></div><p class=3DMsoNormal><o:p>&nbsp;</o:p></p><div><p class=3DMso=
Normal>Hi Chris,<o:p></o:p></p><div><p class=3DMsoNormal><o:p>&nbsp;</o:p><=
/p></div><div><p class=3DMsoNormal>Thanks for taking a look at this. When I=
 get a moment I'll check out your code and see if it makes sense to merge i=
n some patches I've got lying around.<o:p></o:p></p></div><div><p class=3DM=
soNormal><o:p>&nbsp;</o:p></p></div><div><p class=3DMsoNormal>The Blkif API=
 is very quirky. I think we should chuck it away and put something sensible=
 in place. Feel free to propose a new signature! :-)<o:p></o:p></p></div><d=
iv><p class=3DMsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=3DMsoNorma=
l>Cheers,<o:p></o:p></p></div><div><p class=3DMsoNormal>Dave<o:p></o:p></p>=
</div></div><div><p class=3DMsoNormal style=3D'margin-bottom:12.0pt'><o:p>&=
nbsp;</o:p></p><div><p class=3DMsoNormal>On Mon, Oct 21, 2013 at 8:57 PM, C=
hristopher Greenhalgh &lt;<a href=3D"mailto:Chris.Greenhalgh@nottingham.ac.=
uk" target=3D"_blank">Chris.Greenhalgh@nottingham.ac.uk</a>&gt; wrote:<o:p>=
</o:p></p><p class=3DMsoNormal>Partly as a learning exercise I have made a =
blkif implementation over a single file using Lwt_unix - <a href=3D"https:/=
/github.com/cgreenhalgh/mirage-unix-simple-blkif" target=3D"_blank">https:/=
/github.com/cgreenhalgh/mirage-unix-simple-blkif</a><br>It has a couple of =
basic tests which it passes, but hasn't been exercised beyond that yet;<br>=
Neither is it abstracted over threading, but then the Blkif interface isn't=
 yet either...<br>i intend to try using it as a baardskeerder store next, s=
o we'll see what happens.<br><br>Threw up a few questions...<br><br>As note=
d in the comment near the top of <a href=3D"https://github.com/cgreenhalgh/=
mirage-unix-simple-blkif/blob/master/lib/blkdev.ml" target=3D"_blank">https=
://github.com/cgreenhalgh/mirage-unix-simple-blkif/blob/master/lib/blkdev.m=
l</a> i don't think it will behave precisely the same as ocaml-xen-block-dr=
iver for concurrent multi-block reads and writes: currently it will do each=
 in one chunk while the xen driver subdivides and potentially interleaves l=
arge reads and...<br><br>Btw there seems to be an ambiguity in the OS.Devic=
es.Blkif interface, specifically what should happen if write_page is called=
 with an Io_page which is actually &gt;1 page long (e.g.from Io_page.get N)=
? ocaml-xen-block-driver write_page seems to assume that it will be exactly=
 one page (without checking) but is the intended bevaviour (a) split pages =
and handle each page in turn or (b) explicit error?<br><br>It is also sligh=
tly unclear (to me) what the ordering semantics are intended to be for read=
_512; currently this and the xen-block-driver only actually initiate the re=
ad when a thread attempts a (blocking) get on the returned Lwt_sequence. Th=
is is the more obvious route as read_512 is non-blocking (i.e. has to immed=
iately return the sequence), but feels slightly odd.<br><br>p.s. as there i=
s no sync operation, is there a particular level of sync to disk/durability=
 defined in the xen block protocol?<br><br>I'm also unsure if it is deliber=
ate that Io_page.page_size isn't visible; i had to use Io_page.round_to_pag=
e_size 1 to get page_size out...<br><br>cheers<br>chris<br><br><br>________=
_________________<br>From: Richard Mortier [<a href=3D"mailto:Richard.Morti=
er@nottingham.ac.uk">Richard.Mortier@nottingham.ac.uk</a>]<br>Sent: 16 Octo=
ber 2013 21:16<br>To: David Scott<br>Cc: Christopher Greenhalgh; Mirage Lis=
t<br>Subject: Re: mutable store on mirage?<o:p></o:p></p><div><div><p class=
=3DMsoNormal style=3D'margin-bottom:12.0pt'><br>On 16 Oct 2013, at 21:08, D=
avid Scott wrote:<br><br>&gt; I'd like to see unix blkif implemented (witho=
ut using the xen implementation). I've got some patches lying around which =
open files with O_DIRECT and perform unbuffered sector-aligned I/O. I was t=
hinking of making a 'unix-block-driver' with this code in it, mirroring the=
 xen implementation. It's mostly a thin veneer over Lwt_bytes, replacing Bi=
garray.t with Cstruct.t. In future I was thinking the mirage-platform repo =
could become the minimal 'boot' code plus module types for Blkif, Netif etc=
; and all the concrete implementations could be spun out into other repos.<=
br>&gt;<br>&gt; What do people think?<br><br>absolutely agree. thought perh=
aps we would want to functorise(*) over Lwt, eg packages named<br><br>mirag=
e-blk-xen-lwt<br>mirage-blk-posix-async<br>mirage-blk-bsd-blah<br><br>etc..=
.? &nbsp;opam can handle the constraints though (i firmly expect :)<br><br>=
(*) if i'm making up a verb there and/or using it incorrectly, i apologise.=
.. :)<br><br><br>--<br>Cheers,<br><br>R.<br><br><br><br>This message and an=
y attachment are intended solely for the addressee and may contain confiden=
tial information. If you have received this message in error, please send i=
t back to me, and immediately delete it. &nbsp; Please do not use, copy or =
disclose the information contained in this message or in any attachment. &n=
bsp;Any views or opinions expressed by the author of this email do not nece=
ssarily reflect the views of the University of Nottingham.<br><br>This mess=
age has been checked for viruses but the contents of an attachment<br>may s=
till contain software viruses which could damage your computer system, you =
are advised to perform your own checks. Email communications with the Unive=
rsity of Nottingham may be monitored as permitted by UK legislation.<br><br=
><br><br><o:p></o:p></p></div></div></div><p class=3DMsoNormal><br><br clea=
r=3Dall><o:p></o:p></p><div><p class=3DMsoNormal><o:p>&nbsp;</o:p></p></div=
><p class=3DMsoNormal>-- <br>Dave Scott <o:p></o:p></p></div><p class=3DMso=
Normal><o:p>&nbsp;</o:p></p><p>This message and any attachment are intended=
 solely for the addressee and may contain confidential information. If you =
have received this message in error, please send it back to me, and immedia=
tely delete it.&nbsp;&nbsp; Please do not use, copy or disclose the informa=
tion contained in this message or in any attachment.&nbsp; Any views or opi=
nions expressed by the author of this email do not necessarily reflect the =
views of the University of Nottingham.<o:p></o:p></p><p>This message has be=
en checked for viruses but the contents of an attachment may still contain =
software viruses which could damage your computer system, you are advised t=
o perform your own checks. Email communications with the University of Nott=
ingham may be monitored as permitted by UK legislation.<o:p></o:p></p><p cl=
ass=3DMsoNormal><o:p>&nbsp;</o:p></p></div>
<br>=
<p>This message and any attachment are intended solely for the addressee an=
d may contain confidential information. If you have received this message in=
 error, please send it back to me, and immediately delete it.&nbsp;&nbsp; Pl=
ease do not use, copy or disclose the information contained in this message =
or in any attachment.&nbsp; Any views or opinions expressed by the author of=
 this email do not necessarily reflect the views of the University of Nottin=
gham.</p><p>This message has been checked for viruses but the contents of an=
 attachment may still contain software viruses which could damage your compu=
ter system, you are advised to perform your own checks. Email communications=
 with the University of Nottingham may be monitored as permitted by UK legis=
lation.</p>
<br>=
</body></html>=

--_000_4C20415C7327A849961F3B8421413725010CD7203BB2EXCHANGE1ad_--


From anil@recoil.org Mon Nov 04 13:49:20 2013
Received: from ppsw-33.csi.cam.ac.uk ([131.111.8.133])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VdKWu-0002yT-ON (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Mon, 04 Nov 2013 13:49:20 +0000
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1538327
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:26172
	helo=dark.recoil.org)
	by ppsw-33.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with smtp id 1VdKWu-0008F8-gD (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Mon, 04 Nov 2013 13:49:20 +0000
Received: (qmail 14509 invoked by uid 634); 4 Nov 2013 13:49:19 -0000
X-Spam-Level: *
X-Spam-Status: No, hits=-1.0 required=5.0
	tests=ALL_TRUSTED
X-Spam-Check-By: dark.recoil.org
Received: from Unknown (HELO [172.16.2.99]) (69.89.172.91)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Mon, 04 Nov 2013 13:49:19 +0000
From: Anil Madhavapeddy <anil@recoil.org>
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Subject: Fwd: [Caml-list] Ocaml on RaspberryPi bare-metal crashes
Date: Mon, 4 Nov 2013 08:40:38 -0500
References: <20131104131015.GA27957@frosties>
To: cl-mirage <cl-mirage@lists.cam.ac.uk>
Message-Id: <BE8AA582-AE01-4B8B-B405-8EFD2632AE0F@recoil.org>
Mime-Version: 1.0 (Mac OS X Mail 7.0 \(1812\))
X-Mailer: Apple Mail (2.1812)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Mon, 04 Nov 2013 13:49:20 -0000
Content-Length: 2393
Lines: 69



Begin forwarded message:

> From: Goswin von Brederlow <goswin-v-b@web.de>
> Subject: [Caml-list] Ocaml on RaspberryPi bare-metal crashes
> Date: 4 November 2013 08:10:15 GMT-5
> To: caml-list@inria.fr
> Reply-To: Goswin von Brederlow <goswin-v-b@web.de>
> 
> Hi,
> 
> over the weekend I wrote some boot code and glue to make ocaml run
> bare-metal on a RaspberryPi. Here is what I did:
> 
> - Compile ocaml source into a single object file:
>    ocamlopt -output-obj -o prog.o foo.ml
> 
> - Compile a boot.S and main.c file providing the hardware interface
>  and libc (libm, libdl) functions needed by ocaml. A lot of stuff is
>  just stubs that will return errors or nonsense (like all the math
>  functions return 0). But I have memory and print functions working.
>  The main() initializes the hardware and calls caml_startup().
> 
> - Add libasmrun.a and libgcc.a from the system.
> 
> - Link it all together and objcopy to binary to get a kernel image for
>  booting.
> 
> Everything compiles and links without errors. And the kernel boots and
> outputs its startup messages before starting ocaml. But then is where
> things get tricky:
> 
> ---- foo.ml ----
> let () = ()
> ----------------
> Ocaml starts and finishes and the kernel outputs its finished message.
> Everything seems to be working fine.
> 
> ---- foo.ml ----
> let () = Printf.printf "Hello World\n%!"
> ----------------
> Ocaml does its startup (calls the same libc functions as before) but
> then the system resets before printing "Hello World\n". I don't see
> any sprintf() or fputs() or fwrite() calls.
> 
> I'm not sure why it crashes and I haven't setup exception handlers yet
> that would tell me what or where exactly it crashes. But the only new
> bits are the initialization of the printf module and the printf call
> itself. Must be one or the other.
> 
> Does anyone want to take a blind guess what could be wrong?
> 
> One idea I got while writing the email is that maybe the stack is the
> problem. I only setup a 16k stack at boot. Does ocaml create its own
> stack or should I make the stack larger? Would a simple printf exceed
> 16k stack?
> 
> MfG
> 	Goswin
> 
> -- 
> Caml-list mailing list.  Subscription management and archives:
> https://sympa.inria.fr/sympa/arc/caml-list
> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
> Bug reports: http://caml.inria.fr/bin/caml-bugs
> 



From lars.kurth.xen@gmail.com Tue Nov 05 11:37:23 2013
Received: from ppsw-33.csi.cam.ac.uk ([131.111.8.133])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1Vdewl-0001zR-Lr (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk (return-path <lars.kurth.xen@gmail.com>);
	Tue, 05 Nov 2013 11:37:23 +0000
X-Cam-SpamDetails: score 0.6 from SpamAssassin-3.3.2-1538529 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.128.173 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (lars.kurth.xen[at]gmail.com)
	*  0.0 DKIM_ADSP_CUSTOM_MED No valid author signature, adsp_override is
	*      CUSTOM_MED
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
	*  1.2 NML_ADSP_CUSTOM_MED ADSP custom_med hit, and not from a mailing
	*      list
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-ve0-f173.google.com ([209.85.128.173]:45744)
	by ppsw-33.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with esmtp id 1Vdewj-0003TI-ih (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk (return-path <lars.kurth.xen@gmail.com>);
	Tue, 05 Nov 2013 11:37:23 +0000
Received: by mail-ve0-f173.google.com with SMTP id jw12so2356197veb.18
	for <cl-mirage@lists.cam.ac.uk>; Tue, 05 Nov 2013 03:37:21 -0800 (PST)
MIME-Version: 1.0
X-Received: by 10.58.11.73 with SMTP id o9mr15231163veb.8.1383651441198; Tue,
	05 Nov 2013 03:37:21 -0800 (PST)
Received: by 10.220.82.137 with HTTP; Tue, 5 Nov 2013 03:37:21 -0800 (PST)
Date: Tue, 5 Nov 2013 11:37:21 +0000
Message-ID: <CAOqnZH7TNRsojaktVfS=44r_hf1CKs5vA6sVQDt_Qjdvr2bhPg@mail.gmail.com>
Subject: Important Information: OPW Applications and Mentors
From: Lars Kurth <lars.kurth.xen@gmail.com>
To: "xen-devel@lists.xen.org" <xen-devel@lists.xen.org>, 
	"xen-api@lists.xen.org" <xen-api@lists.xen.org>, 
	"cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>
Content-Type: multipart/alternative; boundary=047d7b2ed341a54cfc04ea6c746d
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 05 Nov 2013 11:37:23 -0000
Content-Length: 2560
Lines: 56

--047d7b2ed341a54cfc04ea6c746d
Content-Type: text/plain; charset=ISO-8859-1

Hi all,

I heard from a few prospective mentors that you started to have discussions
about applications for OPW and started to get applications.

If you have talked to prospective interns, please
a) Let me know (and the number of them)
b) Read https://wiki.gnome.org/OutreachProgramForWomen#For_Mentors
c) Send an introductory mail to opw-list@gnome.org  with [Introduction Xen
Project Mentor] Your Name and whatever you want to say

The MOST IMPORTANT part for applicants:

Applications MUST be sent to opw-list@gnome.org with a subject line of
"[APPLICATION - Xen Project] Applicant Name" to qualify. Make sure your
applicants understand that. They must be sent to the OPW list by the
deadline of Nov 11th. If only sent to us, the application does not qualify.
This is listed on the OPW page, to which we link. I have made this explicit
on our page.

Note that I have not yet seen applications for the Xen Project on the OPW
list.

Best Regards
Lars

--047d7b2ed341a54cfc04ea6c746d
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Hi all,<div><br></div><div>I heard from a few prospective =
mentors that you started to have discussions about applications for OPW and=
 started to get applications.=A0</div><div><br></div><div>If you have talke=
d to prospective interns, please</div>
<div>a) Let me know (and the number of them)</div><div>b) Read=A0<a href=3D=
"https://wiki.gnome.org/OutreachProgramForWomen#For_Mentors">https://wiki.g=
nome.org/OutreachProgramForWomen#For_Mentors</a></div><div>c) Send an intro=
ductory mail to=A0<a href=3D"mailto:opw-list@gnome.org">opw-list@gnome.org<=
/a> =A0with [Introduction Xen Project Mentor] Your Name and whatever you wa=
nt to say</div>
<div><br></div><div>The MOST IMPORTANT part for applicants:</div><div><br><=
/div><div>Applications MUST be sent to <a href=3D"mailto:opw-list@gnome.org=
">opw-list@gnome.org</a> with a subject line of &quot;[APPLICATION - Xen Pr=
oject] Applicant Name&quot; to qualify. Make sure your applicants understan=
d that. They must be sent to the OPW list by the deadline of Nov 11th. If o=
nly sent to us, the application does not qualify. This is listed on the OPW=
 page, to which we link. I have made this explicit on our page.=A0</div>
<div><br></div><div>Note that I have not yet seen applications for the Xen =
Project on the OPW list.</div><div><br></div><div>Best Regards</div><div>La=
rs</div></div>

--047d7b2ed341a54cfc04ea6c746d--


From lars.kurth.xen@gmail.com Tue Nov 05 15:14:51 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VdiLD-0007Gq-EK (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk (return-path <lars.kurth.xen@gmail.com>);
	Tue, 05 Nov 2013 15:14:51 +0000
X-Cam-SpamDetails: score -0.6 from SpamAssassin-3.3.2-1538529 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.212.171 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (lars.kurth.xen[at]gmail.com)
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 DC_PNG_UNO_LARGO Message contains a single large inline gif
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-wi0-f171.google.com ([209.85.212.171]:40051)
	by ppsw-52.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with esmtp id 1VdiLC-0000uD-Dd (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk (return-path <lars.kurth.xen@gmail.com>);
	Tue, 05 Nov 2013 15:14:51 +0000
Received: by mail-wi0-f171.google.com with SMTP id f4so2247505wiw.10
	for <cl-mirage@lists.cam.ac.uk>; Tue, 05 Nov 2013 07:14:49 -0800 (PST)
X-Received: by 10.194.185.73 with SMTP id fa9mr18112918wjc.29.1383664489855;
	Tue, 05 Nov 2013 07:14:49 -0800 (PST)
Received: from [172.16.25.10] ([2.122.219.75])
	by mx.google.com with ESMTPSA id y11sm15058884wie.7.2013.11.05.07.14.46
	for <multiple recipients>
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Tue, 05 Nov 2013 07:14:47 -0800 (PST)
Sender: Lars Kurth <lars.kurth.xen@gmail.com>
Message-ID: <52790B64.2060101@xen.org>
Date: Tue, 05 Nov 2013 15:14:44 +0000
From: Lars Kurth <lars.kurth@xen.org>
User-Agent: Mozilla/5.0 (Windows NT 6.1;
	rv:24.0) Gecko/20100101 Thunderbird/24.1.0
MIME-Version: 1.0
To: "xen-devel@lists.xen.org" <xen-devel@lists.xen.org>, 
	"xen-api@lists.xen.org" <xen-api@lists.xen.org>,
	"cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>
Subject: Developer Dashboards for Xen Project sub-projects (need input)
Content-Type: multipart/alternative;
	boundary="------------000806090807040104010808"
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
Reply-To: lars.kurth@xen.org
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 05 Nov 2013 15:14:51 -0000
Content-Length: 310815
Lines: 4331

This is a multi-part message in MIME format.
--------------000806090807040104010808
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Hi all,

I have been talking to a 3rd party vendor about creating a community 
development dashboard for the Xen Project at OWF and LinuxCon EU and 
found a vendor in the community to fund a beta. This is a relatively 
cheap hosted service which supports most open source infrastructure. The 
data gets sucked into a database and is owned by the project (although 
hosted and supported by the vendor). Any code changes they make for us 
are made available as open source via https://github.com/vizgrimoire.

  * Repo activity
  * Mailing list activity (as well as forums)
  * Code reviews
  * Bug activity (not currently supporting our tracker)
  * IRC
  * Etc.

Examples are:

  * http://activity.openstack.org/dash/newbrowser/browser/
  * http://korma.wmflabs.org/browser/ (mediawiki)

The idea would be to create a dashboard for the Hypervisor, XAPI and 
Mirage projects focussing on repos, lists and code reviews first. We can 
extend out to other areas if this is attractive. This would make my life 
easier and the dashboard has some functionality to spot community problems.

I wanted to start a discussion about this and what would be useful. For 
the Hypervisor for example, we could track activity on xen.git and 
osstest.git on master as well as stable branches (not sure whether there 
is any point in tracking activity on staging branches). There is also 
stuff they can do such as map activity/authors/<almost anything you may 
want to ask> to code, etc. See the example below which maps authors to 
kernel components.

The mailing lists plugins are quite sophisticated apparently (they have 
support for the Linux kernel and its workflow) and have a lot of 
filtering and tagging capabilities. For example it should be possible to
* Model our code review process and link it to commits (assuming that in 
the majority of cases there is a mapping between patch series and 
commit, e.g. via commit message or similar). I believe in our case we do 
have a mapping which would enable this.
* It can in theory handle osstest mails and xenbugs, etc. - although 
this will probably require customization which will add extra set-up cost
* We can track specific keywords in list conversations (e.g. arm, etc. 
as useful) and create custom views if we want to

There is probably a lot more which can be done, but I believe that git 
activity, code review and list activity are most valuable for now. We 
may be able to use this for PVOPS and other upstreams too, but 
usefulness is an open question.

We can do similar things for XAPI and Mirage.

So what I am looking for is
a) a discussion on the list on what might be useful, and
b) a number of volunteers (ideally one per project) who will work with 
me and the vendor getting this off the ground

Regards
Lars
P.S.: The UI generally sucks a little (to be more correct, the 
definitions of what what means are not self explanatory in the UI)


--------------000806090807040104010808
Content-Type: multipart/related;
	boundary="------------080400080804000104060103"


--------------080400080804000104060103
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    Hi all,<br>
    <br>
    I have been talking to a 3rd party vendor about creating a community
    development dashboard for the Xen Project at OWF and LinuxCon EU and
    found a vendor in the community to fund a beta. This is a relatively
    cheap hosted service which supports most open source infrastructure.
    The data gets sucked into a database and is owned by the project
    (although hosted and supported by the vendor). Any code changes they
    make for us are made available as open source via <a
      href="https://github.com/vizgrimoire">https://github.com/vizgrimoire</a>.
    <br>
    <ul>
      <li>Repo activity</li>
      <li>Mailing list activity (as well as forums)<br>
      </li>
      <li>Code reviews&nbsp; <br>
      </li>
      <li>Bug activity (not currently supporting our tracker)</li>
      <li>IRC</li>
      <li>Etc.<br>
      </li>
    </ul>
    Examples are:<br>
    <ul>
      <li><a
          href="http://activity.openstack.org/dash/newbrowser/browser/">http://activity.openstack.org/dash/newbrowser/browser/</a></li>
      <li><a href="http://korma.wmflabs.org/browser/">http://korma.wmflabs.org/browser/</a>
        (mediawiki)</li>
    </ul>
    <p>The idea would be to create a dashboard for the Hypervisor, XAPI
      and Mirage projects focussing on repos, lists and code reviews
      first. We can extend out to other areas if this is attractive.
      This would make my life easier and the dashboard has some
      functionality to spot community problems.<br>
    </p>
    <p>I wanted to start a discussion about this and what would be
      useful. For the Hypervisor for example, we could track activity on
      xen.git and osstest.git on master as well as stable branches (not
      sure whether there is any point in tracking activity on staging
      branches). There is also stuff they can do such as map
      activity/authors/&lt;almost anything you may want to ask&gt; to
      code, etc. See the example below which maps authors to kernel
      components. <br>
    </p>
    <p><img src="cid:part4.07040103.03070807@xen.org" alt=""></p>
    <p>The mailing lists plugins are quite sophisticated apparently
      (they have support for the Linux kernel and its workflow) and have
      a lot of filtering and tagging capabilities. For example it should
      be possible to <br>
      * Model our code review process and link it to commits (assuming
      that in the majority of cases there is a mapping between patch
      series and commit, e.g. via commit message or similar). I believe
      in our case we do have a mapping which would enable this. <br>
      * It can in theory handle osstest mails and xenbugs, etc. -
      although this will probably require customization which will add
      extra set-up cost<br>
      * We can track specific keywords in list conversations (e.g. arm,
      etc. as useful) and create custom views if we want to<br>
    </p>
    <p>There is probably a lot more which can be done, but I believe
      that git activity, code review and list activity are most valuable
      for now. We may be able to use this for PVOPS and other upstreams
      too, but usefulness is an open question.<br>
    </p>
    <p>We can do similar things for XAPI and Mirage.<br>
    </p>
    <p>So what I am looking for is <br>
      a) a discussion on the list on what might be useful, and <br>
      b) a number of volunteers (ideally one per project) who will work
      with me and the vendor getting this off the ground<br>
    </p>
    <p>Regards<br>
      Lars<br>
      P.S.: The UI generally sucks a little (to be more correct, the
      definitions of what what means are not self explanatory in the UI)<br>
    </p>
  </body>
</html>

--------------080400080804000104060103
Content-Type: image/png;
 name="igdfdddh.png"
Content-Transfer-Encoding: base64
Content-ID: <part4.07040103.03070807@xen.org>
Content-Disposition: inline;
 filename="igdfdddh.png"

iVBORw0KGgoAAAANSUhEUgAAAiAAAAFYCAIAAADlctB6AAAgAElEQVR4nOydd1xT1///Y2ur
ra1VmSIqjuJiBJy4bR24laUsFUjCzmCjqAgkAWUFlOUGFAUymALOOpkJCYpAEkgYCgQyCUkY
ub8/bkAcXZ/a36f9fOHxerwf5577Pu9zkvo4z77PuTkXAoVCDQwNDI2NDI0NDY2N/hdkZAha
YxPo2vXr7Bzs7BzsDtsdtnewt7W3s7W3s/sbZDuiw3aH7eztHI447NqzG2oKNYIaGRgZGhob
GhipZGgM1qi+8GVGy6CmJgcOHrB3sLO1Pezo6GDnYGvvaPdH5WBn72jn4GgPXjo42ts72NnZ
29o72Nk72No52B5zPrpt+1YTUyjUxNjYxAhqYmRsYmQM/VBGUMPRMtTE2HznjmNORw/bHrJ3
sHNwtLeztx3t6z+Qnb3tkaOOVtaWK1YtNzI2hJoYmy43+cQYjA0NjQ22bvtZ9Skc/nCnoI+D
rYOjnYODnYO9vbW1pbm5ua2dra3d4aPHjuzZu8fIGOxijKBGUBNjI2NDY6ixMdQYagLdu2+P
g6ODvYMdqJEv02605q/IzsHO3sHezsHusO2hI0cdN/+02XS5qbGJsZGxITie0S9B9VUYGYK3
jKFGxlDjD+yo/38mI2NDA8NlxqOdQg3BL2TkKzIc+3WBBdPlJlATqDHUaOWqlVbWlkeOOo78
M7P/Pb37Dh0c7fcf2Ldi5YoPPvVHw1PZVatWWlpZ2Nnb2dnbjnSnivPXBYZydLS3srLcvXu3
tbW1o6ODnf1he3vbI0ccHBzsHBzsDh7cD4UajQr8xlQFY1WliYmx6XKTjRvX29nZHj16xN7B
zsHB3uFXBun4qRpHR3tbW1twMI6ODmPl4GDv6Ohg72BnZrYaOvLfzsQUavzeqAxXrlxha3fY
0dHB3t7uyBFHBwd7W9tD9va2jo4ODu8H/HXZOzo62NnZ2dragoO0t7c7duyolZXlmjWrTU1N
jKFGUKgxaKFQY0PDZUZGBlCoMRRqBDUxhkKN16xZffjwoWPHjh62PeTkdMzmkHVAQABk/G/8
b/xv/G/8b/zvb/n74osvps/XnusE/dHWdK6tybwjJrp2prMcTGbZm85y+JfKZJa9ySwHE13H
DwQd0ce3/ro+Cu5goutoMsvBRNfeZJaDySfGaW8yy8Fk3uE1ujAD7Z/ma+mqHQ35ye34dueQ
TbCQzbCTn0Mhm2Ehm51DNjqFbFDp5Jjyr2qj88nNziGbQet0crPLyc2wkM0uf2EMLiGbnE9u
BOUUssH5U8MA77qc2uRycpPzqY2qtn+kixObYCc3u5zY5Bq43j1kx5GQjTqzdSZO/Aq6Z5Hl
ia3myDW7MWa7UGt2odbuRo8RZu1uzNpdaDPwchd67W7Muj2YdXt8RuznFeZd2N2YtXsw6971
jnk3ns+uXWiz3RjVR9uNWbsTZbY/cOOqfUs1tTX2B6y1CdhsjVpj4bPK0m+jle96S9/1Vn4b
fluWvhss36vZ+HtSeVr7b7T232Ttv9HSb8Nvd2Tpu97Sd6OFzxrbkPXrrVbMUJ/ketzc85S5
x8kt7qe2up/62eP01r8oMI5ryFbfqJ0mK+ZN/HKigemsk2cP+IceCIrYHRi+NzBiT1DE3sCI
PQHhewLCdgeE7wkIB+1IIWx3QNjugPDd/mG7Rip3B4TvDozYAyooYu8HGr0VEP6uEITdizlt
oaH99TGXn3HxbiF4i7Ao+9DIQ6GRh0d1Gm8TGmkD2g+FtzmNtz4deSg00vZM1OEzUYdD8ba4
uMOLDeeu22AUc/7oyfCDYWftQiPtPoj5vg6dwttEJTqt22i41EA7PgF9NhoWGeMUFeMSGe2M
P+cUGe2EO+eEP+cUdc4lHOcUl+S6YJHO5p+hcUlwbJRz5DkE7tzRqGinqGg3XIxLZJTruVj4
fH29CRO+gEAgEDWTmWsKHKEUh6V5dsbEQ6vJjitIh1aSD/97BY5/NcV2FfnwKvLhVWTb1ZTD
q8j2q0iOq8gOq8iOf4McVpEcV5HtV1EOrSLbgsNYRXk3mE+IdGgl+ZAx8dCaB/CFqK16RloP
u0Oe9waV9Qbf4wffExz/47r/awU+eBl8jx90TxB8TxD0mwq+Jwi6xx8tq+Lc/zMj+YTAz8IP
vtsbeJcfdI8fdI8fdLc38B4/6L5qYEH3Pxibyi34XfPfUfA9/vG7gsB7fMwvgpN33gT/aKgN
gUCOxOy43BUQ98o9sckrodEzoQmZ0OQ1VomjBaZ3Imj/P+rDMfwNGv2k8a/dCQ0ehAaP+HqP
tLcY7wu2c/U1L7N9rnLQl7huKR1uFznoS1zURS7qEhf9u7r8B3w+0EXOSGTOGPtr4qAucTGp
bI8sIcor1UJ93rRHPPwzRciLvlMvJGde9IW+6DvzVyUJfSE585h/kgXEHji6AgKB7LFZJQSu
cQYT2gBCmzKhTZnQBiSAhVblSM0YtSoTWpUE0LYBKvu7alWClgDG5A4T3gCJbEnczJmaBfeC
ASBLAmRJgYx+4EY/kNkP3Bgp3OwHssZaGZA11kqBG1LghhTIlAKZ/UAmAJDN9xki/cwB4I4E
SJcBmTLgpvRdwE9IDFwHgAIvjNWevesBgAoABQBwd0SlIyoDgBIAuAcANRu3LA4OOQgAVQBQ
AgB3AeA+ANwb0S8AULVxi6EqidFcMtvkqs2yK1YGGdbLru43vmpjeNXqf0xGYy+v/Q26OmL/
hCwNr1oZXNpvkmO1ALFeb5nm1Xp4DseDWO9NbPAiNXh/DnkRG7xJDV7k116g/R01jNgGL3KD
N7nBi9TgTX7tTWrwJv6FYYBtySOW3OBFAYOP9AUWwEryGOc/2Cn4GXMavLMavIlM9K0G17lL
1CAQyP5TG6Neep564nSm3OXUM6fQFy5nyuGhL2Bnxij0uUvoC5fQ5x/qzPtun0tjI3/YUTn8
71DoC9iZcnjoc5fQF7DQFy6nn7pEvfJwwVnMnacRW+6cSHWLLXc7V+UVVwWLr4LFVcHjf09x
VTDQ/lFVwuIqYfFVsLhKWGylC3gZW+ESVwmLr4KD9sMuKuHxVS7Rz91SGtFuZ7fO0Z1RzPAu
ZgeVNgWWNvmUNvn+dZU0+ZY2+Ra8wvzCD9ltbwiBQLbvW9wgiKpqjah5E07tCKe+iajpCKe+
iaC+iaC9xYJ2rEbrx3r+rmo6wsY2qemIoHdjXzSHzpo59+ot756BtMauJA7/QkvvhZbeCxx+
UkvvBU7vhZbeC829F1p6z4P1Y9Xce76l93xzz/nmngvNPWDhfI88Y8s2qBNsq2yA0vQ2gctP
ZfPOg2E5/KQP1NKb1NJ7nvk2VTpw5Rh8w7btBgMD2TwRSSAm9opz+RIiX5zLF+f2Soi9kly+
+BZfnCUbuLt2jREaZTUw8LBbmNkrzhJLyQJJjlCazZNcE0lviiWktesMVID5wUB7ZfZh08v7
TdP2LM/cb5RuZZxpY5xhDc20+VcqwxqaaQ3NsDbOsIRmWEEzrKCqggU08yA0wwKa+TdoNPi7
7qyMMyxHB/Mr47QxvWqzgmyzyN1s3oLppHr/vOaAXCaKxEaTmj+DiGwUiY0mslBEJpLIQv0x
IYksFImNIrHRIxatGs9/NCoiG01io4ngMP6URhr+fi+gGxuTV48qYvnnNHjPW6oFgUywjtga
34CMeAHDVSEiKmC4SgSuCoGrhOMq4bhKBK4S8a5QhcBXIXCgKkfs/w+9Gwy+6vMLVwnHVsLx
VQhsBRxXCcdWwCJeuMS88nA+a63zo9Y5mjOhziWR6pRQiyDUIgg0OKEWnlCLGCuwhlALH1U8
DQbaeCosngYj0OC/rXgaPP5dARZPfddkNP7HnRJosDiqezLL3TVuq7r296VNmLIO/+KWwDtc
/zvcgL+uYo7/HW5APsu3QnJqn50pBALZtR/aKotldGLreVGvuvGvuiPruyNfdUe+6sK/7MK/
6sK/Ai9HNaYe9KznqW7V86JA+4FGfV524UFb14lv5J+tbg3XmTM5I8dToMxqFqZ2SFLbRClt
opQ28aiS28RJKomS2sTJ7ZLkEZvULkluFSW3ipLbRClcYTJXkCRUZmzbZYDw+Ek6fJvbm9Qu
utImuvhRzBGJUtpEyS28yzJlhhN8+25zM0BZwpfkSeQUiZwsllP6FHkSOUU6mC+U5vXJyKL+
jGFlsdlafR+fg0rlgx5xpnSQ2CfP7ZNRhJJiiaKgT0aUyilr149kMGpLZi3LOrzkho3pjcPG
162Nr9tCr1tCr1ub/FtlBb1mZXLdyjTdyuQ6WLA2TbcyTbcxTT80Yj+7RoNbmaZbj/RrNTqY
j8cJBSsvWxhRbGZ7btJbpHG73pPCQZKbUBQmisJCfx4x0RQWhsLGUFiYPPbviMJSicxCg6KM
WArzL47hXUAwPjgesDuwAFa+5/nHOiWzUJQmNJmFIjE98pt9bzd4zTNQh0AgVuEb4xo8I8qP
4aqcsZVOuCoYttIZW+mCq3TBVjpjK51xqrILrtIFV+Xy4eVnFdgjtnK04IytdAY7HTuYz6v3
+4Lhqlwiyp2j611h+H3zFmrGVcMT6Yjz1ccI1GMJNfBEGiyBCkukwscKrEmgwhKosIQal7GF
RBoctL8tsImqUOOSUOOSSIMngg1V9iPVwBJpsLgK58vNbvC4nRp6M/JfB5S2+5a2BJRwg0o4
QaXcv6oSbmApN6iA5f9ccnqvPRQCgWw/sKyp7xy1E/uSF8noxtfxIut4oI182aOyYzVaX8fD
1/HwjG48vQtH78KBbUcivCcG6MnDM7rxjG58HQ9P78LVC6KqWsN0dNUycpBi4Car90Kb5Hyb
OLVNlNImTh1hQNr7Sm0VpoLlVlU5pU2U3C5ObRUmcwQXhMCNLdsN3ZHb+pW3OL2J7eLRUKnt
H6lNnNoqSuHwk2TANZir+S7zVUqgRNCfLZLniOQ5Qlm2SJ4jVhBFipsSBVkszxPJs4aAYrN1
izB+ewDgvkhGFvaTJAPkvsHbEkWeUJ4n7s+WDVDWrFs6AphlOqa3rBZftzBJtzC5bg3NsDLM
sDTKsDTKtPp3ytI408oo09Iow8Io09Io09Iow9Iow8Iow9Iow+pv1khHqn4t3g3mo3Eaplsa
ZVoZXTtoTHGY77lx7o8aufWeeS1IItObxEKS2Z9BJDaS3IwksZFEtjeJjfwjeufZjBxbUEX7
D8bQjCQ3g0G8P4j5od676z3a8A98TG8yG0lke+cyPfJb0DlM1NxFmhAIxOrMpvgGVMRzGK4C
jqtA4CoQkVWuoMVXuoIWX4l43yJwFQiw8HdoJLjrSM27kURWfX6B8fGVrrgKBGixL+Cx9Z7w
KEud+WrxNLdEhjuhBhFHc4+nuhGorvE0NwL1fdFG7Mcavfvbor0fRFXpTqC6xf9Kk3iqazzV
Lbba9QoT6RJjrj1brei1713uibKWwLIW/zJOwF9XaYt/GSegkOlT0Xd6j50JBALZcdCoWR5N
7Qpn9ODoPCyjB/dnRedh/0BD7Fj/2m7sK2FkBSdUd9asjBw0H7jWIkhrEyW1iS61ipJahSlt
woutwtRW0YUOSWqrMGkUNq3ClHZJWpswtV2c0ipK5gqT2kVX28QpraIkjiBNqMz8absxzG27
DMjm9KS0Sy62ilLbhGkfgQpEVFqrMK2lN1kK3HBx22ZubgoAZeJ+kkRBFsvIYjlZoqBI5GSx
giyU50pkBcJ+8jBwx2ytIcbfEgAe9Upy+uR5IhmlT0EUyUkCBbGvnygfKDRb/26JTMcky9og
w9r0+kHjDBvjdAvj69bQdCtouvW4/j4ZX7eCpltDr1qYkOwXuK/W09fMbvAiN2Nym1BEJprE
+gwij9i/rtFo/z/H8Ac7JbJQJBaaxEKRmpAFzZjsRqTeYi0IBGIZtpHQhAx/AeYNcGwlDDdi
cVVwlf1I+E9Vfi59OvivjOSzCFsBw1XBsZUqG1HuEvPawyXSYtYC9Tgq7HwdPIHqHE+FE2iI
hBo4gYpIoL0v6oj9WKN3f1vU94PQfr8hgQZPqEHE1MAusTxh8du1Z6kXNnqXtQXf4QSUcgJK
uIGlf1klnIBSbmABy69cdBLMYMwtDNnyc7Wd2DoentGNA/OSP6cefF3Pn/BndOPoXbjXgqiq
1rCZOtqZuRghkNEiTGkTpXAFqVzRhTd9l9tFl9rEKa2iNK4g5U3f5VZhSockrV2c0i6+yBWk
tIvT2kSpbaK0t31XmvkxbcIrbcIrbeIE/lD6lh0GCPcdcuXNFl5SmzitTZzcLkptF6d8KoNJ
aROlNPOT+oEsJ8TWnTtXAMA9kTRXLCeK5CSJgiiWk8QKokhGEityxP1kkYwIAEVr1ixF+x0E
gAeCvlt9CqJYQZTISRJFnlCeLZHmKgaL165fpgLMtGWzTG5ZL0u3Mkm3gKZbQzMsjdKtjDMs
jTOs/udkPWI/u0aD/1EZpVsaZ1gZX7OAkh3me5jp/aiR89qT0oImMpEkForM/mwi/Uciv2//
/w/jz0RGgpbI9M5vweQ0ofQWa0IgEKuwTfGNqIjnLrgKGK4CgauEg9sS+CoEHtzz+GSS8bel
L78afHQ8n12VCFwlHF+JwFXAwTL2BSy23hMWZTFrvno8DZ7IQCTUuMTTEPFUVwIVEU9zJfzd
oroSaK4JY8qf8kEQqK6x1fDLTC9Y3A4tXbWiBtTd1uMlLYFlLf6lnyWD4YAZjG+F+NS7DEYW
TeuKqPtPMxgGD8fg/Tl/ejeuXhhZ3YbV0ZmZno0UKTNYvUlvpZfaxantkuRWUWq7+HKHJIUr
uNgmTuIKkjvEV1tFye2S1HZxaptIBRiuIKVdktQmTG0VpXAEyRx+sghI37LdAO6+XQZkcXqS
2yUX20QpbUIVjT654NbCT5YCN51dt+00Xw4Ad8X9RImCJJaTxXKSREGWKEhiOUkkz5XIKCIZ
SQkUm5ktw/hbAMBDvuS2RE4SyUl9CqJYThEqcvr6ifKBoncZzDSDWaa3rA0yrE3TLaAZNtAM
S+N0a2iGFTTDelx/n4zTraAZ1tBrFiZkhwUeZnr6mjkNXpQWDJGJIrHQZPa4/qhIbBRoSUxk
gQowWiBgCE2oiBcuuEoYuKP+DjD/ZzT2U+Mq4dhyWOxrT1iU5awF6vE0+Pk6RALVJZ6GINBc
E6gIcOr/r4tAQyRQXWNr4JdZXrD4Hdq66kWNqLttx0s4gWWcgFJuYNlfViknoIwbUMjyqxCf
2mMHhUAgOw4aNsuiaZ0RdT04OpjB9OAYI6kJg4er68HV9YxU9oCVeJATdT24uh7cGE88Q9Uc
N2rrRpzBVnU8PIOHo3djXwkiq1pDZ+qoZeR6iJXXmniJHMF5jiCxVZTI5Se3ClM4gvgu+ZV2
6dk2cUq78CZXkMIVpDb3ElpFF1pFF1r4iR19Kc09Sd2yGz3Dl3qHL3VILguGM38CM5hRwIhT
2kVp7eLUdnHaB2oTp7aJUlv4yf1AlrPrNjCDGQWMRDEKGLJYoQIMMAYwgr7bfQqSWEHqU5Ak
ijwQMIrB4rXjgBkHzP+GxgEzDpg/DZgW/zJuYAHTt1x0cq+9CQQCMbcwYsuja7uwDB6ewcO+
w4OqgGfw8CAe6kaSFdWamOrWKGzwYzgUOcYBC0Jr5BaO3o2ld+PqhVGVrad152im53iKges8
eZZgOKtLfqldksYfzOIP3XwjTXtOP/dGer6hPcX35MbX7bFCZTZ/MKtnILNTdrVLfpkrTBYp
M6hMvM/xvRHRjo2d0ZLhS1u2GSDct48D5v+uxgEzDphxwPw3MxgOmMGc3m1nPJLBnKN1htf1
YundOAYvqq4Hz+BF1vFwr3rPMroj6noiXvbg63qw9O7Il72RL3uiGDwcg4eld4czeFh6d0Qd
L6quJ5LBi2DwwOZYencYowdL78bW9eDqeqIZPeEgiup6Ihi8KAYPT3sb/rIXW9Uaoa2tmUVG
s3tSLmW5hcfspDYRmnkXo84fvHzTk81LtXGEPquNKn2Cw8U4sroSSp8exydYpmXCaMy4J9QI
Tm/Sw8pwn+PbL1x0S7wEf0KL6AeyN29dNg6Y/9MaB8w4YMYB898CTAknoIwbUMD0LRef3mNv
CIFAzC2MW2Sx1M6Iuh48vTuqrieSzgtl8CLqeFGM7jOves7W8bCveHGMbtxLfnhtZxS9O7yO
d47RG1YvOPdaeJbZH07vxtb1RjC6Yut68IxuPIMXUdeDfcmLZvCiGN1hjK5EetcZRk94XXcs
revMy56ztV3n2NLIFml8JQenrjmj6H5AFhHj7rUr7Ypb9Pljp6P2nMZbuXj8REhzPIk/+JwR
ebvA+0So5fNyvL3DhpTL3kEhtmFRlqERjmWPT3v4rrc7Yu7t/1Nw6OE6TmKf8urmbeNLZP+3
NQ6YccCMA+a/n8FIQvY7LIdAIOYHTZl90bVvo6rbz9R2n2F0R9bxouldWFpnKO1NDLXzJIMX
UdsZVdt1qrbrDL0LR+edfMnH13biL9x0Sbxh5xWyp54fS+dhaV2R1LehNW/O1PGi6T2n63rw
tE48o+cUgxf1sieW1nWawcPX8eLpXeFsKfYK2a24Iqi2M0JDSzOv7PhNEvLCJc/XnAuxqXZH
4BvjU1yxcfvTicjUdI8XL0/n3kHHpdiW3MUi0fv6lTlZFE98vEVCCszBaQOlLOSI85465sWz
5w+FnzsEAHkbf146nsH8n9Y4YMYBMw6Y/zZg/CvEJ3cfNoFAIDstTThywmsBthOIaVZE0Lux
tK4z9K7IRgn2DZDGUcTXdkYx++IevQzevm85o/Pca35ivTiktOaEjdPK3IeuQfj9bGn8K2FY
vTj0DXChWZ5A7z5b2x39Whz5WhRF50XQeWG13eFsWSy18xS9K4opPldShYZM+CoiyZwljZk+
Y3rB3dDsO0jCpcPPa8Mu3UCmZrgGn7E6HnroSW34mUjHExEHq1+fJ1w88uR51CHbdUj/XQ7O
Zk9qzt0kBW3fvZjfn0m47Hg8zMYNuedu+QkFkLNp69LxDOb/tMYBMw6YccD8twBTwgko5QYU
Mv0q+8L22K2CQCBrNv9YyyWQH6G8gndeyvV8zY9h8LDM/ijSowCvE9sJGbavuuMaRbiYizY6
c6dfprhVdYS0D8ZjL1ifOGvZ0n/2aeOJSk5wSY3v0wa89ynzsxeP0nmnXotCi6tD7tScfC2I
p3WdpHfhsh+iqG/D63rxdZ3hazb8OGnyjLhrdq96z82cpXmDiO6W3mjoTOoQp7C7LrSJ0sj3
0GXPQ3gDlypfh98rD22XJLC7rrO7ko/AV9+kIF/UhXf13+AIEhrfXuiSXu2QXCTedX9eh+uU
XRIoM7dsVy2RtfCS2iUXW0XJbSLw4ebUNlFqmzi1Xax6RrlNnNIqTG3hJ0mBLGfXrTvNl4OA
ESuIIGDEcpJEQRLLyGJ5rlhGFslISqBojdlSjB/4mPItiRz0IYoVFIEiR9KfKx8oMnv3O5hx
wIwD5t+sccCMA+Y/y2CKWP7lkhO7Dq+EQCBfT/pysfHM3daGFg4rpqpPOR17iAfEn0601NRV
O+hosNBAZ9uBZbQ2/AGb5d9PnWLlvOoJ+3iLjHAItqq42p+Q6bhpl2H+U7TeQu1Vm+btdzCZ
t1h77c8/vpUnBuN2G63Wqe+J4ErjEzLs5i/ToL4N7wCSLI+sdPHYsPFnw5BYC6YkXkt7RnqO
uwS40SJI7ei70CZO6pBcFAzf6B28zhGkdCtSu+UZbZKETllaqzCNWOLzVprGH87gCs+/laZ2
9F1sE15uFaYJlJm8gcuc3hTB0I0tOwzgbttlwA1OT7Lqh5bCNPCnM+3itHZRWhuY0IjSWkWp
baKU5t7kfuCmE2Kb+c4VAHBXJM2VyEkiGUksJ0oUZPBHlyJFjqQ/T9hPBIBiszXL0P4HAeCB
QJLdJyeKFMQ+OUkizxMqsvukRMVA8bvDLscBMw6Yf7XGATMOmD8PGP9STmAh06+i7+ROu2UQ
COTLL76ZvVDtBTtsELiM8Nmy/meDxq4Y3QU618luSuBqmyjpx8W6CZcdKl+HLYXOrGwNZcli
7tUdt3BczR1MwF/au30/9AE1+MtJE/AXbETA1SrOGfWZaoSrLvQ3YdM0vr9d5i0C0n7ea+Tk
vVkGJONTDxmvWdgqCzNdp4M9f7hJfE5D65v0HE+RMpPNT2od+Tkkh3+hTZTaKrjYJrzUKrzE
FaS1iZNbhSmCoZttomQuP61VnNgqTG0VJreKEjv6klt6U7iCZI4gUQRc/3m7oZv7ziEluYV3
vl1ysVWU0i5ObZekqo7FFCe3i9NaBdfaRMntkhSuMI0jSJIobyE8N+80N1UqH0j6iWLFLbG8
sE9RIJJn9w3ki2V5EjlJrMgSyymDSuIas0U+flZK5S+8vmsSeZ5EViQZuCUeIPLlOaL+bNlg
3poNS8cBMw6Y/wWNA2YcMH8eMIGlHP9idmC56PSOw+BU+MX2AwYtg2fZ/QT0qZ/NDxjceeb/
/Yyv99sa7rdZfeiYkab2NEzQ9hcvI340mPuMfaIVSIi5fghzeisfSMMl25sfWFn41Gv2fK3n
rDO1XRFdwPndNstsnFdIgStrflroF7ajkX9SU3dqCRXzvDFy7iKtzCIMtydlianW6Zj9dZ0X
tGeqX7+NEQA3mgXn28UXW0UpbaI08If64HmUo4ta7eI0riB5JP+4OJqOtInS2kQpbcJULj9Z
BGRtM4fC3bf2K2+yeqLbJJc4goutotRWURpHkMIVpHKFyS38hHbxxTbRBY7gAleQ1NKbKFNm
OcE3mW/boFSWiPpzJLIckTRP3EeWKnJE0lt9MrK0P0/Qn8mXFA0rS9etNcagLZTKB4L+m2Ip
qU9OlMpzRdICgTRX0k+UyovNzKDjgBkHzP+CxgEzDpg/vQfTElDGDSho8i0Xh+y0WwGBQCZA
vti8c1nzQHjr4AWv4J07Di7Nf+qlOUst/tqRmCuHCRkOV0nuL5ghZZU+S000nzCDWofOO6G3
XMvz7FGej0w7vOOgYeEL79nzNCuaTzK6w9D+bXkAACAASURBVDsBwl4bMxsXY6nyCj758E97
F0dfsli9aQkPSIy/Dpuq/u3qzfMWGc+eMu3rWXOneoX8PHfuvMxcXyFwncUnqLZJRKltondQ
aReljW6itIvT2sWpbSLV/jx4HHK7WHWsMoefLFBmbN6+xA21HQBIXYrknuFrvMFr/OGr/OFr
vUPXeoevCoYzBMMZPcPnu+XXBMO3hEB6p+wqAJDcUFt371oHAPfkQMEwcHcQKBgC8pVAyRBQ
CACFA0C+EiiQDZUAwJONmxf4+ZsDwMP+oTvDQOkwkAcAZQrlnWGgcBgoUAJ31m8ez2D+VYAh
sdFkFvh2FpSqBrxkoUgsFJmNBi1Yrzopko0is9BkFko1BbNQo85jL8dGGHuX/FHwMc4oEgut
OqyMhR7b+wcd/UrzD+KjRo9fG6lHfzyMj4c3DphxwPy1JTLfyr7j261NIJAJEAhk43ZDjvw8
dzDe6/jOzbv0696G6S7QzCr1VALpLf1nd1iuzHmEus/wXmqiU88jVLdi9x0xqm491aGMi0jd
t2WPaVmNz6TJX2MTLfnAxRdNZ7RmqUelWXUOnX/0OniZ6Tyd2XPPXXToGIp9zg4pqcaQfnEr
qz6+YNEcT/9NTxvCtbWnX8/2ECivcsTJqr33T58b9isnIgtT20VprcLUVmEqV5DcO3R994G1
U6f+oL9w1rx5unP0tOfN1547T0NvvqbePM158zV1Z6utXGmwbuOyeQvU583X1p37vd6CGfMX
ak757uuJX07UX6CzQE973nz1FSsXLVkyZ9483QXz9Obp6S6YP0dPT3P+wllz9DQmff2dptbM
FSuXzZ8/R2+u1sKFugvn6yxcOHOu3swFc2fr60+f/O2UccD8mwBDBqfU9+dl8ph59r0Zmf2O
ASoyfQSATzb8tbsfOaPJbNTYwm80/IB/H/f4jpfvWPUhin6r4ThgxgHzZwHDDSjjBhSx/SvE
J7cfWgaBfAmBQHbaLGLLznKGIv3OHDTbuoAHXDiZuGua1vfb9q+ct0xtvbkBg4d/XB+upjUN
fXJP9KXDyNPbWdLYFmlCzHWH7VbQ4kq/GWrf6RvM3npwyawFU3darHjVHVvTeZo7QLBzNdWa
/T2tI7KOH8bgRTX3XWgUR7YNR67a/GP0xWMceaLWzG8ziUgRcLNZmDQ2ffmDGvuEGFeQwhu4
smu/yf69O5KTT5yLQcUSvGLi/GLjgmPjguLig89F+19IPolAWH/1xaSTZ+yi49yj4zzwMS6R
MfDEFI/4C65nY1xi4txDsUfU1L7zRh47nxIQS/CJJ5yKiz1JiDueQAiMi/PJSD97PCTQxMQ4
luATm4iMifONjsHExgfEEALiY04TCAHzFuiNA+bfBBhVsqKaXjFkNprEwpDe/7/7MTMyRjX1
M//zDOY3RG5Gk1kYFQmYn+DTp4b0qz2OXCLJbPBdOJjfyGA+kRiNA2YcMH9+D6aMG1jI9KsQ
he85YgSBTPh5mzG1FVfbiX3Ve66iJeQFK4TeHc6SJhSX+504uy8l+1iTOKJegH3dG5VeCI+5
eoj8xOseI6ReEFPXefZ5S1BN++msEqS+ge696qAzBHvCdUemEF8vOEPvjqrnx1A7Qp42nX7V
E1nLC2fwzlE7w2hdEXU9kb+8Pl3TcaqqFaejOz0925c3mN7UE9/CT+L0prT0JnN6U/6gWnqS
OfzUlp7klp5kNi+pdyjjZ/Mlvn6WAFClBIoA4D4AlAFACQCUAkCZEigEgCePfrmgo63WLcoE
gIcA8AAAygCgEADKAOAxAFAA4J5UWmq8bO7d0jQAoAHAMwAoB4BHAPAcAB4CwGMAoOdmJ/+o
pwMAjwDgFwB4CgCPAeAxABQDwCMAqPrpJ+NxwPybAENkocgsNJGJJDajSCwkiYUmswJyWJ5E
pjfoT2QiQerksjG5jZ45jR7EZs8Cpj+pCUlkIT+eo0feC4AmsVBgGbSgiEwkpRlDZCJHwo5O
9EgiC5XL8spp8iaxkSQWiszyJ7FQROa7GX808igbRuOP3hrti8hEgvkKkeVJYiGJTDSpGZnT
iCIxfUgsNJHlRW72JjK9P8kwVXkcMOOA+bOAaQko4wYWMH0rJWfAwy53WxtzBwm0t1gGD/+K
j28QnWXwcLVd2EbJ2bbhRM5APL0bW9sVwejBMqUxzfL4Jkn0Kz6e3oVl8LCM7rNvhuMzi9zU
Z6pVtpzpBlJY/dGqAzF5kfQu7CtB1GvhWdV5/qojlrEMHr5ecLZREvWCdWaqxlek0kAAuCVR
pvcBmVIgQwpk9P8BSYGMfiBTCqSDtg+43gdcBwDS9l0mbm47BwfudQtz+X3ZfEk2vy+nV5It
6MvpFmYNDBTmF2DV1Ke8Yl+WKvL4kpv8vlzQgd+X0yO+LeoncltvLFyolUMKHxz8RSqlyORF
MnmRXFEkkxf29eUPDDy5fDVm7mxNvpgiVeRJpOS+fopYSgKfC+iXFa81WzwOmH8TYN7hgY0i
sd3Jze4klvvdjsB8DgaEATjh5jKRuSyPe11+hR3I7GaPXBaSwkaDM/vHk/tYqOQ2eY/FTG6T
ak7/oJ7MRpFZGDITVfIGRWb55jb6EFkwMhtDZmM+yJBGexxFC8iqj1MlIhNJbEYTOcjSTj9y
C5LIRt7rRuY1o0gsDKUZldvkQWKPfPCRLijNmPEMZhwwfzWDYflViENHjus3YEqjazux4DnH
tV3Yuh48vRtLfRtOfRsOnrJM78aCmKF1RoBlBg9fx4ukvg1jiaPvVAQcQ66taAmt68FT34bR
u7Hg6f0M1cHJ2LoePJ0HVuLp3bi6HlxtF7a2K7y+N8oJ7uLqfiQ6xgePQ2OjPLHn/rCiPSPG
XOKivcKi3KPjkT//vCkwwGkIeMATZUsGcsVyolhOEstJYjmZ35ejBEoKi3Bq6lMaudfkQwWi
/lsiGVkkU/kI+3OlA3ntHVn6+tqkPJxS+UQuLxgYLBkYLBkcKh0YLJHJCgHg+bX0uHlztUTS
fPlQQb+iQDZQ0D+Q36co7JflKwbK1q4bB8y/ETBsFImJzGW553MwOS89jidb3aB6UlpQJCaK
xEKBey3Fregz1+3OkmB5bV4kti+R6aGafz+10DQWNqP1IK7GImFsukNmowqYqNAb1tmvUGQ2
htLiTmryIbM/TFM+YNhYRo5mRSpUsFAFrX5Xyt1OpG2nvHYnNvhi4vZdLXeltGBymjzzuZhR
wHwcajyDGQfMX1oiE59590bL/hjaW2yd6rh+PIiEl72Ro4fzj6YgozUveyPreJGMnvDaLuzL
nliWJP4lL/L9d8aM8efh6TwseLA/XdUF7mUvrro11NjUePHS2Rt/Wrx6zSKztUtWrVmy2mzJ
6jVL/5iWrDZbunrN0lWrl6w2W7Zq9dJ1mwxmqE0LCHBUAvf50py+gTyRjChRkEUyokRBEkiz
AaC0qAivrvFdU+t1xXChqP+2WE4Wy4mjbv2DlI43t/T1Z5IpeAB4olAUDg6VDg7dGRwqGRi8
I5cXAcCza+lxenO0xP0FiuFCmaJAPlAoG8iXDhTI5PkDg3fXrV8yDph/NGBU0z2IjdG1piYk
qRF1s949jx188SF8wlRIFOnQnU7/2/WeuY3eOY3et+s9H3efUP/xu+U75z/qDbxFR5KYHuB+
DImFym30zmnwJrJQuU1euU3I2/Wet+o9iE1IcKM+t9E7u8GTyETeqvcgMlVpTfZrr9v1njkN
3qpEp9G75K3/hWL7RT/pkJpQuUw3Cssnux6V/doztwlJZqGITGR2g1f2ay+iinkq5OQ0eN2u
9wTHOZpI5TZ55zZ6ZzLcS974YtNtp838hkRDZ9R4QCCQ4It7y7qDcho9yWxk1kvX3EYk2AWJ
hSKx3gPeOGDGAfPnARMwmsGo3gdz0JAti6ntxH4SJKr1MR74Gsp3PrVdEfRuHIOHe9kTRe/G
0XtPjbiB+Q1uLJzG2pGwuHoBvpoTpab1fW7hKSVQLJLlSQcLpIMk6SC5f+j3JR0kS4dI0kGy
dJAkVuRKB0l9A7lDwJ0du1d5IXcBQGmvJEcszxPLKWI5SSwjSuQkQV+2EigpLopU1/iukXtt
QFkkkmVLFBSJQuUg6s/tH8xrf3NLf5E2iYIDgKcDA0VDw2VDw3eGhkoGh+7IFcUA8Oxaxghg
hgpkA/lyRaFssEA6UNgvLxgYvLtu3Thg/umAGX0WWYWZXCaSwsbc7Qp8IPF/1h92+fHRqWpT
Y/Mci9/4Fnf4F7b5F7X73+UHUDi+Fx+6Xn3uWtCKLuvxo3B8iUxkLtOb2IQsbPct4wWSWKic
JmRpd+BD0YmHwhNFHf7Zjd65jd6Frb7FbwPJbPQDwfGiNt/s114Fbb73+cfvC4/fFxyntGBy
Grxzm7we9IY4BW2x9F75WBhU2B6Yx0Y/4PvdEwTf7QnMbvAuaPN9KA65LwjOb/PJafQmMpFE
ForERJd0BTwSn3goOpHP9clt9Caz0cQmJIWDuc8Pvs8Pfio7EZ5hMXPeD1mVnjlcRFqpczbD
K4/jQ2R6F7ZjfhGfvM8PeiA8kcfF5DYhySyk6hFtMBMaB8w4YP5TwIzuweywMGD1R9PeRtTx
8Ixu3MeMGbUgOUDqgK+8rH0bxeiJqOOHM3rOjXlBGW4sY8AMhtENvstSVajtwr7i46q5ETPn
/JCdd2pQWcjvy+obyhYpskQDWaKBW6KBWyLFLfHArZGaLPHALZHilmhgpFIB2izx4G3xQJZQ
flMgu9U/nG++x9TTe5cSeCjsp0gGiCJZjlhOEslJYgWZL80BgNLiYryaxndNrdcHlEUS2W2x
giySEUEHoYwoHaB0vMn6cdFMch5OlcEMlw0OlQwry4aGS+XyIgB4fjU9Vm+OpkiaLx8u7FcU
yAcK+gcL+hRgBlO2bv34Etk/GzBgzkFhoygsDImNvs30KGhFFTRiThGsDiBWBicduPHk6A+a
38bmWd/pCj5zwzKjApZ454ij3/pcFiLtrkPaw6PpL2HHk6wzqmGkFmRBE4rS5nO++Gj4pSM5
bJ+7bT4R120Oeq45emJd5jOPu+1IMged/Ng5OtuS1OB59MSmcLJNaU9gZrk37NR6a9cVyIgd
pAZUXqsHkYku7kCtNF8Ycdu2tNs99OoBIgNx+tLBg8dW+CUcuNuNvvIIZu9p5ojZmFICK3qL
ITZ65bG8izt9w6/bWHuaHfXfevUZvLjLL7vRo6ANQ6pGYSJ37oWviyNbRd86qjVb7VotmtTu
Hpdrc7PKi8j2K3zjl/zoKCx0ywHXFe7hP92uxBR1+GY1YvKbkWSm9/gS2Thg/uIeTKXkXQbT
ospgcGPfaDn2fcl03igwxiQo3VgGDzwvOZz6Fk/nYUdejTyWT+/29kdeaglu9uDqBfhKzmmt
WdNuk4KVSnJLe15rZzHnbRG3s5jTWcztLG7tLml+U9jaXcLpLOF2ljS/KWjrvsPtvNPypqiN
V9rytojTWdT8ppDVnsduL2p5W9rBz5Erc7eZm3p67gGAB73ibJE8W6IgSeQkiYzYJycJ+7KV
QElRUZS6+pRG7jXFcKFIli2RU/oUJMlIBiMbzGvvuKWvD2Ywz0aWyIqHhu4MDt2RyQsA4Om1
9Hi9OVoSWSGYwcgU4BJZYb+sQDFwd+14BvMPB4xq9mSiyE2eRJYPieNZwMSs3rpg0jdf6Jvq
aCz8fpHpnO+mT4vL33+/54SB2eyVmxZrLJ4yd8EsShNm1Vb9DZaGOU2YryZOcj29pYTnR65H
5nH89Veprd/74yNx8G4nw8mTpxit0pmjpz5lxpQz13Y8loXAwvbNm69h8vPiH6Z/i4nfmV0D
156jM019isHGud/NmGi4ajaxDlnwBpNy38V0iw6lMTCT6qo+S01vidbidbqLV2p/+dWEn62N
F6zUNFg/8wetKdM0v0l+jCjiBhax0NuOGH47ZeKylVq6C36YNP3L8Gs2D7pOXKpwm7dIc+q0
ST+azdOYP2WBwZx5C2deph0jNvlMmTbZL2nP435v/PWj30/7bu7874zW6H2vPnmuwfT0agS5
A0VuQuQx0UQ2iswcB8w4YP48YFpUGUy56DQImJ0WRi390eBTZPRuHJiaqF5A+ekCbmTFDIRH
5MueyDoebkz2g68b0WhbMDKjG2yFp3fh6gX4Kk6Yjq5mbt7xIYD4sv5xdfWzGuqLGuqLmprn
NdTnNdTntNqKyqpnNFpVDbWCSiuvqn5SQ62gUiurap5X1zyj1pbXMsqb2NTXjbWVlU9b2gqH
lOQdO0w8PfcCwH2BNEesIIrkZMlHS2QaGt81cq8phgsE/dliOQV0EMuIQmlO/2Be+5ssff2Z
KsAMFA4OlQ4NlwwOlQ4OlcoVRQDw/Fp6vN4cTYk8XzGULxugyAfywSUyGbhENr4H808HDBN8
EMsnr8Uj+xXyUe+JYyfWQr6YFEnZ86Q3mPwKvdRMb8KXkMSiYw94QcYrdb+YCMHftitscLvX
7bd216J1BxfXDp/YvE9/6Qq9gnbf/E7/5HwEBAI5X3w04upByBeQs5n2T0XBRd3orbYrvtf6
5k6bZ1DCQQgEsh+2gvgKfa8LvR+xavbiqSVc1CP5qfMlNt9Pmxx61bJyKNTlxOY9jtDnkuDM
CpjGrOkmm+YUcTFP+05aOhlBIJDQK7DnA6cvPnb+dvKXXlFbHytOBSbsmfjVt+du2zwVnipt
D9ly2FhDe1IpO2CHE3SaxuSrj9x+EWPSy900dadPn/5N9it3Yr2nhtbUwGTLStlJo81zl5rp
lrzBPOw/Ta72mTTjS/TZHfd6g7IbkSSWL/ic9DhgxgHz15fIzA8YtPRH09/i63hRjO7IOl7U
b4vRrVIdL4reFcnojmR0R44UVPWfahUJWrBA74qs55+tbAmbNVszJy9ICVDqXt6rpv5SXfOE
Rn9RXfOUSntWQ31GrX1Ef/mEXveMWvu4lvGkmvaoinq/pvYhjfGE/vIZve7pk6f3zp4LS7uY
XEMtZ3OLBoC8HTuXe3rtA4CHgr4ckSxXJCeJFSSRnCgeIPOl2cNASVERXl1jSmPr1QFlvkh+
WzxAEQ+QRAqSSEESyHKlQ3ntHTf19bWJlAgAeKJQ5A8OlQ0OlQ4OlQ0MlsnkxQDw4mp67NzZ
amIZRT6Y1z9AkSnyZIP50oFCmTxvYLB0HDD/eMCwRh+d8sxvRpa1nV68avb6nfqPpWduMHwf
CU5E3d7/xVcT4ouPPhD6/2iose2A6bP+8BwW/H7P8XV79NbvW1AzgD15Yf8XkyacL3O+Lw+y
Rayat1jjPu/4BnMD6Lq5D1rRl16gc7neaYX2kyd+G59neebq9h+mT7/9yo3U7VXYFeDov+6r
yRNCUg5m0/0ftocWcE9lNbncf+O/Yd/ikMsH7gmCblBdp2l/fTLZouxt0F1esCd2q5belLw2
PzLb+wbdc6bOt0is+ZNhP+MtmivWzy5t9bpU7kpu8UnMPzIBAonI2Dtr4QxY8LpH/FMZDN8n
fScRJzf8oPb1jTpkPhPzg+aXx5P33u8JSnp2uJgbnNfic50OS6Q4fvvDVwHRe38Rht6o98gd
fVbtvwGY0WhjCyqN1lci8JUIXCUCVwXHVcHxlQh8FRwH1qhuqepxVX8X9j47YAhUBGgJNASB
iiBQEQlURALNNYGqqkwYqRnrOdZB1ZA24kNFJNDAS0TCSEwC1TW2Gn6J5QWL266tq17UgPwb
ABMw9jHlnRZGXFksvRNH78LTu/EgA35b9C48ozuyjjdagwcpAtb/RpMR50h6V+QrflQNF6uj
q3mLFKAE8upe/tLQVMtsrn1ZX/m6sZrVzGC3MOpeVlXXPKulV9bQyukManNLU3NLw+tGOrW2
oqr6eRPzZW5uNgQCWWawpIlZz+LkDwN5W81NPTz3K5UPxVJin4IklueJ5BShjCxW5PX25SqV
ZSBgmlqvKYbzxbLbInmeSE4RySliOUXYT+ofKuh4kwVu8iuVTxQDhYNDJUPDxYNDdwaH7sgV
BUrl02vpsXpzNCSyPMVQfv8ARa4olA0UjDxFVjr+mPI/HTBkNorEQpKa0cQmz8IWFKXBZ/bS
GU6YFSVdyFsNyMI2n5S79pO+mRJbYHdf5Kdvqr3vmOldkW8mHX2v5/jaXfM3W+o/4Efk0JHq
cycjgrbf5QdpzPraFmP6UHRi2bq5UzQnLlqpvhCqscRQbZHBd5Onf3mW6BKcvG/azMm3XnkX
sHzJTT6kGvfte5ZOmjL5e3WIycbZyKStpT3elx+5QDctuFmHyOsIyqK5z5j5jV/izpIOv3u9
x51O7pilP/0WF17M9c2o9lDTnoiM3PdQeGq+gd4PMybpL9dZaKo3b/kUvSXqP8z4Bhlr/t20
bwLjzIt5Prdeet/tPn4ixUpD9/v0Wg9Sg890DbUTFw/d6/G/UeWx39Fs2VJdvcXTtBdrfTFx
ciBh+/0eVDYTTm72JjJRZPY/L4OpHJncQa5UjZIGjlPdgoN3xzr/WwAzSo4E6mjCMVJDcyVQ
36sZ9SSAeQnoADakftSKqirE0xAEKiKmBnaJ6ekSv117llpRI6qsNfhOS0AZJ6CE89mWyAqY
vuWi0+BjyjsOGrClZ6lvwmq7I2q7Iujdv6PargjQs7YrnN4dQedFMHhYsFzbFU7nYX+lVfjY
Qm1XxEs+trIlfOYs9RxKoBIg19c/TU6Jj4kLe/aiLJeU7uPnFh0bVlXz6OXr8srq+w1NNfce
FIZjQ4KOo7JuX6lvqKbXPaXXPU1IjIFAIIsW65fdLWZz8xVAzlbz5R6e+5TKh3xRtqgvV9hH
EkqJwj6iSErqFWUPK0vyC6LU1Kc2cq/LB/MFklvCPrKwT+Ug6CNJFfmt7Vn6P2rnECOUyif9
/flyRYlioFguv6NQ3JH2FyqVT69ci5mjqy6UUmSKfKk8r19WJJUXimWF0v48uWIcMP9t/ZGn
yEgsFJHpQ2J5UFioO+3eC02nWziu/YXvl8nwLmrzS7nr9OXkiTEk+8fCwB+NNHbZmz4WBea8
9Hgo9Fuzfelm64V3eIGlXT4bLAygq2efL3b4Xm1S6kPnuz3BxmY6W/Ytv/jIKSLfOqrgUFIZ
IuWRY+HbQGTsdi3dqaSX7sUsZBbTs6Ar+FGv7/m7bv5JB3/aPR/y5YQTSbuDL+//2crwfpd/
LsuPQvecof5NYMK+e72Yop4g11NbFupNy2lBU7hBt2rcp2t/6x297Zn45ELjGat2LLn41Ols
tmUc0f5CydFLL2DXqo5NmzrNP9a8RIC5QfO43xscQNg5Q+u7W3Uo0mvPGeqTAtN2PO0NWrxc
V232dwEpO3FFh8k1CI05P3jjzO/3Bua88qMwwZ92/neeInsvZRkjbCUMVwXHgqlJ1fsZTBWY
wYxqNIOB/0szmHgqIp4KT6AiEmluhBrEO6h8nMFQESNEUTUk0FwTal0JVPhIJTyBBkugwQk1
cAIVnlDjGlMNv8zygsXt0NJVLxzNYFr8S7kBn2mTP6CQ5VcpCdtjZwKBQPZaQTsHLjAlMc2y
uOb+uGbZH1B/XHN/bHN/DFsW0yyLZ/XFsqXxjaJodn8sqy+G3R/Hln6g2BEby5LGsKWxTEkM
pz+urj12po5mTl6AEiC/ev10wcL5EAjEzGztxIlfg1P0hg1mFVWPmay6hMRYNfXpYOUXX0Is
LPey2C+TUmKmTfv+iy8nTpgwYcGC+c/KLyuB0p93miKRlgBQMai8owRKhoFSAChRAiUAUDY0
XAQAT++UxWtoTeW+zQGAR8PAHQC4qwRKlUApAJQNDBUNA6XdvDwDA73ikgQAoAHAQwB4DgBP
AeAZADxTKh8DAD0rO0l/wazB4fsAcHdQWQYAvwDAYwB4pATuA8DTTZvH32j5TwcMksxCk9ie
xCafXLbb3a6gbYdMtOaolXQE3+vxK5efsfVdP/GrLwglLr/0+i6Gzt7laPBcFJr5yvs+78Tm
fUu22ix5wAu+0xEYmn54pt73K1bMXr5dr7gDc//tCUuEqd7CWc8EQfcVJyuAU0lkmOl2PUoL
8jjhJw1drZwGj4IW9zsdPjuOLTnivbZqKPTh8Mma4RNLzGYedDA+CFuOSdx5j+ebyzyeQ3Ob
ofl94Pld97v9innB8LCf9edr5bV6UjiYW9VeGnNnoHA7ygdCzI9C5yzWeSTweS49WaOMiC1w
XLVdj/zaC7phocl6zWei04U9fs/6/DfvXfzDjGk5L2G5bOQ0rW+w6RY3K7y/mvpVHPFAHXDu
l2G/bIbnpGmTQpKsHvahb79E5rFR/8UMBlsBA+3YAq4Sjq2CRVJdwyqcIypcIisQUeXuERVu
WKpzRKUzvhyBq0REVCFwVa64ckRkhWtEuQu2CoavROCqYP8ewMAJVNc4qnMCHRFPcyPUIghU
WGKN+wWqRyzVOa4WdoHmRqh2SahFxNcgEmiucdWweCqcQHNNqvYgVLvE0Z1jaPBYKjyOBifU
IhKo8MQa1wQqIp7qGk89Fk9DEGgecVREHNUtvso9tdkDEb1Ve45GcSPqbuvxO+AS2WfLYAIK
mf4VklN7HAwhEMgM9WlLjWbpL5u1yFBH30BnkeHvCPTRN9BZYqS7yEhzkcHspVCN8Cj35at/
XGSkpW+ottho5iJDXX0D7UWGOouNZi0y1FlkpLPYSGeRkc4iw5n6hjMXGeksMtL5cZkWdMVc
DXUdYnHAEEB63fiLgeEyCAQyS1czMAjt7gH75pvJEAgk9SKhsuqXqVN/mDRpcmRUaOaNtGUG
iyEQSFCwf/3rmhMhmAmQL/Xm6d64ca2RlT8A5O3ct05nlral1cbd+1bu2m+6c4/Jrr3Ld+1Z
vnvv8p27TQ5YrFu5ZvE3U77dvXftgf0rd+1dvXPfyt371uzZt2LXvlUWNput7TZs3bbyywlf
rF278uDBn/ft37xv7yY7+x1HXKx27V63b6/ZQestCLjrt199Y757zcHD66wO/bR779rd+9bu
22+2b+/afQfNZqhPA8+oHgfMPxQw/XENogAAIABJREFUZPARsmYfIsv9doNncUdg0h0XyLcQ
o/WzIy7vtkObfTX966++/Coy1+6pGDl7kcYmq2VPhAE3G1wf8v2MNs5bsWPBw95gMgtFbHDV
WTwdAoGcvrKvqAOVz0FefuL+3YzJ+tBZoWlWmIit33w7adWOZc+FYaiIbZNnTM5m+FDYgXc6
/ez810EgkKOo1WFXdtp7rPvmu2lep3+CmutdLYfnt2LIXO+smqOTpn6Nit1xvyvgvjDoSMg6
TU0NMte9qA2TWeE1acaX7mE7Hkl9U+97/KD99VIzzTMp+9Dh2yZN+XqjucED/okTyRYQyJeb
LJdhr5vvtV/+1ZRvf1CbersGll3v+dW3kwPTrEreuqnNnbxsxZy4jEMB0TuXrJoDgUB2Oyyh
sDHkZh8i0x1M8v5RGUxUpWvkC8S5cvfICrewCidcLTys4hi+GoErd8WVu4dVuEdUwPCVMFyF
S2QVAlcJj6iE4yrg2H9PBpNAQ8RTEedprgkV8KQaz/M1brE1sBiaSwzV+TzDjVDtmljtEU91
j691I9TAR5OYeCoijgZLqEUk1CASK90uVHtcqHFPqIYnVMPPU93ia1xjaW5xdO8Yqns8DU6g
OSfQnOMqnNI4SET0do1ZaneYmLLWoKJm/zLVq1w+xx4MJ6CI5f9CdGqXLRQCgSwzXHImEhYU
evR4mFNwmNPxMOffVfAZp+NhLsdD3YNCj4VEIEIjjx0+smPJUp2r130uXUWmXPS8eAmddtkr
9bJX2hVvlb3inXbF+93lZe+L15BJF320tbVvU/yHgcIm5tNFSxZBIJCY2MhOHofFrt+yZdOE
CRMiz545F42FQCCbN/9EZ1S8fFWDx2MnTpy4fIUxu6UuvzALAoEYQ5c2NzdwO+5KgVt7D65c
tdIwMOAIGumARjqjkY5olD0a6YBG2mPQjp4e1mHhnus3rFu71jg40BGJPOjlfdjb0xGNtMOg
j643W7dksT4KZX36JAyDtkSh9nl47PXHOJgYz9eaOc3P19Hb0wKJsiIQgk+fcMFgbNeuM1uy
aIEP2h6JOoxCHkIj7by9bXRn6o4D5h8NGBILRWShSCxkARtDZGKy2R4lbUFRGUf0jbW0503X
XzEfe9UadnzN+QdH7nWhjgZu8kncdbfb79Zr95IOP+9Ic3TMrtK3Abdfe9x96+dD2GntteE2
3S2PE3y7ybXgrWdqyVHjDXM1503T/VHDHrWC3IC41+0TffuYDWo5sRFNZnuQmn2LOAGHvdfM
mqc+U099voFWAGFbVM5+c5jZ3Y6gXKYnqQVJrnc/6L4qJt+2uB1T1OGDy7ZxRG/O4yLzWlC3
6WhLpPE5sk1eB6qA659c5Gq8ab7uQvXZC9RtPFcVNvlQWpElHPTxhL1zjNS15k43/Ukv8uZB
+PG1t6gYMsvfynNFZIHNPd6Js1mHFq2aOXOexmLjOSFJOxEBW7X11M5S7O90BOU0IElsFOm/
95jyu1m7AhZZ7YqrhEeUu4RVHcVVOeOfw89Ve0ZUIs7UOIdVOkWWu+LKYbgaeFilc2Q1Alvh
hK1wwlfBsard/tG9mX8BYOKpiASqawwVFlvrnEh1uVDjllDjGlcLj6+DE2rczle7J9BgsTTn
OCosgeYaV+0CJjEEKiKODouvcU2sdk/6f+y9d1hT2fb/H2ecccYZK1ZAUFERpaOAioKKUsRC
CUVUID0QktCLWJBe0miiFGkWWgDpIDYUCL1DCk3FMtKkJpBk//4IoHfm3s+d+V0/3+/93uvz
rOc8++yzz86BP/brWXut/V7NaFqTHakBEVaLJTdiqE2oiCYErQkeWYeKrrOLbbSLYMBotRha
LSa2xwFD0t+4Zf3DLoeKN96iGIwoAexrBflrp66etlaFQCDGlvu4IPkjiBoG8cMgbhjE/zOL
GwJxwyB+BEQPAdpHEP+Rn4x1MtIzlAegAoASAPIBKAagAIACAAoXGiLLByAfgAIheAhA8dh0
nqTkuge5HgJQ1M16vnuPLAQCiYgMbe+s6WY1nT5jCIFAbvj54AlYCATyww8/QiAQyBLI999/
B4FAVqz8uabu8f30eAgEskd+V3NzHaevkA/y9AxU3F1QAPQB8BKABgBqAKgFgAEAA4BaAKoB
6NfQlLt2zQ6AHgCeLTx9BEAnkQg1Oq0OQIdwXmi5AoAXADCDg1Gnz2gA0AZAHQDVQvAUgFIA
er09iSf1VADoBqAGgGoAagBoPX78m5ryvzdgcnrwdA6R3mufx/TM4xAye1GZTKey106lr3AZ
bQ5F/R4l73HF7wkPX3nmspyfvPUpfkvIZOFzWC50lnv5O/fyd550NoHOwWcx7cvfuTx575vb
i6JzcNnsy+ksXPEbp/I3bpntLplsr5L3HvkDrg/YmMLXThXD+KxebB4HTWd5ZfViyz66Znc7
PWiHP+xzK/2NkN7pnNWFf8h2pHOw2Uy3XJbT8yHfojdO2SxMFsu56JX7k/ce2Rwivccpr9f5
yQfPolcEeq9HJtuxaNCx7L1LVjv2YZfXkxHX9D5MFtMpl4179Na9gOPxoJVQMuhR8p5Y9t6Z
3ovP6kc//uhZ9MaZznIue+NW2O92txlV8Nrp0Yjnwx7nrDZ8HtP5YY99To8DnUOkc/BfATCi
PK75Mcj5wMl8JthCiH4xfCKKmtSiAmqRQbVI0eZYcB1ahJngRvugRnRgAyKgFh5ci73BQPrX
IYOqUIH1tn711qQ6dAgDE1KHDqpFBNYjbjDgQXXoQIZof2wx8WzxV1BB8zlpol+fp5Hoe0SP
Pn/5P/CB/g5gOu3hIaYSMmLURmRkG5LWCKeKAiENKOp8ivBiEGUhXL8YQWlE05pQtAZEVJtT
VCeB2nKR0gCLasJFNqLJjcjIWkxMMyas0SquHRtTj6Y1o6kNCFojilKPEKWKRTThqE2osEZr
chvydi8xvh9zi4UmN9hQ6xAxjQRqowOlwS6yBR7X4xLVi6N2wG9zCPDQE+JbNxQy8WWvPEoW
tshEjBE1SvvnAyoiZpSK4iuingH3z2MGPMr6PUoH3Mv6PUr73Uv6PEr73QvYrlVjvqetNSAQ
yKlzaoOfEjvehXR9JHf9Ru7++M/sN3LXR1LXb+Su99SOD2HMYQrzNxIKr699fO8Yr+D95P3f
pu+9n7r3birtw9S9D1P3P0zdW7T3U/feT937MHXv3eTd4dn0gdcJ4ptXZTz0ngN5THal7G5Z
CARCiwhlshs6uxuMjAwgEEhA4HUXV8clS5Zoamr63vB2cSX4+l4JCQ2g0kLaO2szMu9AIJC9
8rKtrfXs3gIeyNE3UMNhLQWChpmZYi63ZI5f9oWVcrmlfH692r4dbh5WAsHLqamCyel83lzh
1FSeQPDU1sbg5Mn9AsHzsfGsaV725HTe2KccgeCJz+XzJ0+q8mYfT03mz3ALubyyyclsgaDS
EYfS0dkjEBRPz+RNzzzk8Qomp/O1j3yraPnvDRiRkFcWB5/Dwj9kE7M5+Jxep+xuhyyW98Me
Yl4PJpvplM4kZLGJuSynbBbmHguZM+CSwyTSWYR0NjqDjc1hEek9uByOYzbbMZ2NpDOJD3ux
uRyXXA4hvcuN3kt82I+lc1yzWM4ZLPucPudstmMGE0Fne2ZxnLOZxFyOUyYHk8t2f9jvktPj
kclC5vd45/ba03ud6BznXDYhr9f1bhcii4PL4eDpHEJOP+4BC5nT45LNcchkO2SwcDkc50wW
LoeDz2Y5ZbLtc/oJOf0uGd1Eeg8uj+OY2+fygOmY1+OW3++cycFmsjwyup3oPbhsDjGDRchg
OtJ77LM5Llkcx8JB1ww25kG3U06/S24/tqCHmM12yuYQv1aa8sJK/SVsFrkiCtF/HrAwFTKQ
gQhcCMYE1iFvVNtRWvGnHY+c8tSgNBOv11wIqkcH1iGDGMiQavT1hkvkdqJNkIEVTYfc5OLH
gPvVwgPqkAEM1CKxghZ+K7AWFTyfGoAKrhU9RQfVIeeznOvmk6GDvsxy/gc+0B8BQ+pyQASb
iG9fR2lCRLWiIuphlEY0tQlNa0SIDqDQGtG0Jgyt8YtwfROa1oiMaETRmlCUeuQtpr195FkN
813RdVhaCzKiERNZD4tqRkfXoqlNsEgm9vK9C8aeyje77Cn18znHtEYUtd42otkhvAEZ24WJ
qCbah0MveBx0SzKKa8fFtKHJjZfCGi/d6saGPLZDBp+1vnrYr8Aq4YMzMvTEekmxYja+dMCt
ZMC9tM+t5AsXpGzAo2zAvWzAvWQBOaLb0n730r4FzPTPb4iVDbiV9nuU9ruVzV/dCtiuVeNu
RudVIRCIkYnGB+5t1nAAe4zEHg3jjIX/z8YeDWOPhbFHwzgj4axREmcsomeUirA/eVRXYZyf
NzRzf2gmbYSXMcJLH+GlD3MfLDTS5xszD0a46UMz98cFmYPvUiU2r0vP95oFGUxOpdwe+SVL
lkRGk5jsJha79fTpU0uWLAkK8Y2MCodAIIaGeiNjr6emh55Vlvn5X6VFhjLZzffuxy9ZskRR
SY7T09n/uowP8vROKeMdLYTCWt5smYBfKRA8EwqfCwTPhYLnAuGz2dmnQmGrurqck5upUPhy
crKAL6zgC4qnpsqEQgYMbnxCX10orJziPpzh5XNnS6e5+UJhqY/PJV1ddb7w0dxs8Ry/ZI5f
xpsuEQqrCUSYzlFlofDZzEwhf+7RDK+Ax3989KjqN8D8ewNm/iiME53jkMMi0jlOWWxcLseF
ziHS2Q50NiaX7U3vxdJFRbo4TvRe10w2LodDyO11zOYQ6RynvF7nbI5jDoeYzXKm9+Fy2R50
lmNur30OyyGn1ymLRchh2+ex8bkcAr3Hgc4m5rLdcjnEHI5DVi8ut8cph0nM6XGgM4k5bHw2
2yGX45DLdqKzifReIp3jTOc45PQQs3ud6D3OORxibq9jFguX0+tG5xByenD0HgKd45rNds3p
xeVwHHM4rjkcpywWMbvHPrfHLY/tTGc7ZnFwOf32OWwinemc04vO5mBye4h5vY5ZLMfcXiKd
7UbvIWT34LI5jpldrrkcQl6vYyYTn83B0dkEeh8xa1GS+St6MAxEUBMs8AXSrwblW2sbUAsP
fAkLqcYE1aFuNMADqm0DahABtbahDJRfLdaPgQx5YRvEQAcyUMEvEUHVCFI3bs/BrYq62yM6
XQIY8KBqROBLdGAtLKAOd73KNrTdQV5n1/nI45GdDv5VyGuMC/4N6IBqO79KhH8dOrgB4VcL
C6pCBlfb+jNgVxrswhmY0GrYtVqEfw0msOGSfzXWrxodWGMTXI0JZmCDqmz8azGBtWi/Bvif
92D8axDkTntYiJnkTrGIWhS1BU5qQdEaL0XU2UXVOlKa0NQWBK0BEcW4RGtBUBuwlBZ7ap0t
rc4uqsmB0oCi1qGoNYjb/fZnnLWWL/s1thYR2YYIakBTG+xpDbCIJntqHSp+wOUU+qAOUjm+
B0euuRTRiKQ1oyMa4eQGWGgjMqILcS3vkuSeNUvXfLd55zrIz0vVT8tF1RLIDZjYLoJ7nPHq
TT+vklixUnz1KrFlV7PN8TEmGyXWlnDcyvtdy3s9y/u9yvrdywbcywe8Svq8y/o9Svp9Svs9
nrzxLOlzLX/tUtLvUdLnWd7v+fSdR+kb50KOZ/kbt9IBz+I+99K+K8V9hMeDvkV9xOI+r6Ie
z4I+Yu1koJG1JgQCMYKqvJ2OZw1R2KM09giVPUr7Z0YVDeOMkbuHw3o+RbCGwjEE/WPH5acE
uaO8B8PTD0a490a4GSPcjBFu+gg3Y5SbMcJNF11FgBmefjDOz3z7290tEpvu0V3n5go6Op9J
S++CQCAUamg3q7mb2aZ7QhcCgTi74Ds6GyQkN0MgkBMndNBo+FqxVRAIxNkFN/Caee9+IgQC
+enn5Qg4vKMra3aOflxPCY83B6CRxysSCB8JhRVC4WOh8LFQUCEEj+fmygGo36e+w9nDHIDa
meky3lzJLD9/aiYPgOd2cD1dPUUAKsdnMmcEeVOzRZPcbACKr1y1PX5inxCUzfHL5wRFvNmS
6elHADzDE+A6R5UAqOLNFs3xK2a45TO8Yp2jyt8A828NmIVyyAur50IjZz4314ne45jDccrh
EBf7F7D0WcpsUWA/h0Ok9+C/rIO5oKRJFNVUFqVjLd7SOV8UXV4EXs9ineaF+s2c+TyuL6od
E+mc+QkXZpgvFjD/GQtIWPgY0euiijJ/UzU5Z34e4vw8n9U/P5eO/ipil4G1yMBaRGAdKqgW
HcCAhzQTKO3O4Q2YoCYCtRt7o9kusMbBr96W3EoIbSYEMNHhdcjAGoRfG4rExPu1IkPbYeFs
lE+1A6ULraAruU9P7uYrr8B2pG/HRVKHU3C9rW8NgtzmQCg4t+vAlrAae786XEgbNrKTEFxl
H9aGp3YT/OpsAqrQfk3I8DaHwHY8rRkT1IQJrEOQmuABbYQIJsa/AR7WjgtuxYZ0E8Pb7Hyb
bKhd9lfq4eQaVGg1PGDhvOef8mA67VFB0E3bxSNaMXf6HSLanWNbcAlsh8h2FKUZE9kAi2Dh
otvwMWz87Q4MpQUV3Yq51YuLaMfGdmITBtAhDei4PnvoZfXlYr/e6sUlduNiOhEJHEx0C4bS
jIhqQEW2o5WObvFKN4tnO99mEiLr4OQGFKkFncBBR9eh41k4VX2ZddLrg8vOx/U746INv1sC
gQceuf3a3r/y0rr1P2qbqUU1XYpuslM6Jiu+R8yOdEJiy885HV4lr51LevCl/Z5Ffc75HNfi
V/iCHqd8lkvRK/eiPpfsZnRxj1c+m1jcd6W436m8x+teDSGP7VI1fLmI7VrUS3w+5FHEcasa
vpLTjn8x5Fz+yufpO598jjPj03UzpCoEAjllpvGOG8scDmKPkdmjJM4Y+X829hiZM0ZijZDZ
o1TWaCh7nMoZoaBwesd1FSfmsodn7g1xs4Z4qUO89KGZ9GHegyFe+jAvfZiXIboOcdOHeRkf
Z+6PC7IG3t5fv+7X3DIiAOWsnjKjM4a7ZLcn3onp6m7o7GrC2iO3bpUMCfV/PcjOoqep7VMU
xc7FxTdevebBZrc2Nr9k1D47dlxr2bJlGzasb2q9D0CVrp6aI84UgPa5uTKB8LFA8GQeMMLH
QuHjudnHALRr7N/l5mrB51fMTNNnZvJmpsunJgv4/CpbG70TJw7w+ZUTU5kT3MzJmYJP43Q+
v9zL88JxXZW5uXLe9CMu7yGXmzM5nc/nP8VhbbUP7xIIKqam6VxuPpdbOjVTdFRH5Rtg/q0B
I1pG52HwedNsfsFdkPEn0Hv+RtI/Z0GZn74Ins+SzIsL9xfgERFLRAgOcfE2p2fxdoFVnPkV
f55hizxb5NMX09I/I2HhxZ6FW9F4zgJy/vb1L+aZ/+sW6EXI+ZJSXxbZ/JcBE1CHCqpF+Nei
r9Sjo5sv2acZqerv3CyzXmLvthM2il7PbPwbsYEMuDZGDXXL8ChGfdth8eBKpG/FpX0milI7
xbaprDf10/drQFO7HJWPyKoZyZmHHpeSXbdVfu0JzIHgGrsQhk0Yy+G0t/bhC4q0TkxoM8aa
qrXnwA5xudVb9m86536QxEAENzn6lNsesJbDZZxSOaqgfV7Wj4HWQWsiySe1z8tLbNskf3T7
lYdm532PbZMXF1dcdxqv49+AvFFvE8ggiP7AP+nBkDodkMFnpfduCnpmrWslL71nvcSeDWqn
d3vnWdE6UHda0RZ+2uZBmkiSkZScmOuDs/EdhHMELcm9G7bKr9WDaZGq7VP6sVCnA6s2/IqJ
N5bbv33TdrFDprtDyrHRzTaxnUiXXLO9mpvjOBgjj30nicdjuu1i6tCUVpS29a6LgcbxPVgp
ieVGxMP3RtxDGmCxrzAS8mKaFqrpYwSrK9o/r1gR3GqTPOia+sHlaqUdPEzHMlRHSnzb43fu
VdPXH390L+B4Pfvo/fxDQMVbz+rhq9XD16smiNFFCAviwVbejcoPfhVvvfK6HX1unrp22yKr
CReSZnnknKKO2T5arkX1iBc++NgBo91GNjplHKeER3baFntPwZR3yW+BQL4zMN77dia2+2MY
Z4zMGiFzRin/1NijZPYohTNGYY6EcT7R2MNktKP+MV2FST59hHt/eCZzmJc2zMsYFrksvIwR
XsYIN110XdgiezA2l/FuOEXzwP5QKqbiUVR1TWkXs62ru6mjq76h6XlTS3Vrex2T1dbWUd/Q
VNnZ3dDeUV9QmJ2dk1ZT+7Snr6OuvrK5paa9s6Gx+WUmPa24JLfyZUbFk8hjxzWdnawBaOXO
FvIFzxYBAwQVQvBkbrYcgCpNdelr1y4C0AFApajOMQBVADQ5Op49d+YoAE0APAfgBQDVADwC
oDY4CGZsfAiAegBeAvAUgBcAVAHQ43vVychQFYAmAKoAqALgOQDtJ3XVvgHm3xow3+xP2tfx
YOqQfjWIgBbMZfr5735YulNFwspX0wCtvvQHiJalfEQX+kYNWnzH2hXrV0srrDptf/haOUxi
55rV21aaXT+ic/4gBAKxctOM6fHcc2rHDz9+v+3YWutgo6MwNQgEcuryoag2x8AWvIK+7CXS
8YhB10sBBhAIROv07os3Thy23L3kuyUXAvRIvQj3DKsVPy1fteXn7SqSFte0/aphazasWPbz
0sN2e8yDdFdLiq9avVzi4Obzvie0L6pAIN8jw06R2hB+DNvAP+3B+NUgyB32F0Ogm6XWSsuu
EVu/8rzHsfPeGuullkvLS5Eb7G73EQ+dkV+9/MdN8muOmu8OKoMdtlRY9hPEhHjQxFULsuIn
dYNtie+dzl43WPrd95v2rrbxOH7R5+TSn5bs0ZOK60Te6SHquWqehu1L+s3JLc4MAoHYUnRz
h73Puexf8suyq/kX4vpdDpju3rxtzdVy21g2wTHs1PJVy5DUk5lvXQ+clpPX3hL2wvZi4Flr
f72gAmjemM/FSANJ8dXOpMNWztoxBbCX733iy2GXbxrcKrTxTzCxIpx42IpPLEIdPb3fKey4
E1mvZsyTWmDpFXU2vcrhAQNz0koph4EJTTYxuLgv7SVWZr9446D3WZiq43V9E5RaVLb1/aeE
rdskIRCIkYnK25ko5kcKe5QkwgZ7lCy6ihqL9sWtCDBU1mgYZ5zGGaGgHfWP6yrOA4ab9Rkw
vAXALNgwN32ElzE0kz46m/Fh7O4hrRNrxcQkN6/zdPO6GRtDo1AiaNQIGiUyghZJo0XQIiJo
1OioiAgqhUalxsfdTkyIi4qkUcmk6KjISFpEBC0iKpIWFx97JynBHHpWcsuqFSt+ueyFBKBh
bq5EIHwqEDwTCiuEwnnM8OceA1Cvra2xb7/ilSswZ5eL7h6WXp4wF1fo9RvwfRpyR49q+3hf
9vRw8fQgeLhjAgM8AwIcVPft2LR5k5f3RTdXi8AQvP8NH1dXzGVv4qULSFvbiylpkVevunu4
4b29CN5erluktnwDzDfA/CfY10hTRgbUogJq4BGdGNsYE4WTu8lNSOoQ7g7wPWavLrdP8lY7
7kYtWnznqi27JcJaMLff+hi4av+wHOLz5FLIAC5uwPugyR4Jxc1RvTgF/W3rN60JfUmk9DjT
ety27hdXOrs3muPkXQCX3r/W98nFMDbhNOGghtmO2wNXSe+8UyY9typL74PuuvWB4JZjvlzs
+wNmGrEcRzLH0Zthv05qlYbFzlt9l6PfESx8DkC++86Dbhr5nnCtAb1eYs0JnAKJQ/StsQv8
x1oAf9wiC++wR1HPrlz1466DMleyLiROuGSDaz7pJj/8tJT05FLMoNsBuPqvv/7gkw9LHL/s
nWEJ+R6CjTVIfuua+s7TkXLip5+/j3xxwSxYd8kPS3zSze8M2ieN4fVQSmJSq8mNNgkdToq6
2xwTzsR2YFP67K1cD4ltXuN459yvG1YiI088YDtENluHNWMkt4lBIEvXSf0KgUCOmSnFDRJC
u5Bqh2QldqzfJC8mvnPVRqlVP/60xP6mAT7JeAkEgrmsQ065oKK97UXftSNn5UxQakhvvXNw
JVfyOV1rpeRSy91qG6JzbNX1d5MfIG6kmN1/iYf7aISmX3r8yi3lCfKExR4P0rmX768fNt4N
cz6iY7w1NMXkkKHSeYIW5rr2wWPSEAjE0ET1zXQke4T6R6IsYmbx0cKAfx0w98cFmX2DaZs2
r41Nwr56k9bOjG/tvtnBiungxLSzottZ0W3M6A7WzQ52jMjamNGtXVGN7ZQO1s02VnQ7M6ad
ebOTE9PaHdnKimrspHSxb/UP3tPSUSISzAFom50rFQieCIXPBPNhmAqh8PHcbDkAjLPndCWl
NhidVdXVVdHVVdE5oqZnuF9RUf7XX1bq66sfPbZPR0dN96SqznHFJUuXbNu2yejsIYNT2seO
KZ8yUF+zVmz9+s36BhpHjymfOLnPylp/9x7ZrdskDU4d0NZROWGgsXrtym+A+QaY/wT7Gh4M
QqTyEsCAhTehQ7rhXnQbK1+D00771m5YtefYTlI7PrgFu37byiMoJWoPIaTRdtcxcQUtmcg+
wrUnNn61KN/nti4FF8gs/F6drZqn94Sz7K+9uBBSi5U7sFn17K7Y985m1w5rWuygdOL9XiJI
7VhShz0y9bRV8GEduNqyX344bqtIeeXmlXnhl6U/IxLOhHbCA5/a+NbANkqLnfU6FNqGI7Xi
rK8fWS6xIqgKG1qHuvHMZrPkKgOXfaEsp+CXdqK8sj8fg8EEnZHYJXH7NTLsuSmSbGzto7Vr
v8SyVT+RKm0SBwhaFrsVD0rHsFGJLIKZm/L6rZuj6pGRzbZhDDi1wfFyPjSOjYd6HFy5enlE
CyasDh7PQhnC1cWlN9C6EDeKLBQOSoQ2I6Oa0OQ6xM0WewVDme9/XHLykmIsk0BhICO77A2R
Wiullll5HbajGh67qCwmud4+xjB5wF75jDwEAjG/ciSmGRVZj95vqvCL2I9W145tXrceH6zr
GHBS/vDGh43u51AK6TWoc9jBZ74BAAAgAElEQVQDSc9QDdO+TwZ9Ih+ePw3T7Adkl2B9lNdJ
jxiDJwMEuLd2RIF1I9c/tuT8WcQ+G3ft9DrsUai8b4yxOfYgyueErMbWiLxzASnmP6/8EQKB
GJpovuPRmB/Joi2yL4nyv+nB3P/Ez3z97t4WyXW5hb4AvJjm5fNALk+QzxMU8EExl58/Cwpm
hQWzwsJZQcGsoGBOWDQrKJwTFs7yC7nCfJ7w4SwomBPmzwkKucICHnjIncsH4Nmps+oO9sY8
XtPUVOHMTCmPWzrLK+fxymZ55bO88unpUh6vdp+KjLf3JQCaAHgEwBMAngHAuJdGO7hfhjdX
CsBTAJ4CUDnDe7pR/KebsUQAqmaFJULwEACmGfTAhYtaADQJhBWi7TLdYxqhYWgAqgSgFIBn
OtrfzsF8A8x/hH2FGEwtMqgW5cdA+LVgfCtsZQ9JrlizXEZJTPmk1EY5CTktaUorNrgRt1Fm
7XFbtYhePKkRt+uguDpUjtxJCKi2u1FrF9yGIzHR4UycwjFZxZMyNJZzcDUspA25Q32T+imF
mEGihqGsZfjx0A7H8AYHbMYZsa2rxbasllL/dZ+BjNjaX46fV48YJHrkWP207BdYzClaOya0
hhhQfWHDtnWn3Y5QuvERbQ7GvkeWb/4x8AUiuNHO9xlSYouYPkGD1EMIfIH481tk/jUIUgcW
FWK2eetG/Qs7lq36ceueTSraW+QOb12x9le/p5eSXzsdN1eSOyAe34GLf00wwipK7dl0swUX
2QKPqIdFtNrHv3K6M0CEumn+vOrnqBZ0eOOltF7cCdh+MYk1KQMYK69D2rbKcb0ESt0lWj06
nu18xlUTAoEgSLoJna6ULvSVfCgEAoH5H7/z0TGhyyHptaviYamNMr8mDxBUjm6VUlh3s8uW
0oK53UX0LDL7RWz54fMqy77/AReomVyNVTkiVdx29cRF+eRnNiYYlYDEcy/fX74WCyWlWx+3
Vm+eu+5w1UDPUs4/yap29LKNxzH/RHNzR+36Id8KjquOibw3FXrCWnYU3AxINjtstu2YpfKj
XmIZ22PNxuUQCOS0yaHB6QjmcOgiUVgjJBFOWCOknk/UP/oxXwMwDz4Jsl6/vyO++dfs3CCB
sHxs8v7YdMHYTPrYdN7YdMYnbsb4TN7IZMYY98HoZMGnqcKxmYyxqeyJafrENH10KmNshj46
mftpMvsTN2ts+sHYdPqn8XS+oFRXT8HT8xIAIwDUA9AEQDMALQvXFgAaAeg7fEDexcmCz385
NVU4PVs4zS0S8KuiYq7t27d9fLx8jl8xNV3A5z/6OJK7cd1KSgRCwH86Pl74aTxTIKg0MT5k
YnJQwK+YmCyemS3gzhYf0z7q639eIHg0OZ43PZuvdfhbkP8bYP4j7CtlkaH8auARnfjDxrvF
Nq7F0y0Cqhzi3nmfct0voyERxkEEMWBiMlsOYdSo3UhSB1bu6I4datKRvYTrz2GkFgf3FKie
o3p4i6u8zlYlw+3hTHu/l6jAVuSOfVJqFsr+jTYy+zZeLrYJbcaH1aO27tkipyYTXA4LYNhG
fbwqc1D6gMnO6DdOxELTJT9CYLEm4R3oG3X2frUX129becZVI6TLkcLEmPgeXbV+xY3qS0Ft
jtcqYRulVpzEq5B6MX7VDkEMROCfPskf3u5gH3VqyXfLl638CRlhFNKESn6P9cm1/HnlctJz
87g39toWe3cdkozg4BM5OCtP9TXiEtTa8xFN6OA2+9CXl/RgymE1GJOrOivW/kBtRoY12Sew
8HootdXSq29zUPvO7rKlHktiO4XXoCJZKK/7xj+t+0nJQGaVxM9+5VZxA3in+NOQ75cGF5+P
7EKFP70U8Z5ghFdbsW7trR7CSStZKSWpaKZ9eC0qseVCYJ612IZfjp5XWLVi2WkbdfjVIzv2
iUU9tLO5qpH8nJj21FHbdI82VOmSu07S00tmTiotPP+rN08fOrftbpVz9cg1tJ9R8jOYjefh
Y1Z7dSz2utOMHw+4G9gq6l9UPnBaPumRnU/EhQNnFE5jlaR37IBAIIZnVT9wY5lD4ZwxCmuU
9DuWsEZIzOHwv+0ks0dJrBHyvwiYcUHW67cPxDevySm4LhTmjE4mjc5kjM2kf+JmDU8+GJ1K
H5vO4glLx3n3x7n0cW7Ox4mkT9yMyZmikfG8T7z7Y9P0KX7+ND99dCrv03Th8Hje2HiuEBSj
cZe2bttsdd7ADHrY3PwY1PyIueURc4sj5hZHzC2PQM11LK0M1oj9fCPIVih8Ns0r5AoKeLNF
QuGT+PgQFZXt45OFs7MlM9x8gbDs42jWpg1rwskwobBycipvcjpDKKw0PXsYaqojFFZOTRVz
eUVzsxU6Woev+1sJhS8nxgq5cyUHtb6JXX4DzH+EfRXABNQiA2sR4UxH6YObZTWlYz7iaL3Y
65WITTKrFbVlQl9j/Gvtt27beBiuQu3FhrajzG8cgyz5AZ9yJvItPqjTVUZlg+T2ddGDOEUd
KVX93dRuR/8a+6BmO1k16SNwTdhNw30GuyideN9qm6BKG7GtK48TNRKHiBEsR0LmxV9WLNN2
1Lj53sOLDv3lp1/tYs+GtiJv1CH9a2EbJFeau+qEd+ODO2AWN06uW7vGt/qSb5O9X6XNBqk1
hvjD5C6E36LowJ/zYMLbsdgIMwhk2TrxH+KbYQmD3jc78AfO7vnhp+8jazE3PzodNdulclCa
0oO93WZ/46HVkqVLLN0PJfW7JA+6GzurQSCQ+AYE9KrGilWrIpqQpEb7FA7+JExVYvfG0ArY
Ds2toTV20c02pGZcXBtRUnbjMUvl2/1EKblNqlpb4gcdbjy9tGrFz7qWe272uyb240kv7MSl
Vqsc2nh30B13xxSyFOIUdSbmjX3Ca9xxuPrqDb9e9DbcsmMVNcc2sx6f32mf2UAof+VW3u/1
dNA7uwUVW4R98dav4pVzeb9XSZ/L44Gr+Z0uZa9cSl+5lva7Pn7t+eK9560yWFo19ul7p/JX
18v73W+V2D7swL58f+PZW6dbj81Kez3MbLUgEIiRqdI77s3uj+HsUTJ7ZB4hrJFFwMxvi4nc
Gs4YhT36dTyYMX7m6/cPtkhsyMh1A+AxH5QLQPmssGCKly0EjwWggjuX39oZPzX3sGcgseKZ
PwAv5kDJOPcuT1goBKVCUNgzmPD2twdCUMoHBQKQPzWbOScogkJPSkuvO3/h5FnjA2bQE2am
x8xMtc1Mtc1MdcxMtU1NdC5c0F3+67Ir120FghczM6W8ubKZ6UKB4HlcLE1FWW5isoDPr5ie
yePxSkZGH4qJrSGRsALB84mprJHxuwLBC1NjLaiJtkBQNTVVMM0t4s89P3bk4HU/a4Hg8fhE
1hS36PBh+f8TgJlfRlOgyqlQJVEjxUwpFaqUYjb/aKGtlAJVThU9NVOe75kf82X7787/5aPP
PSlmSqkLb6WYKYumTYUqpS580heTL4z5YvL5V6BKoi+f/7Y/DPsGmP/b9hUAw0AF1iEDqpGk
Now1SR/y/Q97D0kdPSW3WVVMWn7z8uU/QK/rkJiE1Zt+OXlBKWyA6FuNDKq9KH9sx4+/LlUz
2CGtKPGj2I/2t/Sj+1xltSQVT2yL7nK//hxGboVJq607YLX3wEVZcy9tMot4tcoyrN3hmN0+
yPcQhVOy+wx2yMhvEN+xfrX4WqdkY99yKASyFBarT2u3D6xF+b6ArZJark/UpHY4RXU7nb12
8Ke1S/yqEMHN6BtPL/0qufyYw6Hb3YQbNReD6v6hHvPvAVONCO/AYMPPr1j5y/JfV0jKrj1k
LrtbfYuU0vofl32nZSZ/u9dV3UxJTmXdLTaaXIuJYTtYOGkuWbpESXvXfh1pyNLvrDyPpbx3
NHTT/v7nH2JbsRENdqls+yM2e6T2ipl5ahyCyscycaQ689g+wj7THRu3/kqrhcWwidezoUu/
W3rOQ/veW3fYDSPIj99tV5PUOiW/ftOK1dvW+BRY0lphEZ0oXSulH5b+oKknI7t/K2QpxJ56
yjH2pJjk2tIBj+e/XS3ru/7ojVNZv09xn3Nxn/OTN97P3nqV9hHKBnDFHM/yfs+iXocng77F
fU7FfW6lAx4lvc5lfc6V7wMrXnuX9HmVDLgW9bk8+eBd/upaPtu57JVn6Wvv+hlPUUVLI5P9
b7k0zmgYa4TCmY/kk9ijFPYolTVCYY/SOKMRrBGqKMGMM0bhfAEY5kgY+9PnczCT/Oy/tEX2
5kPaFon1uUVX3r7LyXhwNYxixeTEDX/Kp0ZevPfA7cNIlo3tgebWhBfVlIQ7zjGxmJS7nnOg
sKYu4rqfxbOqEF+/i7duExqbIyiRiMQkp/HJXIHwuaGepofLeQB6AKgA4IkomgLAcwAqF5KS
2w5oKLg6WwFQJRAUCkD5nKAYAEbsrRsamjIAPAWgCoBKAOq4cyUbN/8UedMegFYhKAHgKQCt
pqb7raw1AGgTgkeikTpHlUPDcQDUC0ARAA1HtP93Dlr+ca1XToHOL/Tz6/vnNfpvmWGmJFrB
Fxf0vzfh7+xLonzR8wXPRI9SoZ9/OkXU85l8n8d8Ofn8K2bKKQvAW2TMN8D8O9nX8mCCGKig
GmRoMxwdY6BuskPTRAmTZBL44sJhS1VT32PkFrjjXYvLuecDmlF+tfbkRlu/OodL1wyU9HcY
2O53yTQJasUG16Nds867Zl8IrbMPaIb51cCIGZaeuZfOXD3gUXg+qAUTVI0MYcAD6hHWvnrq
J3YdurjXpwDukWe1z2wn5rZZQCuMEHfmyrOLwbWYkAa0b72tS9IF17LzwU3wsGpHt3JLYoKl
fy0iqA7mX4NyTrN2K7YMrcHeqIcH1iL+kR7z77fIqhGkLnuMn8mW3Ruv5ZjqIuWVz+yGh+rc
bEOf9T6kD1eIbnK4/sjmcqZ5dBuO2oimtNvGdxCcbkMPQHceOKPoHGcY2YUjd6Cvl130TrOg
NmIiGzDR7XY+BRd982xsKUeJaYa3ugkRTTBqvYNzkvGNEmtaKz6yHhHVibycDfV5cPZmKyyi
G3klx1Lfbs/+U8qWHjpBlTaRLAKp1j6iFRbTCENGGWkY7TW0UvW8ey7trZsdSW+9+MpCJqb8
lWtRv2dxj1P5K8/iXkL5q8vFPW4lvU6lfdeKevzKXrmU9jqV9l4u6fMu7vF69NqzpOdKaZ9H
Wb9PUY9z+Su30n738n5iWb9nUa9TWf/lstf40j6PfKZ3zSffU9aqEAjktKna+8lbHe+D2KMU
1iiJOUxiDpM4Y+SeTxHMYUrPOK1vkto3EcEeJXcNhXYPkdijZNZIeNdQOGuUwhoN7ZmImD8H
c1zhL8ZgMgffJ21cv7riGSk328fV+VTqPa/YeExIODIgGIZ1MLwZ5xAUat3aGZdX6AtHnHR1
M7v7wIszkEh0Mn5YdC0h2YVEw2fleqHt9ZLTrvpcM7v/wBeASgNDDRzuHJ9fNT6RNTtXyuWV
zHCLZnjFM9wiLq94cuohn19+6NBeLy/00FDl68GSwd/y3r4pGx56kZp285flK/fslJDdLSEn
u0Vu59bdu9f9tGz1FslNe3ZL7JbdvGuHpIGhloyM3E8/r9mxQ9LIUNvkjK6mutw+tUMrV644
eEhxr/yWXbKSv674eR4wq/Z+ZQ/mj6u/cjJUJRWqlGahmgRVTTJV/MJvEDUUk02Vk6HKaeYq
d4yVUoxVk+c7/4iT/+G3vli4zZSSTZWTTZXSzBSSTVVTzZWTzZRTTPYnmyqlmiummCmnQlWT
oErJpiLyLXowKqnQz5ZippZiqpxipngXqphqppoKVUkx+ebB/BvaVwjyM5CBdcjAWrQfw/56
w4WQdgKl24nWiwnuwAY1ICO6CKFdiOBqdHibfUAzPIiBDKxDh1QhrzXbULocqBxiGAcX2obz
f4kKqIMHtyJCW9H+DPiNhktB9Q4h7djgFjSt1SWgEelXAwuuwQYyUH51iLBubGSvI4XtGNSE
C27CkXswQS0Y31oktQ3nX48KZGADaxF+Dba0Vrx/G/wG41JwDda/CUZrw/vXwQJqEQH1aHIb
NqDlUki9g58oC+7PxWD8axCkLgdM0LnNO8UiupB3ep1S+gi3e7CUJvsYDjGpz4HSBI/twMR2
2ZMbsZFNKEq9HbkZcZONThhwSnrlHsOEkxsdIutQsR2I20wUtRlDbbAnN8FjOnHR3ehbXS5R
7WhqA5JWj45qxCZw8JR2bEQTOroBTapHR3fhbrFQlHospQkW3emY+IoQ94oQ14OPbcfQGMio
ZgS53i6qCRPdh7054JD8Bh/RiYpl2cPJp8QlNpYyXcr6PYoGnB8NXC7tvVzWe7W0z1OEjdIB
j6J+Qvkrz9I+z7KBy6Wv8I9eexX3OZW9cikdcC/p9yjt9yztcyvtdyrrvVLW61Pe71Ha41Xe
51nW71HEdqkZ9ze0VoZAIKfN5YYEt9/yYno/UVjDlN8Esa9nyOxhSvu7sP4JSsdb6t18QlG1
06vJ2EHu7bezkczh0L5PtHezsQOTtO4hcseHsP5xKtJB97iu8l/0YDLfvL8jvmlD+dOwvJwr
SYnOvf30mDh7GOrIrXgPCo2Q/dAn7b5nKzM2u9Dp6QsqOQIRFo6ueO7r4X0OgJdvBvMTUok1
DeEenufHp18WP/IL8LMBwhe6Jw/gHI0BaODOFs7Olc3Olc4KSmf5ZXOCsllB2QyvGIDKo8dV
16wRk5IUX79mu8RGqU2rt8pISVtaWktLbwr0hwWG2gQFI4KCEOHhduKbNmpp7SGRkf7+FygU
grrGTkMjvdjbN8JCnZ2I1j8uXRoQhHz06H5gCEFRXtWJiCST3aWkN3x9D+aPGFBMMVVKMVNN
hiqmnFNMMlFMg+69DxXBQ8QP5VSoYoqZRpqpXJrJ3hRT9VRjubvnlNLMfweYxfGLnX/Ezxc9
UKUUU5VUM+V75goppsrJpsrJZnvvm6gmGyummaukmMgnn1NONlVOMVNOM/88Q7KpSorIXzFV
STZTTjFVSDNRTYYqppgpJ5mqpEHlU43/Eee+Aeb/acDMPxJVaqlB+lfZ+dfA/aoQAdXwAAbC
rxoWUIP0Z8D9axCBNcjAOlQgAxFQiwhioPyr4X5VsIBqhF8VLKAWEViLCqhBBjJEQpnowFpk
IAMZyEAGMOCBDITotEpgLSKgBh5QjfCrhvtXwwMY8IAauH8VIrAGEchA+FXDAhmIRWXlAAYi
iIEKqkOLpNICGIh5UctaZAADGcRAz+s916GC/rQHQ+60h4eYiG9bS65HUJuR5NpL5Ho4tRFF
q0OQ61ERTWhqg6hWGIq2UNuYWo+i1iMp9QhaPTqiEUlrQlEb0NR69LxGciOa1oCkNaCoDQha
g6gKMorWhKLWIyMaULT5KgAoWgOK2oBeHE+pR1JF1oCifa6ajKKJfqsWSapDJLBxCOrJjZJi
8xUt+zxK+9xKBtxLB9xEKpZlAx5l/e5lA57zUsr97mX9notay2UL2pfzEv0DbqUD7qXz4phu
pf0ehT1O1eOXT1ntg0AgJ06pMbqCU+io7vekgYmotIc25QzPgbFYnKtefa9badXViIRLL9qu
dr0Lzy4j5DzGvZ2Kq+dcv5l2gfMx8uELB3c/Y84IGeX41wHDz3z9Lmnzpg3lz8MLi67eSXRs
64xLve+WnnX58lVzX78LTe03g0PtAoLtWjuTbsah/QNhdjC9pvb4677wyz5mgUHIW/GEqJtw
JFLPydkMhT387BlVCCpP6B/C484AUDfDy5/jl/AFpbNzxXx+yRy/ZJZfzOMVAVB14OBuY1Pt
6uroosKgkvLgwuLgZy9ibgS6H9TaAUDFgrb/CwAaFOS3enpcAIAFwAsAuq9csTM8rQFAPQDd
dXWRWyQ2TPNyAaiZmC6RkFjLqI8GoPWwtuI8YNYoiH/dLbJF10Qx2VQEGIVUY4XUc/vSTPYm
me1MNlNMNlZKhS7yQDkFujvpzO5EY/k0c5Uk432pUNWEvwnPKCabzt+KmLS4hfWH5V4lzVzk
iyilQBVToMrJpmqiH3pgIZtoLJ9oqpBmqnHHRDHNWP6u8eJUyqIxX6z7SsmmymnmiilQtWTj
PfegimmmKneMFe9aKC0M+waYfx/7KvVgRAcV57WTF0bOqyYviufXfdaUXKDFvLDxvNL+/ADk
7yacb3we8yUA5k96Bi70i5SbgxaqLAcuwObL28DfffNCz5/JIiN1OSCCjTdvFyM3IiJb0bQG
O2oTgto4X9uY1oSar1wpooKo4PHnTlHlGHREk6jOsUh6WaS4vICWRhStUTQGPV9gZl6hWfR0
YZIvKpiJJpyvTtaEojahIhrRpAZEPNsBQdHbJLGukEkoe+VV3O8+X9HyC4n+0nllZRFORETx
WJDunxfzn5deFiFH1DPgXtbvXtjjUj3ubWihBIFAvv/+Z7y7gdsVw+gkbHQSzPXKOTvs8YR0
NBKnV1ZzObOE+KAIl5iOcbl21DvgtL3zmdIqH6KX3tVgExTx6O37OKTTCfbHWDTuzNHjqn/V
gxn8kLZFYmN6nucM79HHEfoEL+fjePrETH5FpX9NA43LL+AM3K5mRI7zct+PPMgruM4eiJsF
D38bKS4o8R38jf7x04OXNTQs9vTdB96dnISpmSKBsFDP8DDO4QwAtTO8/Nm5kjl+yexc8Ry/
ZG6uZHaumMsrBqB6v7r0tWs2ALQC8GyhInJHYkKUivLukZGH01NlE5+KpqYfTs3ky+2RwmLO
8ni1wyPZPN5TV1dzA8P9PF4Jj1daUhoovnHTq4GUubmiV28yxTesKy0L5vGeaGp+EeRX+Xoe
jGixXjSlZJGPYqqWbLklQc/7ZUR0c7ps4pnPHEo23RVvZEB3qh6oPJWBl0s8tzftrGrqPFSU
kuf9EuVFS4UqJ5sq/WNvRjHFTCnZVDHFTD4ZqnLHVC0ZqnrPcluCIb40yKMmcvstI83U8/J3
TPcnmyqnQhWTTBc+4/M8KmnmismmCslm++9YKqeck08wV0gx259kopJsqbj4DV8LMHeMVXKs
t9sf2LprQ0aXQ24fMYuNz+YQPstwfbN/Ztk9BDqHkN1DoLMc8/ucMpj4rbs3QCAQ0/9fBcd+
N+xL2Cwma/1ukj8z85fv/lP7M9/5J+2PgCF3OSBCTMS3r6U0IiNb0NR6W2oT4q9UtPxfN1HV
AHIDMoGDQ1D1NkmuK2QSyl97z9eD+ZerjS0K+xew3Rifggwt90EgkCVLfoy769DICfajmFrZ
aYbHWrpcPRadbBOdYs1gXU5IR1fUXQ6/ae1x/Vx1Z+C9AtR10klTK+3ELDuM8/HETFxCjuWb
mQik4/HjJ/6yB/PmfZqkxLqshz4APJrkZo3NpE/z80emMgSgYg48GpvOnJrNEoL8TzP0aX7+
HMjnCQvGpnMmZ9MFIHuaf29qtoQnrCitCByfyueDwtGJdD4o0zc87Ig7IxTWcxc8GNGVzy/l
C0q53CKhsFpdbYeH+wU+v2Vm+gWX+5THLePzK2/FhGpoyC8cvXwKwBMA6uSVpB0JhgC8/DSV
DUClo6PR0WNKAFQC8OLRI5Kk+ObXgxkAPB78QF/xy7LSsjAA6g9oKi7GYMRVH5h9FcDML/TJ
Zl96J0opZooppgdT7TbcOXm/Pb/ldadMgpFKmrlKqrlqmrlKKlQ28fSpXNfOoVbjXDfZxLPq
6RaqySZKKVDVVPPFhVglzVwlzVw5zVxxYVrFBUTNP5rPHFtYvlOhymmW6ilQ5RRT5TQL2Rij
kv6nbo8p2+IN1e5aqaVZ708xU05bcHrSoIoppsqLPyfaN0u12JNmrpRmnN5V6vwiXOaOvkLa
eeUUU8WUv/xv+Z89GGW6tYz9ga0712d04XJ7nbLZeDp7QYbym/0Jo/fgRde/48Ew/8oWWS3y
7zb+7ur/u4X77/b/GwPGWEJGjNKEimrF0BrsqE3w/z7AuJX1exRwXGomfAys5EQrYXSK9dO6
6+E3ra4EGftTLK8Gm5a8vHEl4EJwlNUjhvfjustBNGuXK0aPG67EpiESs+xQ+JPRSTB/smnB
CxdHrzOcoZtIB71jf/WgJT9z8P09qS3r7mX7CAR5YxP3RqcyPk1lTkxnjHy6PzZ5f3zmwdhE
7sjE3YmpotHxvJHxe2MT9E+T2eNTeaPjmeNTmZ+mckcn7s2BgtHp9N8+pUxMZcwJnugZHnaw
N+Lzayancme4hVxe0cxMAZdXyOUWznALp6by+fw6VZXt3t7WADBmeQVC4TP+bKVQWHk77saO
XZtLH4VWPKY9ekytqIh6+vTW5s1iLu5WAmHb6Kenc3NtYeEeWAfr2VmGUNBS8Thq3cZlA2/o
c3MvX7+nH9NVe1mVODfXdmDxHMzKPZvVvmYMBqq4kGqlkgrdc+fczjhDmTsGCgnmK25q3mzJ
qhxsl0nQU0g2kUs4szPOSDbhtEKSiWLS2a2xBnJJJrvvGe++aaCQYq6UYqaSClVINtkdf0bh
joliqsmORKPt8ad2JhjJJBjuunNGNdVcKcVsT+K5PXfOydwy3JtkopIK3ZN4Vibu1J7Es7sT
zuyIN1JONla6ZyZ7x8TgAbp88MWB+0jpZF25RKOt8UZSd/T23jm34/apvXfOqaRCVZPNFFNM
t8cb7ow3kk08sy1OXy7ZWOWuuWSs7pux3wLrk9bHaO1Ps1ZKMf2qMRgzpTvGKjkXZOw1RVtk
Ob3ELBYhm00USRF/sz9j2RyC6JrNcnzYS8xg4qVlN0AgEFPfI386yI8QXRftzy/xomG/ezeA
8feThv/P2z/2YNZRG5GRbdiIRth/owcz4F424F7Y48KY8DWwUoBAIKrqO5o5ga0DYdVd19oG
KEGR0JtpNqyP4ZmluNg0ZPdv4W1vwl50XHnS5NH+1r+6w7/zXXDJS9+roacfPnHq/o0Uffd8
Y1+wg9Ppo8cU/nKa8rt7WyTF8kvDAHgJwEMAngLwGIByAB4BUAxAKQCPAKgAoAiAMgAqACgG
oBCAxwsDSgAoB6AYgJ1YwBEAACAASURBVKcAlANQBECtvqGWq6sZAN0APBa5GgvXFwv5yp0a
B3YSXaCzs1VTE8WzvOLp6ZLZ2aeFRXe2bNm5evWqlavWr165Ye3KjatW/rJju6y6+v5DWgcO
aBw8oKl27qzFyZOnNTSUDh3SPHhgn+QWaSWVXYc0lY8eVbOyvKiurqZ1aP/KlWvnAbNCbtNX
i8GIjrOkGO9NMVdLO6+UarA31SKQkdAy0vdxbNCXcTu1raz6XZNk/AnTfKf45nvmedebP/ZS
GpJUUk0yOc910i94Pou43VmokGKieBe6J/nUsXvI9O7ySyVXpG9pE56Et77n9E8Nlgw8Mcl1
2ZVotDvV8k5DBqLEN6qFzvzQq5lqoX73/L2upz1j/QPDfclt+cp3LeXume6OPeP+NCidVbYx
Rpf42J/WmHGh0L9+iNk/+e5hV7nOXYTSHROlFKhS8qmQuvjeof7BkdfJXfmHMq33JJ990Foy
OzXB/jQUVp8qm6Cvkmou2vT7100xxVQ5FaqceFo5x2o79oD0rg0POrC5/cQstiO9B//N/ppx
HLN78PNbZN1fbJH9dQ/mr/oQ/8q7/xcBIyEjRmlCRrWiaA0wahPyvw4w/e5lAx4FHNeaieun
zitBIBBjc41hQRxnhDwwTeuboH0Q3HrHj+0dp7zhRr3hRveMUXvHqf2TlNcz0b3j1L4JCmeM
8nY25oPw5iAvlj0W9mYumjNCRjue/EsHLT9O3/8kyOp/lyQhuV5XT9MBb2SLMLTDGMJRhjC0
AQw1b3C0ARxtCEPpwVD6cLQhDKUPRxvA0QZ2qJMwlD4MZQBD6cPR+nZIPQTawAau6+phoad/
9NSpw7l5YZnZPpl0n/Ssy5nZVzKyrmRmX8nIvpKe6VNURJKRkQgLIwLwCoBaAJoBqAWAU1wc
efb0UXZXdl9/NpuV3T+Q0dt/10D/sNHpQzdv4Ujh2NhYV3NLnc2b10RFe0dE4Kg0L6wjlkS+
EhsVTiJd+XXlMhzO7PatK9tk1n3pwXydLTLlFFPFFDPV5HPKyWYqqVZSiQZ36jPB7ExC+0P/
qriq99WC6cni1zVSUdrIshsT3DHWWHcJsxJR5qebaw94PEM6HP84DADBmUwH1WST7XF612pu
zYIZtXsXfCpiZoRz9I5HPpW3at90Dk+OGxY6bks83f2xc3DidcNga2RLyp5Uq+IBBme0N6jm
tm/NvdGZj4XdVbsTzuyM17/PLHOvilhNPURtTuLOTTe/qw14Fuf/IvYTdyj79dNdd05tSzK5
0543x50jtWdffRHzevQ3ztDrA2kXnV5Sh7lDz981ox9f25t8RjkFqpRi+rU8GKVUM+VEU5Wc
S9vttbbt2pTJxOf0EHNZ+Fw2IY/zzf6s5XIIeWxCDoeQzcLn97pkMAnbdm+EQCCmN478ScD8
B9s/AIyphMw6ahMiqg0Z0Qinzofu/5sA0+dWNuBRyHZhTF41slaEQCCG55TfzkQxP5KZw+Gs
EdExFzJrhMQcJn1xS2YOf/konDlMYg6TmSOh7DEae5iCwukfP670l7bIhmbuT87kQC0N9mvK
nj9/0NLypKnFEaiFFtTikLml1t/a4T/2mFlqQS20zCy1zC21oBZaFlZaUPNDKJS+nt7xNStW
7Ni2XlpSbKuk5FbpzVJSG6WlN0lLb5SS2rhVetPW7St//HmpKfTUFW+CC9Hezc3R3Rnr4YZD
IJGGRodHxtMBKOMLSvggD4BHO3dsdXU5D0CbEBQB0EGjwrU0lABoBqC6piZu08YV41NlALRP
TJVLiq+rr4sGgHVUW+EzYL5amnKqqVIyVCHVROWeuXyC8dEM5BBviFKXvSn65KY4A81Um1dT
Hype14vfOmxTeIUnEPhVx266dULy9pmTGY4fpz+dKrCXTzAfHP9AqkvddktvR9K5F6+aypjP
tsefeT01EFqXuDxcddNNzbXRutW/tZawnkrGnmT81tL1sU8lwXpV7JHjWbjpqQmPJ+QlVNnV
EVrwR8EJbfQ9CWfVs61fDHaeSUetTdD1q749y5uyeOi+9rbeypiDEbUZbz69lY3TNaW7Cvn8
80WukCj5tTQt5cTT76aGwuqSl9EOs4Z7QxjxYjcP7bt7/mumKSebKaeYqSSaqeRc3GZ/cOuu
DZlMXE4vIZuNp3Pw/9cDG/8PGb0Hn8PB03sI2SxcXh8xg4mXnvdg/ixg/is9mHXUJmRUGyqi
8b/XgynkuDImrok8mFPGqu+5MayPJPYoiTUyDxWR0uViWyQV82WdGOYwiS2Sivk0LxXzl2Iw
w9z09xNpADzx9cflFAQC8BKAfACKAHgCQAUAj/+EVQDwWDi/hyayMgBqDYy00SijqamXwyOZ
I+PZQ+NZwxP0ofHsoYnsoYns30YzJ6eeHNLZu3b9yuPH9h3Ukj2kvVfr8B4dbcUtW8U1D8qN
Tj7gcvO408XTMwUz/JLdeyTwjpYANE9OVQDQEh6GUlbYMTHxdGrqUUlR5KaNqzh9D8bHy7qZ
SZs3bC4vpUxM1BzRWjjJv2qv+FeNwZgppkD3p1htTzDElVz/yPt4NM9e8Y6Berr5ltsGBR1P
Xr5uWhd35GKx95vJkZPZmD2JJ1TvnD2d5fiOO2Ze6r6eqvOQ9bTlU8+WeKOTuQQed9Ky+Oqp
fBx3aiys7j6CQbpRFY2pCHo8yGB+7FdIhNZ/aCe15EjGH9VOhcqlmT/vfTnEGyO13nN4FKya
YLXl1qGt8YaE0sB81qO9cYZSSYZhNYlDkyPbE0017pttS9C5UnmTNTIoE3fiOuPW5CzP6xnN
6zn5SlWMw+OQwanhkv5K6Zv6fUNvqPUpUol6amkXlVJMlb5ekF8p1Uz5zjmVXEsZnMZWWbH7
bahsNuFBl2MGE//N/pp149OZ+IxObA4Lf7/DXlpuHQQCMfXTpjHx3zyYvwcY0y8A8/+x955R
UV1h+/ck0tQkdkAEASnSm4kFFGPvIjJgN0ovMzQFLGBHjdLBTp0Bps9Qhm5HpDeVMkXFCtKn
nzNtvx8GiClPovmbrDzPC+ta99qzzz7ty/lx7X3Off//0sGMAYZ/cvMeawQCsXm7XQ98ldmv
yGI5gpaP8/P/JoH/LzmVh+IVJZMVX/KvWv15X/J/4OfI5SWRpzyx+CNyednQEIkjoHL5VK6A
yhXQ/lKKwcMC6pCAyhFQOTzqEJckkZVt3LwEHbQZgBoBRJGAYqmsWCopkkoVKobhPAAeL1ls
HhW1H4BGAO4AUKMgExZ3dNPGpSLBQzm4DUuKJKBIDipXrf7BzNxw06Zla1atWLdu6VKHheqa
6lZWxjZWhuZmJiqqk0zN9A7u271128qZGpq6uroODtaTJk/+B1LFZLlaYZG2Wa7fY3bopa89
9Cihh9u3HnfAMs1pAW7XvNTVOS20qrdNGjdWHCiJGuL2rstD62ZtNc1wWk/1H+b1uxVG6F5f
iao4w4OFS3MPnHt07TW3Z27a+p/KT8BCcfXrpw/eVT18Xffodd3dt9WxrRlmqU7NH57cbCJp
pa5ZnLPHPGO9Rc7OhFrii8EXvby+N/zXZ5szNW+uJLeVnqpKmXtrrXH65kt1qT2cbrOsnYuy
d+nd2HipKvnZ0ButG6svN2IEEn4lq6n6TcvdV3cr3z69++rRkepYvbStrH725Uas1q31dtgd
X/RDS1drjMuCTOT3+fs13a0NLDSL3offGYqs6Au93X/4zsC4PlW3Bw7fGThU0R9++8OJB4Mn
S7uPGllojizyj0+RjQPm0wEDXWX0KdLDxI8Zl98XHPuo7FisIjMmY+gym5vI7I/93GSXAxDh
Az8HgNvHT3plE47J5XeH+NQhEYUHE7kwkQeT/lJcMYkLEbliEldM4olJPJjEFeJk8opNG1cG
opxlslqeiCaE6UJRoRCiCyG6ECoUQnS+IF8mq16wYF5YmItM9kAoyIOgO0IRTSq9XV6RaWm6
xNJ0vpmZqaWZtamhlZWVqY31907OjufO+5486XsuGuXnu2Op4w+3bp1MSzu9aaPDFqe1qakn
ok+jDIy0cilxhw+hdritXvCD2cevKX9JwNhluS7I3ml4a7Vr4dFhkWgb/bBB+qblGDeNjA15
Lyofv2qdnbLSq+T0O6h3A9nfJtXNOnP7app7r5DjRj9snLHZNHtnP/9DdH1G1dvarKd50686
7Cw63i14u4UWqn1tjTXWdU6Gkz3OfSPeyzhja9OHjqwmss61Dda5OxZhXDbm+RunOZmkr7Mn
78U8LRRCkDM1gN5VvYbqb5a1XSdj3cW6tB7uB4ssF8vsHZo3N5+rTnje935Oxpbwh/F9ovfm
GTt107fZZLvOublxHdFnde5Bo4yNTzhdcQ0Ys+ur7LA7rLHIL7fIj7TGIK0zXUzxLs5XArZt
2uZ3ekPw2d2BUXuDTu4JOrl3XJ+qE3uCTuwNOrkHHekafG5nwFmnmRojb5EljANmHDCf42AY
fbGsodiPKyX/vpblR0Ut45iD8ayheAVgRh3M5wGmV5ADQMXxk945pCMAlA3ycRwJlQvlceA8
Lpz/l+JAeVwoTxFHGgKKHNxdv3FpUKCzVHKPwyNz+YV8YQFflD8WOTyqRFK6YKHekYif5PJ6
Lo8ikZbwuDS5vPpm2lkNjalnzu4+G+19+oxndLRP9HmvKd9NiYryAIAFQDUAb5ISg20tDQFo
BIDh7719/55NALRTycfm6an39BXeL6ecObVvx841vziYLz1FhrTI2mGZu21h1s4XQ93FrAfz
UjfPvb5qT9ExqURa+Pqh/vWV7vSTvULOFqqXaarLvKwtG8kHBVyZW1Hg/FQnowznzFbcgIj/
ntONzA/Wz1pvjnFj972801U5L3ODRprjykzPAdHgTQZ59vW1zQNd6fW5ejfXmWds30Q/JpXy
Qu4lqN9Yp5ls71l24Y3w/Ym6dBrjrilm85LMPdqpK2Mast+IBi0yNi/O2qGduvFsdXJX3zvD
NOd1ZHcuLEh8lK1940fNW/b76Ud7YQ7q4SXjKyte9H84U5cx8+Yyu+x91tgvOkWGQVpmbjcl
bnE87aYzY46m4WSdeZo6BjN1DGbONZw1rs+Q0Uwdg1m6RrO0jDTnGExTm/wdAoFwPjnuYMYB
83emyMaS8/++cPLvJs0U6fovsbgJfyNd/wBE+MDPBuB21GkvLDECgDIOj8KFaTwRhQtReZ8g
rojCg6lcEYUjonAgCkdE4QiJclCxftOSoMAdALQCUAFAFQAPALgPwIPRxl0AniyxNwk55CyX
3xOI7sHiclhYKpdVXbt+wWGJBQC1ANQDUA9ADQBNdrbz/P2dxZJHgxyKWFwVfcHjh+9NAGgA
oD0A5ebusRaAtlziEX199b7+B6V0wqkz+5Fuq/+JXGQu1hhXS8w2m1ykdRbSKG3T0fKEYYjb
NvjmLrv27eDLZ/1dD97VaNxcdbDk9Dtx/6b8AIMst/kZ27dS/fskgi2lgdaZTubp63cWhYvl
4pKX1XqpLotythtlbDmQHz0oGnwx8LKos7JHPNw8wFpGODj/1saOnrYrHbmaN9cuyXQyzkFS
OkoBgEteNNx+2SiScJNbSdjWvBuP0zQyf1yQfUAzbV1iA7ZP0GONdbXB7Jp7bcO5uuQnHOb3
GKRJ2sajD9MEYn79hzb6yyq+hEtpv293E2mS7lLf3dLL6458lGB8y9k229Xqy30HY41F2qTt
sqXtmYdaOtdkCvn5odIPxwvfBNPfhtDfhY7rkxVCfxtCfxeS986/4P2hspdHDa3VEQiE65mV
CeNrMOOA+UwHo0jC/2un8sdTZKMjv4CDiTzlnU06AkDZMJ/MEVN5EJUL03ifIEUVMi5E5UJU
LkzlQFSOkARA2dZta5Y5Wiel+Edf2HspxiP68oHzsV7nYzzOx3iej/U897NHSsqhOdpTj584
AECTSFIMyW/D0rsANN/KuGxrYzgwkC8UFnF5eTw+VSgqX7jQdMqUacbGuobzdA3mzdmwYfXC
xUu2bVu3Y8+67xdaa86Zafe9uU+Ak+H8ufPnm1pYGGlqTZ2lPm0MMFpfKlWMDQZphUH+gEEu
TkfaYHZa5Gw2zVi3k3Y082k+pp28vyRqCcbbpSDYCLNhcfa+AwUnF2BcrTGulliXRdkuB2hR
C/A77dK2WWZtt87etScv3JHiY5227Ycs5+8xbiapGzbhvK60EohtJRcqr/6QvdsidYsNdrsb
LXwl3sM603kR1s08c7t55t6IB4mkTnrOU+qhOzFmWS6R9+LW5nkbZ2xckvWTac7WH3Fe+/OP
WWdts8l2tchCrs/1dC08apO+1Qq7zSjTeW9BaPoTGrG9JLzi0vzMrSZ4Z5MMl22FIVnP8k88
TtbP3GKLGf1+5QsAxsUa42qb6WpFdp0ftHKeqXpumyeO5ZHL8Mcx/fGsgHF9onBMf4VyO/1x
LDT+ia+uuQYCgUCeXjE+RTYOmD8HTA3vxObRt8i6oauMkUX+P7Avf6SRkSMFxwYUDsaSJ1EA
hjQAZQ/AhH6IMAAT+mHiwIgIAzChH8IPQIQBCN8ryAagIur0CGA4fDIHpvIgKhei/gFOYCoP
onFhKhceIRBHNAYYChemckSUYQFRDm7v2+c89buJSxYZ2FjpW1oYWVrqWlvqW1vqWVvqWVnq
21jpWdvM/va7ybq6c1Yst3awN13iYOtgb7ZmtZ2uvvqq1QsAeAhAPQBVAFQB0LhoiQkSuRGf
m3wl8Tw+96qHh+ss9Um+3htRaOf5RvNsrEwuXw44esTbafOWS5eDVzous7KcZ25m9k84GKQ1
BmmFdbPAuJjluFljnS1z1xhmbdW7sVnn1hrjrM1mGdsNM7YtykKaYLfNS3eywm5fkOFkl+1q
mbPFMHWjZQ7SLsvFLme3eQZSD7vOFLvZButsg3E1y3azwbnqYdZr31w1O2Pd3FsbLLO222W7
2GCQulnOFpnOdlgXS4yLXZaTHcZJN3Xz3JubjK6v07+1zgqzZT7WxSzD6QfsDhuMqy3W2SB7
m37WVpsMJ7Oc7bZYN/M0Z+1MJ9tsF5us7TZYVwPMFq2ba+bdWK+TvsEoe5sNZttCjItZ2lbt
tK0GaVttvnQ2ZWss0jJjq02eq1nQmnlGswitwfnPQ4idAWQmalyfIQaKxEBRmGhyezDt5SFS
u4eu2SwEAuF6dtk4YMYB8yeAoX/kYDY52/bAVxh9I5+5/OE7Y79WPGsodmQNZvASi5PAGojz
Ro28RTYgyu0XkQag7AGI0C8iDIzghDAAEwYh4gBEHIAIgxBxQET4wM+Rg4rIU17ZxCMAlA/z
yFzxX0yRKdgz4logKg+mckQUrojChagcEYUjJMtA8fotNgH+2wGoF4jpIkmxRFooldGlMrpU
ViSVFcLiQgAa7R0sli43T4xH/XzB92KM78WLe+Ni/Pf+tG7mjOko1PagIGcUelNQ0NbDYciv
v0ZEHHMFoB2AEgDYKSno7+2MAKgBoBPl73pw/2oABsPCXZba2wDw2tdrR2DgVrcdv0yRfbFF
fkUuSJPsHXaYbbaZTtbYg1aYbXbZyIWYvQuyXe2yXX7IcrHF7LDG7LDDutrhXK0xSPNcpFWG
qyXGdXG2qxXGzSRn+/dpW+2yXW1zd9pgXSwxrhYY1wVYpFWGs03OzuWprlY5rj/gdthitttk
u1hl7ViQ5bIoG2mc7fRDxg6zbGer7C0Ls3Ysytxjmbt9IQZplbXbDuNig9lpm4m0wW6zwey0
xiLtMC4/YHZYZrsuwLjZYtxsc1wsMS7fZ7naZLvZYd1sc3YtwOxamLPLFuNmk7XLButklu22
MHvXAqyzVTbSJmu0Utn/s6yykDZYV9sMpA3FzSJ4ja7x9Ox2P8LLAAIDRWChieP6dDFRRBaa
yPDHs/zxz4NJHd66JnMRCITr6WUJjOBxwIwD5o8AM/KhZQ3vxKbdVoopsm5IsQYT+5kO5tcl
k1dZ8iQjqWL6YewfTZERBmFCvwg/CI85mNtRp72zSREAlHH4FI6Y9pdTZGP+hqNYg/n1FJkc
lK3duDAoyA2ASgFEhSV0SJIPSYogSSEkLoQkdAFUAEDF998bRkUdAKAagHsA3AOgBIDWHOKx
Werqu3e5bEciXZDOrkhXN7dtrq7I+LgztdXUqof4luYyNGqXja2BUFgCSx96eW7dumUhj1cT
GXVASemrzVuX/7jcQVNTfcbMqV8eMNajpSHtMEjbLBdrjJsN1k3x9bsV1sUyG2mDdbHKQVpj
kbYjRcBcrbMVBSjdbLOQ1hhFaS+kDRZpk+VqjUHaYt2ssa62GKRtFtIW62qHRVpjXWyytttg
kLYYpCLvpKJumB12pxXG1Tp7ZLwVdrsFBmmdvdM2C2mV7WaLdbXLclHUP7bBuirObp2FtMG4
2ikqK2chbRXTVoqLxGy3zUJaY91sMEhLrOvoLYzk7vxyDsbVJtPFhrzHLGi5nvGs3DYf4nM0
nhFAYKKIrHF9qgisACITRWAF4Bl+ZDYK1xGga6KJQCCQZ8bfIhsHzJ84mHA6+3At5+SW3QsQ
CMT6bQveC9Pbe39mDsYx+ke+2/9TxTIG4piDscyhSx29seyheEZPrFfAhlVrLYbhvH4hvleQ
2yfE9QlxPUJcrwj/YSTie0X4D8KcPoj4QYDrFeJ7+NlSWXHkCb9sQoRMVjLIJwwJiMNCyrCQ
zBFSfiNF55CQPCyiDAnJQ0LakDBvSJg3LKIOCUgcEXVIQBrikcWy/HUbv0ehtkulD4d4RKGo
hC8qEMAFAiifJ8gXQsUcXpFUdn/RDyaBIUiJpHJgCM8TUoa4RImkIikRvWShnUz+EIBGAOoA
qASgYc/erdpzZhsb6RnqGxkZ6VhZG2jraOjrzjU0nj1Tfcp33002Np6jraWFdFmXlHJ07lz1
/fudpk2Z+OWnyGxGS0OO1rFH/qo4McbVGjPawCJ/KUj8S7FkpIIB1hhXxV7WHxVath5JdOb6
S/1j7FgxypHckTaj40fSKo/VOR45yK8qIttgRy5jrLLy2HXajNZXHo2/1H7+InQZO511hrMt
Za9poKO+kTrumS+ZHUToRBEZaBJzXJ8qIhNFYqCJTBShw5/6HJ3bjtIzVbymvDyROb7IPw6Y
P1Dpy/DyVxGFrNA6/tHNu+0QCMRWtwVD4NYbKPYtfPUtnPIOvvLnegunKPQKSnoDJXVLY99D
V/yDnddtNAegVASoEKCKQYEY0GBA+VgQoIlBoRQUigBVAvIFUhoA9y5cRFHzjwPwUCzPA6BU
DugAFP1eckCXA7oM0OWgVAqKZKBYDgoAoMtAIQB0AIoVWwEo37JpUWiQCwD1MnkBAOUAlAJQ
DsBtAMoBoMvkdACqHH4wPXZsBwBVAJQA8AiACgAqM9PDl9jNh8UVAFSM5gWoMjHWOHBgZdfr
gmdtqc9fFNy4Eblk4SIC7gKBcN1p6+rNm3+sqiKGBO9euMg8NiF8rq62vYPNtKkz/hEHM/ZQ
ViS+tMZ+TBSkDRY58kwfGTOGE9fR8aMFV0a9wtjRRoHxS22Ykesc6fwFSyOn+wUPvzrdyK2N
HMRVcUkfo3GEW2PtEQKNnuULMeaXdP0fORjS80ACA0VQzPmM69NEYKGITDSBFYDv9KM8R+M6
AnRH0vWPO5hxwPyZgyliH67lRilSxaxcZ3Ov/nzRo7DimrDi6rCSmvA/V3F1WElNWHF1WPHj
qJLqE0WPD5VWRbruXrnY3qi2MfFxQ3xVffyjuvjH9XGPG2MfN8SMxIaY6qa46oaYyvqzjxuj
q+rPP6q7/KQzw9t32+VYz5a21KrahLqmKzWNKTWNKbVNv9VIf2NKbUNSXWNydX1CTUN8TUNC
fdOV2oak+qaUusbk2obk5tbrjkst9+xa3daBq61NbGy80tiU0th4paHhRkPjjabmq/X1CQxm
lqWZrrvHWsbzjIb6a7V1N+sbb7Z1YqKidlhbzKuuudn05GZDw42GxqvNrRlGxpr79q55zqY1
NKS8elMQEOhkaq7z5l3B67f3d+zasHHT0t7+24fCdiEQX5mazXN390IinWZrav8DDmZcnw8Y
W8pes6Dl+sbquDZf8vMgAgNFZKJJrHF9qogsFImJJrJQhE5/6nM0rgOlZ/rZFS3/r2ocMH8M
mJeKKbKwGs7ZzXssEQiE0gRlBAKBQHz1Ufwbf0oIxIRPG/n1r8+i+nfPqDjU7/+UP+r/n27n
D3f8w4tRRSCUf33wP/hTUlJWVZmkNEFt8jeqqqpqI73jgBkHzP9qjQNmHDCfPUXWFV7+KryQ
dbhm+NSWPdYIBEJVZaKqmrKqqpKKqpKq6gRVVaVP0AQVVSU1NZWJahNVVVRVVJVVVCaoqqmo
qCqrTVRSVVNRVlVWUVVSUVFWUVFWUVVWUVU0lCZ+o6qkrPr1BBVlFVW1SSoqKiqqqkpqakpq
asoTJyqrqCqrqimrKuJvpKqsqqaiqqr29dffKCmrqU1SVVVTVpuoqqKqpKKmpKKmNNJQVVJR
m6A6UUlFTVlVTUltkspXX6spK38z6ZuJKmoTVNSUVFRVlFWVlFUnKPZSU1NRm6SsoqKGQExW
U1OdOHGCqqrKRDU1NVVVVTUlVVXlbyYrKylPQHz19aTJamoqqqoqqqoTVSaqTVSbqDz5W1VV
NRVVFeVJk9RUVSeoqSqpqiqpqH6tpPTNOGDGAfN/QeOAGQfM350iO1TLO7Fplw0CgVi7dlFj
a1pdU1Jjy5WGlpTG1it/oZYrja0pjS1XGluuNTQn1TfHNbYkNTRfbWy+2tia3NCc2Nh8paH5
akNLcmNLUkNzUmNLUmNLUkNLYn1TcuOTVGp+tLrGt0TKmeZnqfWNV5paExubU5qarzY2pzQ2
pzQ2JY80mpNHY/JIf1NSXcMt2wXmIYe3trSlVzfG1LbE1TbF1bUk1jUn1DYn1LUk1DQm1DQn
1DQlVTcmPW6Ia227YbtgnpfPupZnNx43Xaxu+flx089VTZcf1cfVtcbXNF98XB/X2Ho18aqv
+qzJjx5daX16g77e9wAAIABJREFUq6n5VnPrzaaW662t6fWN1zo6cRER3kbGWq1PMM3N6U1N
6S2tmU0tN1qepDa3pje1ZLQ8SWt+cqup9WZjc2pzS3pjc9riRebjgBkHzP8FjQNmHDCfP0UW
Vv4qopgdWsM/s3GPDQKBQO5YCsA9SJ4nk9Ol8kIZoH+mimSg6Nc/f7OpSAaKpIAulhYCUNrG
uK6lOf1J2xUAKiSyQimgS+V/cFgJKJQBuhQUShU9crpUlicHlUuXLYmJ+wmAeyIJSQwKxCAP
AvlikA+BPBgUwCBPJM+DAE0EqEIpDYDbSx3MjkY6A1DEk5CEcqJQhhfI8UJAEMoJAjmBK84F
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
TDOLubGp+/rk19t7L7OG4hgDsayheOZgHHMwTtFgDcX/ucZGMgfjmIOxjP4Y5mAsY/Dya162
hcWiS4k/yeSF3Xxcvwg/ABEU8XOl2KuHmy2Xlx5wX41AILY7L5XLK1o7rk+fNjML6y+T3amq
TZoxfaqZuf6RE3vySqK4giIAbkOygh1uS6l5xwGo+DCMl4FSal6ksoqa9QKj/oFcriBfJKc1
PLs6QXkCtfCkVFZx+8HZyZPULG3mnjq3j1pwFpLcBqAUlla0tF/X0vzuaRsWgIcyUDKaO/Jj
VYy15aAMgLLRRqkcVDkstY++sF8iqeTxqXyogCei8YR5PGEeX5Q/xKVIJLdv3Ag1MNAeFtKE
ogKuMJ8HUXmiAoGIOsyjSST3tm5dhnRdJpE8EvDzhHAJBNMhuIgvKJRIKt1cl+/cuUYiecAX
FIggOgQXCUR0iaTiaTtOZ+6s+/dSJJJ7fEE+BBdDcKFQUCKR3F6xwubokb0SSTWfny+C6AJh
oRC67eBgNg6Y/x5g2EEjM2OMAHxnQFl/+A+bTKy/16V0Hclu96WwULSOkHnGWgdPLK2Undi4
19LUViP/LQrXHljSF+p75kfd+TNITHRJ/6ENHuZ6xprlb8MN7bQ277etlEdsPGg6SWmyI9Js
yXb9pZvNljjPXr/P7CxxZ+o9z6+UJpwlbc3rQeM6gvM/eGNqPVx8bfQsp6l+O2GWzuSIm1vu
wRE7g+13on8o7kPns9AFz4MOHHcwt5/97XcTp0xT23lsEeV9SGrdwW+mTj6W6Vz6AU1o91/q
ZKQ6WcVmyfxVO+evcbOeojOh8Pmh1Zvslq03L3h3KLstiPz6UFLZvumz1U5kbXwgOL10o+Gy
7SY10pNe5x2nq3+Hb/PHdfiXfTh6OGX1bP1p9PdHXYK/N7bTzGcdxXb6U7rQaY0+6vrfoS+u
KeoLxnX6k5koPNtvzMEoABOZvOWJ4MKD12NEiap6H/XoXWTV+6h/U4/eRT56H/noXWTlu8j7
r462wecPBq1c5mguAIT3vPQeYUaPIL1HmPEp6hak9wjTuwWp3XxMt+BWj/DWmyFsy9OHz9qr
6UWUU6dORBw5fO1GQl39w/bOhvrGB1euxsUnXKxvrMzJzYyLv1RSWtDW3lRYRDx15khkVDgt
j/DkaR37RevNW/FfffXVipVLG5uq4uIvRkb+f+y9d1gTWfv/P+tWd9eKvfe1d3dX17a6rmXt
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
MX7cGD+RwksY5yf+5SguO13BuC1cqDlIfsUUpYxzkOP8pAkeYoL/p0ma4CdNQohJCDHOT5zg
Iyf4yZP8VAoLsXLVgrDYKxOy5z0T8H5GOJEeRqSHEulhRPrUG2KfzcqEf9YP62OEK44k0EKI
9BBFRwGRHoqnBQ2xk1au3BYUcUUmyxvnptCgdCo/jQqlU6E0KpRGFSj66XRBBg1Kp0JpNCid
+n+Dn0aF0sY4SJmseGoOxnSHUFLE5KO5Igz7d1UwaKE8nzSJVFKeWVT+WA7esqAMjijrUwUj
/ngwhivKYQuyFcEwTH6WVF7cSYiZrar64rV9W+erYLhteKR9bpF7fePzhKR7ich7HT1J6Rn3
Y2Kdc4p8SirCfB5fQaTeS850jYu/A0CjvePhxQv1Q0NtACjmidB8cTYkyeGJMYoOG8oEoCIm
7u58AzW+8I1IlA8Ji0WSCoiXK5NVZ2YFas3RkEhrAWgGoH7aDXPQ7aaJsfFaLq+aRi+h0t9y
uXXp6Y++/WrmmTPrzp0yPnVy18njO5ydLqjP0TE2Xn321I5L5ka2NseVVGYZLFjo5mLpYHvl
7Okja9duMjLabWN94eypk2oaalMCo6qkqm0wx1B70QJdvYXa8wx05y/QNTDQNTDQXfjPQMdg
vq7BMk2DBXraBnoLF2rqLVyotUB7kdLsud8rqXw/Y+6338+coaQ8Y5bK90oq389SmaH051Ce
oaQyQ0lthpLqDCW1P8r3SrNnzFKboaLy3SyVb2epfKespDtvsaq6xrezZn03U8lw2Up1DZ1Z
Sqqz1eYoqSkpqykrq6n8UZTUlBUoqykrqykrzVZWUVf5Vmnmug2bbC2dddT1tLX0Neca6MzV
1dLU15o7X1tznrbm/F9HS3Oe1tx5OpoG6uoa+vpLFi1YqaqqMlNFWWm2kpKKqpKqipKq6m+h
oqSiOktNaaaq2hwNlfkGhqoac1TVVJXVlJTUVJT+1J3+lNkqSmrKSqqqqrM1VNVUVGarfP3N
dzAYzD3yKEEcHpB89kmiWWK584vCK4XdN6qG7zXTH2U13XD035/Xcb9h4mF2m2Mdxb962Cep
2qoA79YnDHZwP3jBaWNAkjm6ya2J7l1LfuSPMA1IPldL8ayleGe329WMeJT03yomuDVMelW8
93wQfTIg2aR+/HHFh3voDieCKMDB49AFh20hiItZjS6NdO+GcT/PlydD0i7Vj3v1iAKuOu3Z
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
O4yAlyPgCQD43k/5CxbotfckANAwDl6Pg4pxUD55BuV3UQ5AxTgoBaACgNdW1qsfPPQEoAWA
SgDwAFQCUD1ZUBkPQFt64vXl5rpSQACgCoDSUfBqdPw1AFUlT0L15s1hsvGTN1aPjeEB6EKh
ju39biUAzQBUjAECAO9y833naqtlZAZkZ4emZ1zJL47cvHntJZ9zAPBbW8t09XQ3blq2cdPS
tWtXzp0zb+WqRavXmhkbGR3+8cjZc0d1dfW/Jb7+BxKMfeZp9VlqiXkIojS+nx1e13U7JP54
Pze8lx7bTYkaYN9//ynI5+b+xoFrnzjxfawH/eyIAXaUPB2gj3m3m3KvlxnZywrqY93rZ0V1
DDytqn11+PBBVRU1CIK2W245fuKg+cpFXt5uQ8Su8IigVatWnjp7qKkF/76ptqu30dUNsXSZ
WXhE4Ifut2/evezubfXwwJivXLR3z766htKWttqWdsLb9xU/7D8wffp0CIKmqavv/c4GT3je
+7HxybO0detWW+/cUkEobu+s7/hQ7+2DMTUzln9S6tNVbfZa4/FlPUNFPexbPew7PeyQv/hJ
fvk5GLo4RzhW2Nb+SEdP+3mDDx9Efx2JGh6/Pzx+jzh+/09iYp+x6GHpfTqIGOJHrlqvD0HQ
9QfH2oV3/mIE49slu3MOtd3KepUQFBF5aRRhKpGfMMSLoQgziNxMiiiZLEgji2KHuRlkfjpJ
+HCIm0AVJ9KkCR2foz7R4ijixCFuIlmQQxImUMRJg6zYfkoMWZxA4ieT+OlEXipNmtb9JaZ3
KJYkSh3mpZIFaUPcOCHA5ZV4mprqyQmGJc3ijeexRwqYsjSqIIE7micAhQxJOkOSSpekMKVZ
LFkWVZhKF6fTxelMaSZdlC4Aj7nj2XRROm+smD2SSxenUUWprJFMijBNALIq6gP/Xi4ynqSY
Jy1kCQoBqIA57IUgaN/+DVWNiTUN9+vqI2sbouoa7v4K9XKjPqq+4V59w93a+qiGNw/LyoNn
zFR5EO329m1SbfWjurpHtQ336uqj6n5vh7r6qLr6u9U1EW8aE3Lybs3XmZ1bEPD2XUpV7cPa
htiahke1b2J/jYaJsa7hUd2b2Jr6mLqG2Lo3MessTD29TjW+y6yui21oTK1riK97k1D/JqHu
TUJ1bWxjU84lf9hC09k1b2Ia38TXVcXUVEfW1cS+bcyMDHfTmav1qjT2zZuEhvrEhoak2tr4
pveFR49abdli+v5dzpv6pLqaxKamzNu3HJeYGrS157a3F7W2ZX7oenz0J5sDP6x531R0Pyps
zuyZ+KqQD135+XlhBjpaD6NupaRE7LaxNDbR2bxt+QxtDUhhMshvuFbfrdYZRYBh8DC3CiSa
AMPg4RgCfIJmJskGg0dg5fUl5ZN4OHaiDhjit4SEwSMwePjkGgSGAJcDS5DPI7CEb7tNFhMj
wOVUId/8F+sJcCwBjsHDJxYT4PK3IX86Gg/H4uFoPAJNgGPKEdg6uH3maXXtaRmP0SKQLgQx
FW9vb7I062ZcJ8piB0WRHPCwgxju6LG3afAmHST3sYL7WFGf+OHkkaQ+VtRnYRgPpFNHkz/z
HnQxI4akkT1fn3X3dPf29Tx7jisqyu/qae7pe/vufV17Z8Obd6XV1TXvm2t7+9/39LZ19TS3
dda3ttd86G7s7HrbN9Dc09/Y0lbf/qG+s+tNx4fG5ubG1vbG9q7apqZ3hKqXBUVZ6RlJj5/k
tba9be94/76pprmlrrnlXWvbu5bWhqbmhpbWN739bVXVZRkZGakpqSUlBZ1d71vb2pt7i7oY
If3csB5WcM9fPAYjwTElOKogWwIet7RFa2io34g8kfvcJaPEOfOpc2aJc9bTP4vMp06ZT52z
njqnl8Czn7mk57uaLNKFIOja/SPtosCqr361JP8aol8t6dqk4f9vhvyhNUQ/wuCVDvEtB1cb
SytzHkgf4j0kCROYI1nM0eRhfiJFlDHMjxnmJdJkCRRhOpGbzBpLpkuyBtmxQvAY5mLjf/uY
DDyjSZKJgvhhbpJkvOBBIjY935M3iiMJ41mjycP8OME4DuO178LVA6OghCZNIvGSh7jxApCL
K/E0M9P/RE7iyDJJvBSqMJ0uyqKLMpjiLJoom8LPpImzGJIsuiibIc6jCTPoojR5aUuKIJUu
zqCJUmmiZLoolSHOoonSqKI0ujiDKc0m89MEYzhCffiEi2wkU16LjCKUJyz8RQmGLy7mSYvY
/AIAyu1gNhAEKaurzJ6hNlNDXVNTU0tjupamxu9CU2P6xKihMUNLU3P6dEhBSX26ivbMaTM0
1WfMmKapqaaloamp+bs7TNfU0Jg5Y7r2jGkaGtMUIBVNLbVZM9Q1NVW1tNS0NNW0tH4NTc1f
jJqaqlqaapozVJWU1NTUVLRnTZ+hNW2GloaWlrqW5jQtLXUtLXUtTfWZs9SVNFWUVabN0FCZ
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
mDQdnaWj0saIdBrkNLaEuro73rwVRVnyxsh0PZOupzJ0dKaOytTTmTo6U0dnQsZMHZ2iozJI
a0HLLb6j48zbvUIArlpAlRVcAqAGgPoJcAmAG7v3veft8zYAlydAhRVUWkClCZQB0JSd//3z
65bq4DzGXILRYpIpIk1i0lhEmooIYxFOFRitFbflKYsXz6uu5VutdSbTRQuo0cKVrm4O6dlH
rdYOmq61Wq/e7slZstjpaku8xdpktd7w3vWRnZ3dk6tdp5/YNtmD+bV54j9HMI/6sG7KMwqL
kySS7rYbV2/cvHqzo/Vmx/X2jqudXa032q93drVOHXd0Xr/Z0dLR2X6zs6W98/KNjsudnW03
bjbf7Gy5ebOto7PtZmdL561r9fX1ly7V3uy43H37ekdny82Olo7Oqx2d1xoba5oaGodGmre+
/uykgpnnvGHji88/+8KL6za+8PyrLz7/wovrXnzxud8U1r30wvMvbFj3yoZ1W9avf2HLps3r
V665kL8PBWmDSIwKS1DhQhUmGiESVVg865MxgicOwfHDSIIaTxxGRcNYjPr/WSJjI2aHUSHr
k6EmRMNo3C/Fig3oVNEmboRIYIfM1VjiMJYwgERpDInDSOpCD5ZgKseJLIi5rwfzwJP8+bAx
V0OKUXOhhsxzcp4Xm+6jATFSHU+JhD8IJi3LuHL0vAKOUCJR4+aoFza7f3P4z1ZQOE5moOYC
PZMOGwv1dD5sLNAz+RBTADEFOjoLMmbD5lzImA0ZsyFjFkRnwcZcHZWOTRTIhhNd3ewrq09a
QRlE5rMulihdgFIFpKkIpwtRm/FlIW4swJh8wiSmLIUYk0eYxCiVbwVlxcU/ubrN6VEJNEzC
MBYzQsYOIbHDmHCqmDnpoyW0MQ0mVKEJQ4hwjI4e1IvWPse6KX/J2vWzKWFKlK+A2b+MgM08
Zg/udTq4L//4Xh+Euz2tKZede3MwbQd3w2AQActbkxEyXJaWJLowGIj2Br+/aatHYu7eyKR9
X+5+Nat61+HT22+Pcj7z2UqCZC0pPHruzcxKr/rOE+HJO+PzfHo1oY23zixZPb97JPTr4+/m
FPuHRX988OQfPv7qaeU4L+jg9vj8L9Sm2Hb1ybGJ2ODvt/OE3lc6Q//mszXo261BR7Zv3b7o
Usf+rNLApSuc+0eEkClTS6Xp6HQdna6jM/5ZaOl0HZWhpVP1TKaWTtWQWRTIbLga4rbQob07
gpzI0VBpWioVojO1LBXR6XomTUun6+gMPZOmIVMNIOdK13mHuU+1dcRYLbUEKTbQ5SRdQhmL
CaLEamnc5bX988+2WS3VKJmHUwUEVYjguVZLZWrWoWefWTwO5RhMxSiVj9NijCm0jc7QYsRQ
YDCXKpVZSz0cK6s4ALTQhiqLpUqvr/NwdsnKPAZAO8NUWa31kh7xYvcFVy5HmkEZADU7d75t
Z2f3xCq3x09um3Zoy/SHaw6GHbScNn2auDT2dk9rW3ttZ3dTW3tDe0dzV3dze0djR1dLe0dD
V/fltva6ru6Wtpu17Z21nbeu3LjZ2Nnd2HX7Slt7Y0dX882u+vaO+o6uptablzpuNVVcFBcU
5HXeaunsvtzeefnW7dZbt1suX7m0Zu3y7W/t0CI3Nm1eYSOYDVvWlgxyS+Qny5WnCyTccun5
MunpctnZctmZ3wTKpGfKZWeKe89dlIWUSH4qHT6Vcf3s2vXPJOfsxUD6IBw7jMZP5fepMNEo
mTiMioZg0QiePITEq7D4YZvx3//DvdwmTYaQOBUmVBPCYSxGTQgn+cZGM3dJiBVDqGgIjVVh
omEkQYUlDaPxajJhGBeOEqIhOMXDY5FIFGi1Vo4T/7pVDMTkIcYcfCJTi+fMXzA3Jm23mom9
Mx4q1fMeCDquVMeVQtxeHV8GRdzWnFAz0c+sX+of/EeTqWIETR3F07WGnHEiW0NmjJOZGjJj
nMzQEBlaMktDZI1hGToyW0tmaYgMyJCtxbJ1eBbGFPUqE52dHSsqzhlNpZAhDyLyEFyM0oUw
ma/DclBDIUQUwmQBROQjhkKYKNBhuRCZB5MFejxTg2abTVUFBacc5jp0D0SqyWilNm4QThhA
Igf0cX262AFI2K+PG4CEg3DcABwzCMUOwrGDcMwAJOzXx6jwaOlIxNrnFtvZ2XFFrF0/R4Fw
J8mDzaDks5nHChu73GWI+6zbUL5i6qXNYmfq/nt46C7r3LN1wvZPCBR37f35CoQn0XK0QBh4
6IPnXnD7fO+zguTPP/zrZmGO995Dbw4QEXsObv2R95eDP7178Mf3hVl7a24ePXJ2e1q5d6+O
982Pf/gh7N0z4V8ePv0eL9Lz0PfvR1/YdYb/BSfi8127N1+6+a0WiOQoVw+ii5q+PnDsnRNh
H3979r1u9Xe5VQfe/viFntFzGUUBS5Y79Y3E4pa8cTJFZ/vp//cUDJ02TmbSIGtSwUQaJnLH
Dek6Ok1PZejodB2VoaczdDZ2ydTRqVpDGmnNvXor1MF+1o3OaDYPhjKWU6ZS2lRKkCVWa7On
99t/++JNq/USasgnGTHJiFEy32qtTs06tG7tEi2cS0+UYnTB1MYQwliEM0UoXciYS5XKtCWL
5jU2CwG4OWFpAqAZw2ucFswtEJ8HoHti4goAnVJp6TNPL25vvwDANQBu+fr8yc6WaPn6w9uD
eVRcFjMw1Nsrbe+RtCn6bkukN9s76252NtzpvSmV3+yRtEplnVJZV2f35Y5bdbd7rvVKOzpv
Xb7R0XT7zg2JrKPrdnP3nSu90na5skOm6KhvqKmuruq8da2z+4pE2tXT29U/0Huz4/pc+6ee
XfPiuP7G3UTLNa8uzhoMzlR4psk+S1N6ZUi90+W702W+6fLdvwmkyXeny3anKn1T5J+lyb/M
UfmEV+2cNefxzKJgFKT1Q9FqLEGFiYaxuCE0doQUDsBRI6RQhccOohFjpFCFR6twoRpLHkLi
1bhwshMjUv+i9TKMCscMScNYrAqPVeHCYfQur9xbGbtXzQyj8Wo8UYUnqHGhmoxQk9GDSNwo
IRpGUlxd3ePigicmykeRFB2ZoSMz9P8fd98d3cSVvj0uQAIBbMCVTui9mGJ6CcX0Zjq4dxvT
OySEJGAbg3tv6rKqe6EkgUDYJCShGEuycZHkpj4jzWhGxbrfH5KNk+z+NvttyW44z3nP9dWd
Ahz78fNWjGZdKFCqEvv7UKBUBUaRIywlxpIhTDf3gfTKMCOgyUGWGuT+buQpQIoK5LUTOV3d
6QZQ6rNz8Y24wwD81A0qAbgPwAMA7vdJBrXCuvMAgC+7QQ0A9wGo6UkB+kaGsEaOcXr6LA2A
5wBUA1ADwFc9V1nvdh+Ar3p6ET7q6Uj4tfWGALz48kn8gkWT5TjdBFh6wMdAGQrIWkAhABMH
DBRQ9YCuBwwMMPTvwMQAmQB0LWDMnj/aOnBM9fsGjv270WeiZbwK5IWf2LZsxZRvRR9nFB/j
PIy598PFJ4Jrzdjnz1s/vZ3nW/PDyR/FN35ovfFadu3x6y++bbxcr7zx1asrLWjily8v1clu
3ik8mMs9JjUl/CxNuJm5q+LZhZcdcZXPLtz/6Vzld6fq5HHshxEp5CN1nQkSPL1Fd/up8Loc
5Baygz+c5NnSkaMx0bvQQgVOVeDk/58ADEFR4lQFQVYSdAVOlqF0K8F4jhr246sUrLtYpqco
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
NF9qmg8l1Zea5jMKxfpdSupdatpdStpdappPQop3UsaD6HjPeSqzj5/WReTRfUjkwM/2lAqE
/wyRSSObO2MXLl6zbOlctdUrVFWXr1NdqrpqieqaFevWrFynumTt6lUzZ82ZOUtFh7hWbbWa
uupStTXL1dauUF83X2Ot2vkLF6fPmLd21aJ1qst3bNPcqLFKdc1ytbVL16mumTpt5uTJ09VU
16ipLV+xfOHuPTvPXTi0ZtXctauWEZSU586dvW7t/HXqi1arzlulqrJBc9nhA7sWLZkOAFBT
Xbxu7dLVa+eoqa1SXbtg7RqVSVOmK4ExhF1Lxl7bomylC2x0gZWW0sipLeIPjUKw0R1jr69k
pT3WVm/sZe1fL/3gAGVLPWBDHGOto2yrR7DR/ssGgp2ekhVR2VZXyZqoZENUstFTGqEcopK1
LsGKCP7plr9G6myIwFKfYK2jdGsbWDn/xCk9jiyiC/mzV/RnN/6iW/SmUxD9rTexfSi9tT+x
dYD+vT/pW2/St77E731J3/oSW3oZ3/sSv/UyWgeSFJPvfYmtvYmtvYltfUnfexjfuultfUnt
g0kdw6ktvfRvfYyWXlprT2ZzF6WPl52cmuDheb2xndrSmdzYntjYntjSmdzYxmhqT25qT21q
T2vryf7WmdHYltLUntbUntbckd7QmtLUnt7cmVj/nd7NjxrAP/YIIqQw/l7oeV2iKo6nIxiF
L47j4QkCnMLHKQKcKsCpiolQRBOIqAIRdVhIksuz3V0v6G9bK5anCdAEPkrmi+L44ni+aAQ8
PG5YQJXL2WfNDh0z2SmXMzlCEh9P4I0cTiNzMTJPnMQT0oVYghBjqq5bHhhyWS7PHEaiuVic
UEwRiskCccwgL1EuZ1pZGRns3CSXZ4nEiZiILpYlSWSJGJ4gl5dcurgLAEAABPD/7B8BKP9X
l5TAOAKY8P/uT//n/o3+lzW0F1PKHT4VOMYW2kcXXIkpdIxlX4kpuBr7Pwcx7KsxBbZxBXbR
+Zbx5ddf0qn3TbwAACAASURBVCyVxynpGah9xR+UD3gRt62NyrI2OKgWlmbbLA86Z7/d0XN3
K3xs47JLz2iVpfMeermNhu6K9M83c5uc3J/sS6q4seXQ6k9M2/Lhu+GZFzOq3MMT7JZpzHkU
deaavzGr062a/9DrD+Ntv685bK71VeRz896R81d2mpzXehB2UgifXvU0unRdzy3I6OjlTTW9
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
aCMntJn7uGH4UVNfbFIybeWqlTq6xJzc1C9fq+q+ltfUFpVX5H9tqGhsrq6oyi8rz6v+XFRe
kV9WkVddU/ilrrSxuerzl+LikpzauuLMLMbkyVMnT5mQyWTU1ZfW1pV+ri2prGZVVLMKCnMz
MlK+1JVWVrOragrKK1mV1ez6horG5sqqmoLlK5YAAJ49D2pqqSouza6qKWhsrmxqqaqpLSyv
zCuvzO0Yih2ShPXwP+KQHEVyW7xwmZ7eJh3tzTrE9dqbNXS0NupobdDR3qijvZGotUFHe6Ou
tqYCRK0N+rqb1VU1NmlpnTh+7MTRvUcOGx4/sueYySiO7DluYnTo0NYrDmbnzp6ZM3vayRN7
Dh/aYnJYfwQm+iaH9Y6abDU5tNXZydby8iUCGLNOdcmpkwaHDukdObzV5LD+0SN6R0y0DxzQ
Pnd+z+pVS+epTD9rZnLs8L7jR4xPHDE+YbLvmMk+01OHVq5YDAA4cXI7gmbyhTQhRhGgVASj
/QVCjCpEqQhO5XDjJJKc7Ts2ONw8IRGnDPA+cZBYDhrLQWI5SCz35yRukB8tkdCTMh/Omze9
piWEI4nq4X/oQ9/1CSM7uW95ksh0ls/ECROUlMZF027xJFGtwy/auc+7+O87uB86uB86eWF/
Ax86uB/aOC9RSYy55d59xloScRJHEDcojB4WRA8LYzhIHBeNGRbShvhkIUrnCGIOHNICAJw3
3y2S0IZ5JI4wkouRhwQxirf9LzEsjOEgscNIzLAwmoPEDPCicAmNxQoeO1Z54oRJTGaIVJLC
4ZNQjMblxQmQJAFO2bJllGA2b13G7nPO7HTPavNktjpnt7sw29yZbW7Zbe7/I8Bsc2O2uWd3
3M5p90r/7soa9IzOs50xZ1rQp7OdMLSS78ru92V13SsedmF3++d2uxT0+Rb2e+V2erA6vUu4
bqx+l9wub3a3dw3i+xUPLOh1ze1wLR72YnV75nX6sLo8qjGfz3hg4aBbQb9nQa97fpdTfodv
brcre9iZ3eOW2+XH7vcq7vPLafct5njU4b4lQ/7s3vvZ3bcKBu5WI/dqhffzOz1yOn3yOrxr
Bd5f0Aelw/5Zza4qS2e+fms9jEXUDz5v4b5q5rxUoIX7upnzqoX7+m/gVQv3dfPwsw7+m6a+
t+vXq0eSrolgfK/wwwD+cQD/OIh/HMDDBvHwQdHIqVPFRHHYVDHpRz/yZDENnX/OU5l52ux3
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
UcVV+2X/cnNzmZsJmZOTc+rUqfPnz1+6pPJz6dKlixfzLl26+MsvP+fm5p44ceLcuXOX1Kl3
9uzZEydOHD58+LfffpOBBAkSJEiQ8BogQwghhDDG7CpBwn8Rz9JeSaslPAuCbgh1oAb/tUYq
uAkh7CfP80iNeo9UiKtmhf8cR80QxB7EQWkkJgPP8zJCCKWUUtrQpk6ChJcE015KKVNmgSnw
G1I4CW8lNHSGQex+TZEysLperKIabqg/vWXh1BpjzaihesoQQsTumg4AEDjiNBSuMo1oJEj4
z0GjNApMcWmRIEGMmvVpTf5rjVTMea2o1Zz8q/+apanuUYivsno0lRIkNAhojUILNTReggQx
ataGNfmvNVIx57WCVm9s1dF/zdJU9yjEV5lUCCVIkPD/LWrWp6+1MnxOY6jWrsDriLem4/kx
PqcHU2vI4qu0ikyCBAkSJLwWSAZGggQJEiS8FkgGRoIECRIkvBZIBkaCBAkSJLwWSAZGggQJ
EiS8FkgGRoIECRIkvBZIBkaCBAkSJLwWSAZGggQJEiS8FkgGRoIECRIkvBZIBkaCBAkSJLwW
SAZGggQJEiS8FtSzgam+aw2oryoeUArQMETZVRBKtJsOpUDV4jFnwwgpxE6FjX1UMoHq11tB
VH3VJCGV3xYBoXp2N3Qe02dqoTo9NTgNk5rq5BMU76lGPr3d0CQkkLAl1r9uqPVmoLFtl7gy
rFa0aYPJWU2qp9ULBQoA7FqfqP8ejCjhqPqq4lFoGIWkIgelItEEfX2a/2r9ffMEqvx9mnyq
H09r77eBBHnEjoYW6hkk5DBUT9OGEUajggbh51tUc4uFE1o1VOA0vGCitFPlsMgFT2vPBhXs
qbo9dTzNZXVBB9oQqFZFU7FgVBCsHlGfBkb8Asypvqp4QBumpgGRA0B8rNDTiogQVXI3WEmn
VBX7U1UgjNuAQtUmplofRY6GFqp2IpSoE5QIadpg0lbXRUyo8PPpDUKAkoaxf9VJVQdRCpQA
EDWn4QV7Kh5LOJazaheraNSSN5hgT2vzpw4AQoE81YOntfybRbUqGgTB1CLVt2D1P0RG2XFm
7JwzTAgmBGFKCCGYYkwJefNECDvNDSPEY4wQz6tO/iQ8O0MUEw7xPBOXEkxpQxDBmCBCMEEU
IYwQRwhPKCaEEIxUgjU0EawihAlGHCY8JhxGGGOCCVFdG5CwWj6MMMGY8AgTzCOCMUGUEiUh
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
cWNj49u3b7Ngz507p6Wl9eDBg549e06dOpXlJgCEh4dPmjTp+PHjRkZGbOIBAI4fP25mZvbX
X38JaShWxboICaJhD+GRX375ZefOnYmJiW5ubvfu3SsuLj506BDTIgAYN26cra3to0ePunbt
yrKPqauTk9P69etXr15tb29PKWVZv2LFChcXFzZ7JBiYF+3BCFlcVFTk6ur61VdfAcCxY8f0
9PT+/vtvAGBdfEHzp0+fHhwcfPv27Xbt2p09e5aFc+fOHXNz89zc3AkTJoSGhgqex48fzwb6
NDbhf5P4bxgYoRlCKTU1NV26dCn7+ffff+vo6LDy9voMTM3+L6txOI47fvy4lpZWYWFhSEjI
9OnTWV3w8OFDa2trNptqZmb26NEjjSEyoTn2irlORT2YI0eOiIfIRo0a1aNHD0IIa/IHBgaO
Hz++vLxcS0vr7NmzzLydOHGiadOmCoVi7NixXl5eAMCmPX19fYUhMipqn9a9YAsvxRzqDbaX
u7i4sMIpVElsyAsAwsLCJkyY8Pvvvzdt2vSvv/5iEq5cubJt27YY45CQkBEjRrCSo1QqLS0t
Fy1aBK/QgxHEE1aL6evrT548mY3JMCHNzc3ZOAlC6P79+1paWtnZ2bt27TI0NGRrFzHGEydO
dHNzwxjb2touWLBAPET2448/wqsNkbEHWVrNmDGjZcuW8+bNY+ONHMcJrZzKykqO44qKij78
8MPs7Oz58+ezIT42qNKvX78RI0aUlJSYmJjs3buXDZGdP3+eDZGxlxVrYx1lo6KeASEkJyfn
zp07wmva2dlNnTr1/v37zZo1+/nnn1mybN++vW3bthUVFdHR0dHR0Uw5FQqFu7v7woUL//e/
/zGRmOfNmzfb2NhoDJHBC/YMiGodI62qqjpz5owwzUYpbd269fLly9lPhBDL0AMHDmhraz9+
/NjX13fu3LlMkoKCAlNT0/379+/cudPS0rK0tJTNXX3yySdyuVwozlSEOsopLr+7du1q1KiR
h4eHv7+/jY1N8+bNWUti+fLl7u7uSqWyqqqKEDJ8+PDo6OiSkhILC4tdu3axIbKLFy8aGhre
uHFj9uzZ7u7u7H1Z1g8YMICqR0ElA1M7hGxjZbVPnz7Dhg1jt7KysgwNDd/MJD8r57t27erd
u7dw6+uvv+7cuTMhZOzYsWxOEgB+/fXXFi1a3Lp1Kz8/38DA4MSJE4zfp0+fqKgoAFCvIlOF
+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
--------------080400080804000104060103--

--------------000806090807040104010808--


From goswin-v-b@web.de Tue Nov 05 19:33:13 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VdmNF-0003Zf-UC (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <goswin-v-b@web.de>); Tue, 05 Nov 2013 19:33:13 +0000
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1538529 
	* -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/,
	no *      trust
	*      [212.227.17.11 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (goswin-v-b[at]web.de)
	* -0.0 RP_MATCHES_RCVD Envelope sender domain matches handover relay
	*      domain
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mout.web.de ([212.227.17.11]:56741)
	by ppsw-32.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with esmtps (TLSv1.2:DHE-RSA-AES128-SHA:128)
	id 1VdmNF-0007NY-1y (Exim 4.82_3-c0e5623) for cl-mirage@lists.cam.ac.uk
	(return-path <goswin-v-b@web.de>); Tue, 05 Nov 2013 19:33:13 +0000
Received: from frosties.localnet ([37.49.32.119]) by smtp.web.de (mrweb103)
	with ESMTPSA (Nemesis) id 0M1X9B-1Vsyjx43Fx-00tVRo for
	<cl-mirage@lists.cam.ac.uk>; Tue, 05 Nov 2013 20:33:13 +0100
Received: from mrvn by frosties.localnet with local (Exim 4.80)
	(envelope-from <goswin-v-b@web.de>) id 1VdmNE-0004U2-8c
	for cl-mirage@lists.cam.ac.uk; Tue, 05 Nov 2013 20:33:12 +0100
Date: Tue, 5 Nov 2013 20:33:12 +0100
From: Goswin von Brederlow <goswin-v-b@web.de>
To: cl-mirage@lists.cam.ac.uk
Subject: How to preempt a thread?
Message-ID: <20131105193312.GA16998@frosties>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.5.21 (2010-09-15)
X-Provags-ID: V03:K0:JGvXclwyILzQJNtR1FLaz11nDW6RCcpeV6/ahbDEMA2BJCECoGF
	yF1irIo7LFVc7yMxKhssYyMVTb2tP5ODTVXOG6yB4H5ePGXbHlNMOdwF5O5kin/VcdZcXxg
	QkksFosart+GtQVtjDbeKeD3Dz+RwEEFYeLdqsRH18pi0nlkkITCouypFnaoGHgSmgNySBl
	uoUFQEM8iisVYmoWOYffg==
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 05 Nov 2013 19:33:14 -0000
Content-Length: 1000
Lines: 30

Hi,

I'm trying to run ocaml bare-metal on a RaspberryPi. Since the RPi
only has an ARMv6 cpu it has no virtualization extension and running
mirage under xen is not an option. :( But I'm basically doing the same
as mirage I was hopeing I could borrow some knowledge from you.

My question concerns threading.

1) How have you implemented this at all in mirage?

Did you rewrite the thread module or provide the pthread api/abi so
the existing module works?

2) CPU hogging

My understanding is that normal native code sets a timer in the
threading module. When the timer expires it plays with the minor heap
limit to trick the GC into running on the next allocation and hooks
the scheduling into that. So it is not truely preemptive and a thread
that doesn't do any allocations will hog the CPU.

Have you addressed this problem, if at all, in mirage?

MfG
	Goswin

PS: If I get enough hardware drivers working I might work on merging
with mirage, getting it to boot on bare-metal arms without xen.


From goswin-v-b@web.de Tue Nov 05 19:41:27 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VdmVD-0003nN-0e (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <goswin-v-b@web.de>); Tue, 05 Nov 2013 19:41:27 +0000
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1538529 
	* -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/,
	no *      trust
	*      [212.227.15.14 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (goswin-v-b[at]web.de)
	* -0.0 RP_MATCHES_RCVD Envelope sender domain matches handover relay
	*      domain *  0.0 FAKE_REPLY_C FAKE_REPLY_C
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mout.web.de ([212.227.15.14]:53567)
	by ppsw-32.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with esmtps (TLSv1.2:DHE-RSA-AES128-SHA:128)
	id 1VdmVC-0000w6-1t (Exim 4.82_3-c0e5623) for cl-mirage@lists.cam.ac.uk
	(return-path <goswin-v-b@web.de>); Tue, 05 Nov 2013 19:41:27 +0000
Received: from frosties.localnet ([37.49.32.119]) by smtp.web.de (mrweb002)
	with ESMTPSA (Nemesis) id 0MeSYJ-1VGu2D0PWx-00Q8ik for
	<cl-mirage@lists.cam.ac.uk>; Tue, 05 Nov 2013 20:41:26 +0100
Received: from mrvn by frosties.localnet with local (Exim 4.80)
	(envelope-from <goswin-v-b@web.de>) id 1VdmVB-0004WK-KG
	for cl-mirage@lists.cam.ac.uk; Tue, 05 Nov 2013 20:41:25 +0100
Date: Tue, 5 Nov 2013 20:41:25 +0100
From: Goswin von Brederlow <goswin-v-b@web.de>
To: cl-mirage@lists.cam.ac.uk
Subject: Re: Fwd: [Caml-list] Ocaml on RaspberryPi bare-metal crashes
Message-ID: <20131105194125.GB16998@frosties>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.5.21 (2010-09-15)
X-Provags-ID: V03:K0:+04T6X61H9PIR20isE8+qHvUbbbgdddZRl3XRRQWQU7aF6yAUrp
	ylCXkl2XjMAORQ5nb1dAnZ8g6XB8jZkdIOxR9jrrUjlMhclKOaO4BdderO2mGDG3FkAI0L1
	Eg42tmMhpLrdhU3CQJuXENs1QSvmPy/HXUz8pCNgXP8KD4S86o9MDMFV1YNK/Z1q+pho0Op
	cY0Xff1751uaGGdh2R24A==
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 05 Nov 2013 19:41:27 -0000
Content-Length: 2431
Lines: 69

> From: Goswin von Brederlow <goswin-v-b at web.de>
> Subject: [Caml-list] Ocaml on RaspberryPi bare-metal crashes
> Date: 4 November 2013 08:10:15 GMT-5
> To: caml-list at inria.fr
> Reply-To: Goswin von Brederlow <goswin-v-b at web.de>
> 
> Hi,
> 
> over the weekend I wrote some boot code and glue to make ocaml run
> bare-metal on a RaspberryPi. Here is what I did:
> 
> - Compile ocaml source into a single object file:
>    ocamlopt -output-obj -o prog.o foo.ml
> 
> - Compile a boot.S and main.c file providing the hardware interface
>  and libc (libm, libdl) functions needed by ocaml. A lot of stuff is
>  just stubs that will return errors or nonsense (like all the math
>  functions return 0). But I have memory and print functions working.
>  The main() initializes the hardware and calls caml_startup().
> 
> - Add libasmrun.a and libgcc.a from the system.
> 
> - Link it all together and objcopy to binary to get a kernel image for
>  booting.
> 
> Everything compiles and links without errors. And the kernel boots and
> outputs its startup messages before starting ocaml. But then is where
> things get tricky:
> 
> ---- foo.ml ----
> let () = ()
> ----------------
> Ocaml starts and finishes and the kernel outputs its finished message.
> Everything seems to be working fine.
> 
> ---- foo.ml ----
> let () = Printf.printf "Hello World\n%!"
> ----------------
> Ocaml does its startup (calls the same libc functions as before) but
> then the system resets before printing "Hello World\n". I don't see
> any sprintf() or fputs() or fwrite() calls.
> 
> I'm not sure why it crashes and I haven't setup exception handlers yet
> that would tell me what or where exactly it crashes. But the only new
> bits are the initialization of the printf module and the printf call
> itself. Must be one or the other.
> 
> Does anyone want to take a blind guess what could be wrong?
> 
> One idea I got while writing the email is that maybe the stack is the
> problem. I only setup a 16k stack at boot. Does ocaml create its own
> stack or should I make the stack larger? Would a simple printf exceed
> 16k stack?
> 
> MfG
> 	Goswin

I since solve the crash. It was actualy 2 problems:

1) the GC uses floating point operations and I didn't have the FPU enabled.

2) malloc() needs to return blocks 8 byte aligned (not 4) or storing
   64bit values crashes.

After that ocaml works (limited to the serial for I/O).

MfG
	Goswin


From scott.dj@gmail.com Tue Nov 05 20:14:40 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1Vdn1M-0004AZ-Ad (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <scott.dj@gmail.com>); Tue, 05 Nov 2013 20:14:40 +0000
X-Cam-SpamScore: s
X-Cam-SpamDetails: score 1.3 from SpamAssassin-3.3.2-1538529 
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (scott.dj[at]gmail.com)
	*  0.0 DKIM_ADSP_CUSTOM_MED No valid author signature, adsp_override is
	*      CUSTOM_MED
	* -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/,
	no *      trust
	*      [209.85.192.176 listed in list.dnswl.dnsbl.ja.net]
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
	*  1.2 NML_ADSP_CUSTOM_MED ADSP custom_med hit, and not from a mailing
	*      list
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-pd0-f176.google.com ([209.85.192.176]:38772)
	by ppsw-52.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with esmtps (TLSv1:RC4-SHA:128)
	id 1Vdn1L-0001au-EN (Exim 4.82_3-c0e5623) for cl-mirage@lists.cam.ac.uk
	(return-path <scott.dj@gmail.com>); Tue, 05 Nov 2013 20:14:40 +0000
Received: by mail-pd0-f176.google.com with SMTP id g10so9062166pdj.21
	for <cl-mirage@lists.cam.ac.uk>; Tue, 05 Nov 2013 12:14:37 -0800 (PST)
MIME-Version: 1.0
X-Received: by 10.66.162.167 with SMTP id yb7mr193544pab.16.1383682476397;
	Tue, 05 Nov 2013 12:14:36 -0800 (PST)
Received: by 10.70.56.36 with HTTP; Tue, 5 Nov 2013 12:14:36 -0800 (PST)
In-Reply-To: <20131105193312.GA16998@frosties>
References: <20131105193312.GA16998@frosties>
Date: Tue, 5 Nov 2013 20:14:36 +0000
Message-ID: <CAG_esB3C8npVswxaD=TVAR2NBU2PMuXqDndPapA+_FB_ev=sYQ@mail.gmail.com>
Subject: Re: How to preempt a thread?
From: David Scott <scott.dj@gmail.com>
To: Goswin von Brederlow <goswin-v-b@web.de>
Content-Type: multipart/alternative; boundary=047d7bacbe707cddbd04ea73aeb1
Cc: Mirage List <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 05 Nov 2013 20:14:40 -0000
Content-Length: 6316
Lines: 143

--047d7bacbe707cddbd04ea73aeb1
Content-Type: text/plain; charset=ISO-8859-1

Hi,


On Tue, Nov 5, 2013 at 7:33 PM, Goswin von Brederlow <goswin-v-b@web.de>wrote:

> Hi,
>
> I'm trying to run ocaml bare-metal on a RaspberryPi. Since the RPi
> only has an ARMv6 cpu it has no virtualization extension and running
> mirage under xen is not an option. :( But I'm basically doing the same
> as mirage I was hopeing I could borrow some knowledge from you.
>
> My question concerns threading.
>
> 1) How have you implemented this at all in mirage?
>
> Did you rewrite the thread module or provide the pthread api/abi so
> the existing module works?
>

Mirage only uses co-operative threads via Lwt. When the Lwt scheduler has
run out of "threads" it calls a hypercall ("SCHEDOP_block") which takes the
vCPU offline. When an interrupt fires the vCPU jumps into a C callback,
which would normally do some work in a regular OS, but in Mirage it does
nothing. When the callback returns we re-run the main loop. The main loop
checks which interrupts have fired (this information is in a shared memory
page) and signals any blocking lwt threads. The main loop runs the Lwt
scheduler, and eventually blocks again.

This demonstrably works: we've got co-operative drivers, HTTP
implementations etc. However there is no pre-emption so we can enter into
infinite loops if we're not careful. The code tends to be fairly "threaded"
(lots of Lwt.binds) so there are lots of opportunities for the Lwt
scheduler.

At some point we ought to check out the multi-runtime patches so we can
fire up multiple OCamls, one per vCPU. Perhaps it would be useful to
implement some kind of watchdog which would reboot the OCaml runtime if it
does get stuck.


> 2) CPU hogging
>
> My understanding is that normal native code sets a timer in the
> threading module. When the timer expires it plays with the minor heap
> limit to trick the GC into running on the next allocation and hooks
> the scheduling into that. So it is not truely preemptive and a thread
> that doesn't do any allocations will hog the CPU.
>
> Have you addressed this problem, if at all, in mirage?
>

Nope :/


>
> MfG
>         Goswin
>
> PS: If I get enough hardware drivers working I might work on merging
> with mirage, getting it to boot on bare-metal arms without xen.
>

This would indeed be very cool. IIRC the RPi opengl driver for Linux is
just a shim which marshals opengl over shared memory to be interpreted by
the broadcom firmware. If this is true then we could even get 3D on the
console (eventually). However I'm sure it's best to walk before we try
running :)

Cheers,
Dave

--047d7bacbe707cddbd04ea73aeb1
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Hi,<br><div class=3D"gmail_extra"><br><br><div class=3D"gm=
ail_quote">On Tue, Nov 5, 2013 at 7:33 PM, Goswin von Brederlow <span dir=
=3D"ltr">&lt;<a href=3D"mailto:goswin-v-b@web.de" target=3D"_blank">goswin-=
v-b@web.de</a>&gt;</span> wrote:<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex">Hi,<br>
<br>
I&#39;m trying to run ocaml bare-metal on a RaspberryPi. Since the RPi<br>
only has an ARMv6 cpu it has no virtualization extension and running<br>
mirage under xen is not an option. :( But I&#39;m basically doing the same<=
br>
as mirage I was hopeing I could borrow some knowledge from you.<br>
<br>
My question concerns threading.<br>
<br>
1) How have you implemented this at all in mirage?<br>
<br>
Did you rewrite the thread module or provide the pthread api/abi so<br>
the existing module works?<br></blockquote><div><br></div><div>Mirage only =
uses co-operative threads via Lwt. When the Lwt scheduler has run out of &q=
uot;threads&quot; it calls a hypercall (&quot;SCHEDOP_block&quot;) which ta=
kes the vCPU offline. When an interrupt fires the vCPU jumps into a C callb=
ack, which would normally do some work in a regular OS, but in Mirage it do=
es nothing. When the callback returns we re-run the main loop. The main loo=
p checks which interrupts have fired (this information is in a shared memor=
y page) and signals any blocking lwt threads. The main loop runs the Lwt sc=
heduler, and eventually blocks again.</div>
<div><br></div><div>This demonstrably works: we&#39;ve got co-operative dri=
vers, HTTP implementations etc. However there is no pre-emption so we can e=
nter into infinite loops if we&#39;re not careful. The code tends to be fai=
rly &quot;threaded&quot; (lots of Lwt.binds) so there are lots of opportuni=
ties for the Lwt scheduler.</div>
<div><br></div><div>At some point we ought to check out the multi-runtime p=
atches so we can fire up multiple OCamls, one per vCPU. Perhaps it would be=
 useful to implement some kind of watchdog which would reboot the OCaml run=
time if it does get stuck.</div>
<div><br></div><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex=
;border-left:1px #ccc solid;padding-left:1ex"><br>
2) CPU hogging<br>
<br>
My understanding is that normal native code sets a timer in the<br>
threading module. When the timer expires it plays with the minor heap<br>
limit to trick the GC into running on the next allocation and hooks<br>
the scheduling into that. So it is not truely preemptive and a thread<br>
that doesn&#39;t do any allocations will hog the CPU.<br>
<br>
Have you addressed this problem, if at all, in mirage?<br></blockquote><div=
><br></div><div>Nope :/</div><div>=A0</div><blockquote class=3D"gmail_quote=
" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
MfG<br>
<span class=3D"HOEnZb"><font color=3D"#888888">=A0 =A0 =A0 =A0 Goswin<br>
</font></span><br>
PS: If I get enough hardware drivers working I might work on merging<br>
with mirage, getting it to boot on bare-metal arms without xen.<br></blockq=
uote><div><br></div><div>This would indeed be very cool. IIRC the RPi openg=
l driver for Linux is just a shim which marshals opengl over shared memory =
to be interpreted by the broadcom firmware. If this is true then we could e=
ven get 3D on the console (eventually). However I&#39;m sure it&#39;s best =
to walk before we try running :)</div>
</div><br>Cheers,</div><div class=3D"gmail_extra">Dave</div></div>

--047d7bacbe707cddbd04ea73aeb1--


From Chris.Greenhalgh@nottingham.ac.uk Wed Nov 06 17:06:18 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1Ve6Yc-0001cM-On (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Chris.Greenhalgh@nottingham.ac.uk>);
	Wed, 06 Nov 2013 17:06:18 +0000
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1538906 
	*  0.0 HTML_MESSAGE BODY: HTML included in message
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from engine02-20433-2.icritical.com ([195.62.217.151]:54654)
	by ppsw-52.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with smtp id 1Ve6Yb-0000EE-FP (Exim 4.82_3-c0e5623) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Chris.Greenhalgh@nottingham.ac.uk>);
	Wed, 06 Nov 2013 17:06:18 +0000
Received: (qmail 18811 invoked from network); 6 Nov 2013 17:06:13 -0000
Received: from localhost (127.0.0.1)
	by engine02-20433-2.icritical.com with SMTP; 6 Nov 2013 17:06:13 -0000
Received: from engine02-20433-2.icritical.com ([127.0.0.1])
	by localhost (engine02-20433-2.icritical.com [127.0.0.1]) (amavisd-new,
	port 10024) with SMTP id 18707-10 for <cl-mirage@lists.cam.ac.uk>;
	Wed,  6 Nov 2013 17:06:11 +0000 (GMT)
Received: (qmail 17811 invoked by uid 599); 6 Nov 2013 17:04:37 -0000
Received: from unknown (HELO smtp4.nottingham.ac.uk) (128.243.220.65)
	by engine02-20433-2.icritical.com (qpsmtpd/0.28) with ESMTP;
	Wed, 06 Nov 2013 17:04:37 +0000
Received: from uiwexhub01.ad.nottingham.ac.uk ([128.243.15.133])
	by smtp4.nottingham.ac.uk with esmtps (TLSv1:AES128-SHA:128)
	(Exim 4.77) (envelope-from <Chris.Greenhalgh@nottingham.ac.uk>)
	id 1Ve6X2-0004TY-IL; Wed, 06 Nov 2013 17:04:40 +0000
From: Christopher Greenhalgh <Chris.Greenhalgh@nottingham.ac.uk>
To: Dominic Price <Dominic.Price@nottingham.ac.uk>, Mirage List
	<cl-mirage@lists.cam.ac.uk>
Date: Wed, 6 Nov 2013 17:04:39 +0000
Subject: web service development progress
Thread-Topic: web service development progress
Thread-Index: Ac7bEkeSShaN/2SUTwCqxW5YXDT0hQ==
Message-ID: <4C20415C7327A849961F3B8421413725010CD7203C91@EXCHANGE1.ad.nottingham.ac.uk>
Accept-Language: en-US, en-GB
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
acceptlanguage: en-US, en-GB
Content-Type: multipart/alternative;
	boundary="_000_4C20415C7327A849961F3B8421413725010CD7203C91EXCHANGE1ad_"
MIME-Version: 1.0
X-Virus-Scanned: by iCritical at engine02-20433-2.icritical.com
Cc: Christopher Greenhalgh <Chris.Greenhalgh@nottingham.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Wed, 06 Nov 2013 17:06:18 -0000
Content-Length: 6820
Lines: 141

--_000_4C20415C7327A849961F3B8421413725010CD7203C91EXCHANGE1ad_
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

It isn't pretty, and I'll add some interface files and comments at some poi=
nt, but in case anyone else is also trying to do web development in mirage =
I thought I'd make an early "announcement" of
https://github.com/cgreenhalgh/ost-kiosk-manager

So far, starting from mirage-www, I have hacked together basic session hand=
ling support (session.ml using memorystore.ml), initial login framework (lo=
gin.ml), persistence over baarskeerder (persist.ml - just a stub, plus idio=
matic usage in...), basic html CRUD interface for admin database operations=
 driven by dyntype information (dbforms.ml), and multipart form upload supp=
ort (mime.ml).
I intend to use javascript for the main UI so I'll add a dyntype-based REST=
ful interface next, I think, and tidy up the authentication a bit.

I'm developing/testing on Unix/sockets at the moment and this is currently =
hardcoded in places (in persist.ml).
For Unix you need to create (touch) a file called "2049" (used by the blkde=
v) before running it.
Only built-in account (for access to db forms) is currently "admin"/"passwo=
rd" :-)
P.s. most browsers don't set/send cookies for domain "localhost" (because i=
t has no dots), but they do for "127.0.0.1", so use the latter to be able t=
o login.

Cheers
Chris


This message and any attachment are intended solely for the addressee and m=
ay contain confidential information. If you have received this message in er=
ror, please send it back to me, and immediately delete it.   Please do not u=
se, copy or disclose the information contained in this message or in any att=
achment.  Any views or opinions expressed by the author of this email do not=
 necessarily reflect the views of the University of Nottingham.=0D=0A
=0D=0A
This message has been checked for viruses but the contents of an attachment=
=0D=0A
may still contain software viruses which could damage your computer system,=
 you are advised to perform your own checks. Email communications with the U=
niversity of Nottingham may be monitored as permitted by UK legislation.=0D=0A
=0D=0A
=0D=0A
=0D=0A
=0D=0A

--_000_4C20415C7327A849961F3B8421413725010CD7203C91EXCHANGE1ad_
Content-Type: text/html; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<html xmlns:v=3D"urn:schemas-microsoft-com:vml" xmlns:o=3D"urn:schemas-micr=
osoft-com:office:office" xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" xmlns=3D"http:=
//www.w3.org/TR/REC-html40"><head><meta http-equiv=3DContent-Type content=
=3D"text/html; charset=3Dus-ascii"><meta name=3DGenerator content=3D"Micros=
oft Word 12 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0cm;
	margin-bottom:.0001pt;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-priority:99;
	color:purple;
	text-decoration:underline;}
span.EmailStyle17
	{mso-style-type:personal-compose;
	font-family:"Calibri","sans-serif";
	color:windowtext;}
.MsoChpDefault
	{mso-style-type:export-only;}
@page WordSection1
	{size:612.0pt 792.0pt;
	margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
	{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1" />
</o:shapelayout></xml><![endif]--></head><body lang=3DEN-GB link=3Dblue vli=
nk=3Dpurple><div class=3DWordSection1><p class=3DMsoNormal>It isn&#8217;t p=
retty, and I&#8217;ll add some interface files and comments at some point, =
but in case anyone else is also trying to do web development in mirage I th=
ought I&#8217;d make an early &#8220;announcement&#8221; of<o:p></o:p></p><=
p class=3DMsoNormal><a href=3D"https://github.com/cgreenhalgh/ost-kiosk-man=
ager">https://github.com/cgreenhalgh/ost-kiosk-manager</a><o:p></o:p></p><p=
 class=3DMsoNormal><o:p>&nbsp;</o:p></p><p class=3DMsoNormal>So far, starti=
ng from mirage-www, I have hacked together basic session handling support (=
session.ml using memorystore.ml), initial login framework (login.ml), persi=
stence over baarskeerder (persist.ml &#8211; just a stub, plus idiomatic us=
age in&#8230;), basic html CRUD interface for admin database operations dri=
ven by dyntype information (dbforms.ml), and multipart form upload support =
(mime.ml).<o:p></o:p></p><p class=3DMsoNormal>I intend to use javascript fo=
r the main UI so I&#8217;ll add a dyntype-based RESTful interface next, I t=
hink, and tidy up the authentication a bit.<o:p></o:p></p><p class=3DMsoNor=
mal><o:p>&nbsp;</o:p></p><p class=3DMsoNormal>I&#8217;m developing/testing =
on Unix/sockets at the moment and this is currently hardcoded in places (in=
 persist.ml). <o:p></o:p></p><p class=3DMsoNormal>For Unix you need to crea=
te (touch) a file called &#8220;2049&#8221; (used by the blkdev) before run=
ning it.<o:p></o:p></p><p class=3DMsoNormal>Only built-in account (for acce=
ss to db forms) is currently &#8220;admin&#8221;/&#8221;password&#8221; :-)=
<o:p></o:p></p><p class=3DMsoNormal>P.s. most browsers don&#8217;t set/send=
 cookies for domain &#8220;localhost&#8221; (because it has no dots), but t=
hey do for &#8220;127.0.0.1&#8221;, so use the latter to be able to login.<=
o:p></o:p></p><p class=3DMsoNormal><o:p>&nbsp;</o:p></p><p class=3DMsoNorma=
l>Cheers<o:p></o:p></p><p class=3DMsoNormal>Chris<o:p></o:p></p><p class=3D=
MsoNormal><o:p>&nbsp;</o:p></p></div>
<br>=
<p>This message and any attachment are intended solely for the addressee an=
d may contain confidential information. If you have received this message in=
 error, please send it back to me, and immediately delete it.&nbsp;&nbsp; Pl=
ease do not use, copy or disclose the information contained in this message =
or in any attachment.&nbsp; Any views or opinions expressed by the author of=
 this email do not necessarily reflect the views of the University of Nottin=
gham.</p><p>This message has been checked for viruses but the contents of an=
 attachment may still contain software viruses which could damage your compu=
ter system, you are advised to perform your own checks. Email communications=
 with the University of Nottingham may be monitored as permitted by UK legis=
lation.</p>
<br>=
</body></html>=

--_000_4C20415C7327A849961F3B8421413725010CD7203C91EXCHANGE1ad_--


From anil@recoil.org Fri Nov 08 01:15:48 2013
Received: from ppsw-42.csi.cam.ac.uk ([131.111.8.142])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1Veafs-0007Jj-OP (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Fri, 08 Nov 2013 01:15:48 +0000
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1539273
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:15610
	helo=dark.recoil.org)
	by ppsw-42.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with smtp id 1Veafs-0000pU-6n (Exim 4.82_3-c0e5623) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Fri, 08 Nov 2013 01:15:48 +0000
Received: (qmail 15123 invoked by uid 634); 8 Nov 2013 01:15:47 -0000
X-Spam-Level: *
X-Spam-Status: No, hits=-1.0 required=5.0
	tests=ALL_TRUSTED
X-Spam-Check-By: dark.recoil.org
Received: from Unknown (HELO [172.17.134.240]) (207.62.246.30)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Fri, 08 Nov 2013 01:15:47 +0000
From: Anil Madhavapeddy <anil@recoil.org>
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: quoted-printable
Subject: [ANN] mirage-0.9.8, cstruct-0.8.1, cohttp-0.9.11
Message-Id: <D0DFF604-88D2-43DA-BBA2-791887D52EDB@recoil.org>
Date: Thu, 7 Nov 2013 17:15:44 -0800
To: cl-mirage <cl-mirage@lists.cam.ac.uk>
Mime-Version: 1.0 (Mac OS X Mail 7.0 \(1812\))
X-Mailer: Apple Mail (2.1812)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Fri, 08 Nov 2013 01:15:48 -0000
Content-Length: 1367
Lines: 33

All the below have released to OPAM.

https://github.com/mirage/mirage-platform/releases/tag/v0.9.8
mirage-0.9.8 (07-Nov-2013):
* Add support for OCaml 4.01.0 in addition to the existing 4.00.1 =
runtime.
* Major refresh of the NS3 simulation backend, for latest APIs.
* Add `Netif` statistics counters per-packet.
* [xen] Fix multi-page ring support by granting the correct data pages.
* [unix] flush OS.Console file descriptor more often (#108).=20
* Fix regression in `Io_page.string_blit` with non-zero src offset =
(#71).

https://github.com/mirage/ocaml-cstruct/releases/tag/v0.8.1
cstruct-0.8.1 (2013-11-06):
* Trailing semicolons are allowed in cstruct field definitions.
* Buffer elements can be any primitive integer, not just `uint8`.

https://github.com/mirage/ocaml-cohttp/releases/tag/v0.9.11
cohttp-0.9.11 (2013-10-27):
* Request module: When sending a request, add the port information in =
the host header field if available.
* Request module: When parsing a request, add scheme, host and port =
information in the uri.
* TCP server: When creating the socket for the server, do not force =
PF_INET6 but take the sockaddr value.
* Add HTTP OPTIONS method.
* Use getaddrinfo instead of gethostbyname for DNS resolution.
* Async: improve HTTP/1.0 support (#35).
* Build with debug symbols, binary annotations by default.
* Add Travis CI test scripts.



From anil@recoil.org Fri Nov 08 01:21:42 2013
Received: from ppsw-42.csi.cam.ac.uk ([131.111.8.142])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1Veala-0007Ni-8E (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Fri, 08 Nov 2013 01:21:42 +0000
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1539273
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:19898
	helo=dark.recoil.org)
	by ppsw-42.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with smtp id 1VealZ-0001wV-8W (Exim 4.82_3-c0e5623) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Fri, 08 Nov 2013 01:21:42 +0000
Received: (qmail 29472 invoked by uid 634); 8 Nov 2013 01:21:41 -0000
X-Spam-Level: *
X-Spam-Status: No, hits=-1.0 required=5.0
	tests=ALL_TRUSTED
X-Spam-Check-By: dark.recoil.org
Received: from Unknown (HELO [172.17.134.240]) (207.62.246.30)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Fri, 08 Nov 2013 01:21:41 +0000
From: Anil Madhavapeddy <anil@recoil.org>
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: quoted-printable
Subject: deconstructing OS
Message-Id: <2448E7E1-74A8-4BFD-8FC1-EF63F09E7123@recoil.org>
Date: Thu, 7 Nov 2013 17:21:36 -0800
To: cl-mirage <cl-mirage@lists.cam.ac.uk>
Mime-Version: 1.0 (Mac OS X Mail 7.0 \(1812\))
X-Mailer: Apple Mail (2.1812)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Fri, 08 Nov 2013 01:21:42 -0000
Content-Length: 1515
Lines: 35

We've been slowly decomposing the OS module that's built by =
mirage-platform into separate libraries for a while now, but I've taken =
the plunge and created three experimental repositories for 0.9.9:

- mirage-types : https://github.com/mirage/mirage-types

This contains a single set of module types that build without any =
dependencies.  Right now they contain just IO_PAGE and CLOCK. The =
intention is that they can be satisfied by a specific implementation, so =
an application can functorize over these to be really portable.  It puts =
them all under a V1 module to permit future enhancements.

- io-page : https://github.com/mirage/io-page

This is the standard io_page from mirage-platform, pulled into a =
separate library.  The lib_test directory has a portability test that =
attempts to cast the module into V1.IO_PAGE (and this did in fact find a =
missing function in the Xen version vs the Unix version).

- mirage-clock : https://github.com/mirage/mirage-clock

Just the simple clock functions from mirage-platform, against cast =
against V1.CLOCK

An important part of these libraries is that they can build =
independently of Mirage-platform, so a normal UNIX app can just go ahead =
and use Io_page without having to ever worry about Xen things.

Thoughts?  This split will leave very little in Mirage-platform (just =
the Time and Main modules), along with the runtime libraries, but result =
in more repositories.  I think OPAM mostly takes care of the latter =
problem however...

-anil=


From anil@recoil.org Fri Nov 08 01:36:18 2013
Received: from ppsw-42.csi.cam.ac.uk ([131.111.8.142])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1Veazh-0007gs-PR (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Fri, 08 Nov 2013 01:36:18 +0000
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1539273 
	*  0.0 HTML_MESSAGE BODY: HTML included in message
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:40752
	helo=dark.recoil.org)
	by ppsw-42.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with smtp id 1Veazg-00053L-9A (Exim 4.82_3-c0e5623) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Fri, 08 Nov 2013 01:36:17 +0000
Received: (qmail 29746 invoked by uid 634); 8 Nov 2013 01:36:16 -0000
X-Spam-Level: *
X-Spam-Status: No, hits=-1.0 required=5.0
	tests=ALL_TRUSTED,HTML_MESSAGE
X-Spam-Check-By: dark.recoil.org
Received: from Unknown (HELO [172.17.134.240]) (207.62.246.30)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Fri, 08 Nov 2013 01:36:15 +0000
Content-Type: multipart/alternative;
	boundary="Apple-Mail=_0C4EA606-CBC8-4D6C-BAAC-6A6D694318F5"
Mime-Version: 1.0 (Mac OS X Mail 7.0 \(1812\))
Subject: Re: web service development progress
From: Anil Madhavapeddy <anil@recoil.org>
In-Reply-To: <4C20415C7327A849961F3B8421413725010CD7203C91@EXCHANGE1.ad.nottingham.ac.uk>
Date: Thu, 7 Nov 2013 17:36:12 -0800
Message-Id: <C3838567-AD1D-4558-917C-ACA4FC3C5DFB@recoil.org>
References: <4C20415C7327A849961F3B8421413725010CD7203C91@EXCHANGE1.ad.nottingham.ac.uk>
To: Christopher Greenhalgh <Chris.Greenhalgh@nottingham.ac.uk>
X-Mailer: Apple Mail (2.1812)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
Cc: Dominic Price <Dominic.Price@nottingham.ac.uk>,
	Mirage List <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Fri, 08 Nov 2013 01:36:18 -0000
Content-Length: 8021
Lines: 148


--Apple-Mail=_0C4EA606-CBC8-4D6C-BAAC-6A6D694318F5
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=windows-1252

Very, very nice!  I particularly like the use of Dyntype for the forms.  =
A Dyntype interface to JSON would generally be useful as a separate =
library in fact -- I'm just tidying up a standalone "Cowabloga" homepage =
generator at the moment that provides libraries to the Zurb Foundation =
work.

-anil

On 6 Nov 2013, at 09:04, Christopher Greenhalgh =
<Chris.Greenhalgh@nottingham.ac.uk> wrote:

> It isn=92t pretty, and I=92ll add some interface files and comments at =
some point, but in case anyone else is also trying to do web development =
in mirage I thought I=92d make an early =93announcement=94 of
> https://github.com/cgreenhalgh/ost-kiosk-manager
> =20
> So far, starting from mirage-www, I have hacked together basic session =
handling support (session.ml using memorystore.ml), initial login =
framework (login.ml), persistence over baarskeerder (persist.ml =96 just =
a stub, plus idiomatic usage in=85), basic html CRUD interface for admin =
database operations driven by dyntype information (dbforms.ml), and =
multipart form upload support (mime.ml).
> I intend to use javascript for the main UI so I=92ll add a =
dyntype-based RESTful interface next, I think, and tidy up the =
authentication a bit.
> =20
> I=92m developing/testing on Unix/sockets at the moment and this is =
currently hardcoded in places (in persist.ml).
> For Unix you need to create (touch) a file called =932049=94 (used by =
the blkdev) before running it.
> Only built-in account (for access to db forms) is currently =
=93admin=94/=94password=94 :-)
> P.s. most browsers don=92t set/send cookies for domain =93localhost=94 =
(because it has no dots), but they do for =93127.0.0.1=94, so use the =
latter to be able to login.
> =20
> Cheers
> Chris
> =20
>=20
> This message and any attachment are intended solely for the addressee =
and may contain confidential information. If you have received this =
message in error, please send it back to me, and immediately delete it.  =
 Please do not use, copy or disclose the information contained in this =
message or in any attachment.  Any views or opinions expressed by the =
author of this email do not necessarily reflect the views of the =
University of Nottingham.
>=20
> This message has been checked for viruses but the contents of an =
attachment may still contain software viruses which could damage your =
computer system, you are advised to perform your own checks. Email =
communications with the University of Nottingham may be monitored as =
permitted by UK legislation.
>=20


--Apple-Mail=_0C4EA606-CBC8-4D6C-BAAC-6A6D694318F5
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;
	charset=windows-1252

<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html =
charset=3Dwindows-1252"></head><body style=3D"word-wrap: break-word; =
-webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">Very, =
very nice! &nbsp;I particularly like the use of Dyntype for the forms. =
&nbsp;A Dyntype interface to JSON would generally be useful as a =
separate library in fact -- I'm just tidying up a standalone "Cowabloga" =
homepage generator at the moment that provides libraries to the Zurb =
Foundation work.<div><br></div><div>-anil<br><div><div><br><div><div>On =
6 Nov 2013, at 09:04, Christopher Greenhalgh &lt;<a =
href=3D"mailto:Chris.Greenhalgh@nottingham.ac.uk">Chris.Greenhalgh@notting=
ham.ac.uk</a>&gt; wrote:</div><br =
class=3D"Apple-interchange-newline"><blockquote type=3D"cite"><div =
lang=3D"EN-GB" link=3D"blue" vlink=3D"purple" style=3D"font-family: =
Helvetica; font-size: 12px; font-style: normal; font-variant: normal; =
font-weight: normal; letter-spacing: normal; line-height: normal; =
orphans: auto; text-align: start; text-indent: 0px; text-transform: =
none; white-space: normal; widows: auto; word-spacing: 0px; =
-webkit-text-stroke-width: 0px;"><div class=3D"WordSection1" =
style=3D"page: WordSection1;"><div style=3D"margin: 0cm 0cm 0.0001pt; =
font-size: 11pt; font-family: Calibri, sans-serif;">It isn=92t pretty, =
and I=92ll add some interface files and comments at some point, but in =
case anyone else is also trying to do web development in mirage I =
thought I=92d make an early =93announcement=94 of<o:p></o:p></div><div =
style=3D"margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: =
Calibri, sans-serif;"><a =
href=3D"https://github.com/cgreenhalgh/ost-kiosk-manager" style=3D"color: =
purple; text-decoration: =
underline;">https://github.com/cgreenhalgh/ost-kiosk-manager</a><o:p></o:p=
></div><div style=3D"margin: 0cm 0cm 0.0001pt; font-size: 11pt; =
font-family: Calibri, sans-serif;"><o:p>&nbsp;</o:p></div><div =
style=3D"margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: =
Calibri, sans-serif;">So far, starting from mirage-www, I have hacked =
together basic session handling support (session.ml using =
memorystore.ml), initial login framework (login.ml), persistence over =
baarskeerder (persist.ml =96 just a stub, plus idiomatic usage in=85), =
basic html CRUD interface for admin database operations driven by =
dyntype information (dbforms.ml), and multipart form upload support =
(mime.ml).<o:p></o:p></div><div style=3D"margin: 0cm 0cm 0.0001pt; =
font-size: 11pt; font-family: Calibri, sans-serif;">I intend to use =
javascript for the main UI so I=92ll add a dyntype-based RESTful =
interface next, I think, and tidy up the authentication a =
bit.<o:p></o:p></div><div style=3D"margin: 0cm 0cm 0.0001pt; font-size: =
11pt; font-family: Calibri, sans-serif;"><o:p>&nbsp;</o:p></div><div =
style=3D"margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: =
Calibri, sans-serif;">I=92m developing/testing on Unix/sockets at the =
moment and this is currently hardcoded in places (in =
persist.ml).<o:p></o:p></div><div style=3D"margin: 0cm 0cm 0.0001pt; =
font-size: 11pt; font-family: Calibri, sans-serif;">For Unix you need to =
create (touch) a file called =932049=94 (used by the blkdev) before =
running it.<o:p></o:p></div><div style=3D"margin: 0cm 0cm 0.0001pt; =
font-size: 11pt; font-family: Calibri, sans-serif;">Only built-in =
account (for access to db forms) is currently =93admin=94/=94password=94 =
:-)<o:p></o:p></div><div style=3D"margin: 0cm 0cm 0.0001pt; font-size: =
11pt; font-family: Calibri, sans-serif;">P.s. most browsers don=92t =
set/send cookies for domain =93localhost=94 (because it has no dots), =
but they do for =93127.0.0.1=94, so use the latter to be able to =
login.<o:p></o:p></div><div style=3D"margin: 0cm 0cm 0.0001pt; =
font-size: 11pt; font-family: Calibri, =
sans-serif;"><o:p>&nbsp;</o:p></div><div style=3D"margin: 0cm 0cm =
0.0001pt; font-size: 11pt; font-family: Calibri, =
sans-serif;">Cheers<o:p></o:p></div><div style=3D"margin: 0cm 0cm =
0.0001pt; font-size: 11pt; font-family: Calibri, =
sans-serif;">Chris<o:p></o:p></div><div style=3D"margin: 0cm 0cm =
0.0001pt; font-size: 11pt; font-family: Calibri, =
sans-serif;"><o:p>&nbsp;</o:p></div></div><br><p>This message and any =
attachment are intended solely for the addressee and may contain =
confidential information. If you have received this message in error, =
please send it back to me, and immediately delete it.&nbsp;&nbsp; Please =
do not use, copy or disclose the information contained in this message =
or in any attachment.&nbsp; Any views or opinions expressed by the =
author of this email do not necessarily reflect the views of the =
University of Nottingham.</p><p>This message has been checked for =
viruses but the contents of an attachment may still contain software =
viruses which could damage your computer system, you are advised to =
perform your own checks. Email communications with the University of =
Nottingham may be monitored as permitted by UK =
legislation.</p></div></blockquote></div><br></div></div></div></body></ht=
ml>=

--Apple-Mail=_0C4EA606-CBC8-4D6C-BAAC-6A6D694318F5--


From anil@recoil.org Fri Nov 08 01:46:31 2013
Received: from ppsw-42.csi.cam.ac.uk ([131.111.8.142])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1Veb9b-00004f-6g (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Fri, 08 Nov 2013 01:46:31 +0000
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1539273
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:10293
	helo=dark.recoil.org)
	by ppsw-42.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with smtp id 1Veb9a-0007MQ-8R (Exim 4.82_3-c0e5623) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Fri, 08 Nov 2013 01:46:31 +0000
Received: (qmail 9296 invoked by uid 634); 8 Nov 2013 01:46:30 -0000
X-Spam-Level: *
X-Spam-Status: No, hits=-1.0 required=5.0
	tests=ALL_TRUSTED
X-Spam-Check-By: dark.recoil.org
Received: from Unknown (HELO [172.17.134.240]) (207.62.246.30)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Fri, 08 Nov 2013 01:46:29 +0000
Content-Type: text/plain; charset=us-ascii
Mime-Version: 1.0 (Mac OS X Mail 7.0 \(1812\))
Subject: Re: deconstructing OS
From: Anil Madhavapeddy <anil@recoil.org>
In-Reply-To: <2448E7E1-74A8-4BFD-8FC1-EF63F09E7123@recoil.org>
Date: Thu, 7 Nov 2013 17:46:27 -0800
Content-Transfer-Encoding: quoted-printable
Message-Id: <6BE9BB48-D5AE-44EF-A175-96761CF1D72C@recoil.org>
References: <2448E7E1-74A8-4BFD-8FC1-EF63F09E7123@recoil.org>
To: cl-mirage <cl-mirage@lists.cam.ac.uk>
X-Mailer: Apple Mail (2.1812)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Fri, 08 Nov 2013 01:46:31 -0000
Content-Length: 1952
Lines: 48

One important point I forgot to mention: moving these libraries like =
this will remove them from the packed OS namespace and out into the =
toplevel.

This will break code, but I plan to add a mirage-platform/<>/oS.ml that =
will include the toplevel modules, just as the Core(.Std) libraries do. =20=


-anil

On 7 Nov 2013, at 17:21, Anil Madhavapeddy <anil@recoil.org> wrote:

> We've been slowly decomposing the OS module that's built by =
mirage-platform into separate libraries for a while now, but I've taken =
the plunge and created three experimental repositories for 0.9.9:
>=20
> - mirage-types : https://github.com/mirage/mirage-types
>=20
> This contains a single set of module types that build without any =
dependencies.  Right now they contain just IO_PAGE and CLOCK. The =
intention is that they can be satisfied by a specific implementation, so =
an application can functorize over these to be really portable.  It puts =
them all under a V1 module to permit future enhancements.
>=20
> - io-page : https://github.com/mirage/io-page
>=20
> This is the standard io_page from mirage-platform, pulled into a =
separate library.  The lib_test directory has a portability test that =
attempts to cast the module into V1.IO_PAGE (and this did in fact find a =
missing function in the Xen version vs the Unix version).
>=20
> - mirage-clock : https://github.com/mirage/mirage-clock
>=20
> Just the simple clock functions from mirage-platform, against cast =
against V1.CLOCK
>=20
> An important part of these libraries is that they can build =
independently of Mirage-platform, so a normal UNIX app can just go ahead =
and use Io_page without having to ever worry about Xen things.
>=20
> Thoughts?  This split will leave very little in Mirage-platform (just =
the Time and Main modules), along with the runtime libraries, but result =
in more repositories.  I think OPAM mostly takes care of the latter =
problem however...
>=20
> -anil



From anil@recoil.org Fri Nov 08 23:32:08 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VevX6-00076h-An (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Fri, 08 Nov 2013 23:32:08 +0000
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1539273
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:34573
	helo=dark.recoil.org)
	by ppsw-32.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with smtp id 1VevX5-0008Ig-2A (Exim 4.82_3-c0e5623) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Fri, 08 Nov 2013 23:32:08 +0000
Received: (qmail 25789 invoked by uid 634); 8 Nov 2013 23:32:07 -0000
X-Spam-Level: *
X-Spam-Status: No, hits=-1.0 required=5.0
	tests=ALL_TRUSTED
X-Spam-Check-By: dark.recoil.org
Received: from Unknown (HELO [172.17.135.65]) (207.62.246.30)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Fri, 08 Nov 2013 23:32:07 +0000
Content-Type: text/plain; charset=us-ascii
Mime-Version: 1.0 (Mac OS X Mail 7.0 \(1812\))
Subject: Re: deconstructing OS
From: Anil Madhavapeddy <anil@recoil.org>
In-Reply-To: <6BE9BB48-D5AE-44EF-A175-96761CF1D72C@recoil.org>
Date: Fri, 8 Nov 2013 15:32:04 -0800
Content-Transfer-Encoding: quoted-printable
Message-Id: <C56E9545-EA26-46FE-B091-3AEA55289B09@recoil.org>
References: <2448E7E1-74A8-4BFD-8FC1-EF63F09E7123@recoil.org>
	<6BE9BB48-D5AE-44EF-A175-96761CF1D72C@recoil.org>
To: cl-mirage <cl-mirage@lists.cam.ac.uk>
X-Mailer: Apple Mail (2.1812)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Fri, 08 Nov 2013 23:32:08 -0000
Content-Length: 2628
Lines: 68

I've now split up the console code into=20
https://github.com/mirage/mirage-console

which brings us to the next integration task.  The Unix code is =
obviously quite easy to build, but the Xen one requires Gnttab and =
Eventchn. =20

Dave, Jon, there seem to be several of these floating around.  Do you =
have a Gnttab/Eventchn that is suitable to be structured as the =
Console/Clock and have a unix/xen directory with a module type defined?

I can pull one together that's just Xen for now, but thought I would =
check the state of the rest.

-anil

On 7 Nov 2013, at 17:46, Anil Madhavapeddy <anil@recoil.org> wrote:

> One important point I forgot to mention: moving these libraries like =
this will remove them from the packed OS namespace and out into the =
toplevel.
>=20
> This will break code, but I plan to add a mirage-platform/<>/oS.ml =
that will include the toplevel modules, just as the Core(.Std) libraries =
do. =20
>=20
> -anil
>=20
> On 7 Nov 2013, at 17:21, Anil Madhavapeddy <anil@recoil.org> wrote:
>=20
>> We've been slowly decomposing the OS module that's built by =
mirage-platform into separate libraries for a while now, but I've taken =
the plunge and created three experimental repositories for 0.9.9:
>>=20
>> - mirage-types : https://github.com/mirage/mirage-types
>>=20
>> This contains a single set of module types that build without any =
dependencies.  Right now they contain just IO_PAGE and CLOCK. The =
intention is that they can be satisfied by a specific implementation, so =
an application can functorize over these to be really portable.  It puts =
them all under a V1 module to permit future enhancements.
>>=20
>> - io-page : https://github.com/mirage/io-page
>>=20
>> This is the standard io_page from mirage-platform, pulled into a =
separate library.  The lib_test directory has a portability test that =
attempts to cast the module into V1.IO_PAGE (and this did in fact find a =
missing function in the Xen version vs the Unix version).
>>=20
>> - mirage-clock : https://github.com/mirage/mirage-clock
>>=20
>> Just the simple clock functions from mirage-platform, against cast =
against V1.CLOCK
>>=20
>> An important part of these libraries is that they can build =
independently of Mirage-platform, so a normal UNIX app can just go ahead =
and use Io_page without having to ever worry about Xen things.
>>=20
>> Thoughts?  This split will leave very little in Mirage-platform (just =
the Time and Main modules), along with the runtime libraries, but result =
in more repositories.  I think OPAM mostly takes care of the latter =
problem however...
>>=20
>> -anil
>=20
>=20



From Richard.Mortier@nottingham.ac.uk Tue Nov 12 12:18:28 2013
Received: from ppsw-42.csi.cam.ac.uk ([131.111.8.142])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VgCvM-0005FE-Ij (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Richard.Mortier@nottingham.ac.uk>);
	Tue, 12 Nov 2013 12:18:28 +0000
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1540636 
	* 0.0 MIME_QP_LONG_LINE RAW: Quoted-printable line longer than 76 chars
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from engine01-20433-7.icritical.com ([151.236.209.33]:39646)
	by ppsw-42.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with smtp id 1VgCvM-00066s-74 (Exim 4.82_3-c0e5623) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Richard.Mortier@nottingham.ac.uk>);
	Tue, 12 Nov 2013 12:18:28 +0000
Received: (qmail 5694 invoked from network); 12 Nov 2013 12:13:18 -0000
Received: from localhost (127.0.0.1)
	by engine01-20433-7.icritical.com with SMTP; 12 Nov 2013 12:13:18 -0000
Received: from engine01-20433-7.icritical.com ([127.0.0.1])
	by localhost (engine01-20433-7.icritical.com [127.0.0.1]) (amavisd-new,
	port 10024) with SMTP id 04751-09 for <cl-mirage@lists.cam.ac.uk>;
	Tue, 12 Nov 2013 12:13:14 +0000 (GMT)
Received: (qmail 4897 invoked by uid 599); 12 Nov 2013 12:12:27 -0000
Received: from unknown (HELO smtp4.nottingham.ac.uk) (128.243.220.65)
	by engine01-20433-7.icritical.com (qpsmtpd/0.28) with ESMTP;
	Tue, 12 Nov 2013 12:12:27 +0000
Received: from uiwexhub01.ad.nottingham.ac.uk ([128.243.15.133])
	by smtp4.nottingham.ac.uk with esmtps (TLSv1:AES128-SHA:128)
	(Exim 4.77) (envelope-from <Richard.Mortier@nottingham.ac.uk>)
	id 1VgCpN-0003Yt-Vk
	for cl-mirage@lists.cam.ac.uk; Tue, 12 Nov 2013 12:12:18 +0000
From: Richard Mortier <Richard.Mortier@nottingham.ac.uk>
To: Anil Madhavapeddy <anil@recoil.org>
Date: Tue, 12 Nov 2013 12:12:16 +0000
Subject: Re: deconstructing OS
Thread-Topic: deconstructing OS
Thread-Index: Ac7foG3wSdIjJswIS4G1B0Gn+pT05A==
Message-ID: <ACF9ABD5-4892-4D55-B46D-2BD2A61BECE4@nottingham.ac.uk>
References: <2448E7E1-74A8-4BFD-8FC1-EF63F09E7123@recoil.org>
In-Reply-To: <2448E7E1-74A8-4BFD-8FC1-EF63F09E7123@recoil.org>
Accept-Language: en-US, en-GB
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
acceptlanguage: en-US, en-GB
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-Virus-Scanned: by iCritical at engine01-20433-7.icritical.com
Cc: cl-mirage <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 12 Nov 2013 12:18:28 -0000
Content-Length: 1673
Lines: 38

On 8 Nov 2013, at 01:21, Anil Madhavapeddy wrote:

> We've been slowly decomposing the OS module that's built by mirage-platfo=
rm into separate libraries for a while now ... An important part of these l=
ibraries is that they can build independently of Mirage-platform, so a norm=
al UNIX app can just go ahead and use Io_page without having to ever worry =
about Xen things.

cool :)

> Thoughts?  This split will leave very little in Mirage-platform (just the=
 Time and Main modules), along with the runtime libraries, but result in mo=
re repositories.  I think OPAM mostly takes care of the latter problem howe=
ver...

fwiw, i think this is absolutely the right thing to do and agree that OPAM =
should take care of the library management problem.

how pervasively are we going to fragment things?  eg., will Net be fragment=
ed into separate libs per that fine diagram in your CACM paper? =20

--=20
Cheers,

R.




This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please send it back to me, and immediately delete it.   Please do not use, copy or disclose the information contained in this message or in any attachment.  Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham.

This message has been checked for viruses but the contents of an attachment
may still contain software viruses which could damage your computer system, you are advised to perform your own checks. Email communications with the University of Nottingham may be monitored as permitted by UK legislation.






From Chris.Greenhalgh@nottingham.ac.uk Tue Nov 12 14:13:55 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VgEj5-0002va-CR (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Chris.Greenhalgh@nottingham.ac.uk>);
	Tue, 12 Nov 2013 14:13:55 +0000
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1540636 
	* 0.0 MIME_QP_LONG_LINE RAW: Quoted-printable line longer than 76 chars
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from engine03-20433-3.icritical.com ([93.95.15.170]:58971)
	by ppsw-32.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with smtp id 1VgEj4-0003rp-3C (Exim 4.82_3-c0e5623) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Chris.Greenhalgh@nottingham.ac.uk>);
	Tue, 12 Nov 2013 14:13:55 +0000
Received: (qmail 21783 invoked from network); 12 Nov 2013 14:14:33 -0000
Received: from localhost (127.0.0.1)
	by engine03-20433-3.icritical.com with SMTP; 12 Nov 2013 14:14:33 -0000
Received: from engine03-20433-3.icritical.com ([127.0.0.1])
	by localhost (engine03-20433-3.icritical.com [127.0.0.1]) (amavisd-new,
	port 10024) with SMTP id 21761-01 for <cl-mirage@lists.cam.ac.uk>;
	Tue, 12 Nov 2013 14:14:32 +0000 (GMT)
Received: (qmail 20750 invoked by uid 599); 12 Nov 2013 14:12:52 -0000
Received: from unknown (HELO smtp4.nottingham.ac.uk) (128.243.220.65)
	by engine03-20433-3.icritical.com (qpsmtpd/0.28) with ESMTP;
	Tue, 12 Nov 2013 14:12:52 +0000
Received: from uiwexhub02.ad.nottingham.ac.uk ([128.243.15.132])
	by smtp4.nottingham.ac.uk with esmtps (TLSv1:AES128-SHA:128)
	(Exim 4.77) (envelope-from <Chris.Greenhalgh@nottingham.ac.uk>)
	id 1VgEgt-00039x-66; Tue, 12 Nov 2013 14:11:39 +0000
From: Christopher Greenhalgh <Chris.Greenhalgh@nottingham.ac.uk>
To: "anil@recoil.org" <anil@recoil.org>
Date: Tue, 12 Nov 2013 14:11:37 +0000
Subject: Re: cohttp_lwt_mirage.ml / client
Thread-Topic: cohttp_lwt_mirage.ml / client
Thread-Index: AQHO37EZMGhBEXxvqkm9CbvWi6Ve3g==
Message-ID: <4C20415C7327A849961F3B8421413725010CD7D4E0A8@EXCHANGE1.ad.nottingham.ac.uk>
Accept-Language: en-US, en-GB
Content-Language: en-GB
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
acceptlanguage: en-US, en-GB
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-Virus-Scanned: by iCritical at engine03-20433-3.icritical.com
Cc: "chris.greenhalgh@nottingham.ac.uk" <chris.greenhalgh@nottingham.ac.uk>,
	"cl-mirage@lists.cam.ac.uk" <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 12 Nov 2013 14:13:55 -0000
Content-Length: 985
Lines: 16

is there any news on the return of the cohttp client?
I need to start making some HTTP requests from my mirage-based web service.=
..
What is the best ultra-short-term workaround? (i am mostly developing on un=
ix/sockets)
cheers
chris
This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please send it back to me, and immediately delete it.   Please do not use, copy or disclose the information contained in this message or in any attachment.  Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham.

This message has been checked for viruses but the contents of an attachment
may still contain software viruses which could damage your computer system, you are advised to perform your own checks. Email communications with the University of Nottingham may be monitored as permitted by UK legislation.






From scott.dj@gmail.com Tue Nov 12 14:31:00 2013
Received: from ppsw-33.csi.cam.ac.uk ([131.111.8.133])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VgEzc-0003vp-Mh (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <scott.dj@gmail.com>); Tue, 12 Nov 2013 14:31:00 +0000
X-Cam-SpamScore: s
X-Cam-SpamDetails: score 1.3 from SpamAssassin-3.3.2-1540636 
	* -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/,
	no *      trust
	*      [209.85.192.176 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (scott.dj[at]gmail.com)
	*  0.0 DKIM_ADSP_CUSTOM_MED No valid author signature, adsp_override is
	*      CUSTOM_MED
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
	*  1.2 NML_ADSP_CUSTOM_MED ADSP custom_med hit, and not from a mailing
	*      list
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-pd0-f176.google.com ([209.85.192.176]:47688)
	by ppsw-33.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with esmtps (TLSv1:RC4-SHA:128)
	id 1VgEzb-0004md-if (Exim 4.82_3-c0e5623) for cl-mirage@lists.cam.ac.uk
	(return-path <scott.dj@gmail.com>); Tue, 12 Nov 2013 14:31:00 +0000
Received: by mail-pd0-f176.google.com with SMTP id r10so1600910pdi.7
	for <cl-mirage@lists.cam.ac.uk>; Tue, 12 Nov 2013 06:30:58 -0800 (PST)
MIME-Version: 1.0
X-Received: by 10.66.217.166 with SMTP id oz6mr36914122pac.22.1384266658039;
	Tue, 12 Nov 2013 06:30:58 -0800 (PST)
Received: by 10.70.56.36 with HTTP; Tue, 12 Nov 2013 06:30:57 -0800 (PST)
In-Reply-To: <4C20415C7327A849961F3B8421413725010CD7D4E0A8@EXCHANGE1.ad.nottingham.ac.uk>
References: <4C20415C7327A849961F3B8421413725010CD7D4E0A8@EXCHANGE1.ad.nottingham.ac.uk>
Date: Tue, 12 Nov 2013 14:30:57 +0000
Message-ID: <CAG_esB2iLT5jDeTiNj8byz8BMTJL_ebuq_TuP0uLy=PoS0gLiQ@mail.gmail.com>
Subject: Re: cohttp_lwt_mirage.ml / client
From: David Scott <scott.dj@gmail.com>
To: Christopher Greenhalgh <Chris.Greenhalgh@nottingham.ac.uk>
Content-Type: multipart/alternative; boundary=047d7b5d9fa96d4f7404eafbb229
Cc: "cl-mirage@lists.cam.ac.uk" <cl-mirage@lists.cam.ac.uk>,
	"anil@recoil.org" <anil@recoil.org>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 12 Nov 2013 14:31:00 -0000
Content-Length: 4997
Lines: 118

--047d7b5d9fa96d4f7404eafbb229
Content-Type: text/plain; charset=ISO-8859-1

My common pattern is like this:

https://github.com/djs55/vhd-tool/blob/master/src/impl.ml#L592

-- instantiate Request and Response (I'm using a non-standard I/O module
here, but you can use the cohttp mirage module IIRC) and then

      let request = Cohttp.Request.make ~meth:`PUT ~version:`HTTP_1_1
~headers uri' in
      Request.write (fun t _ -> return ()) request c >>= fun () ->
      Response.read (Cohttp_unbuffered_io.make_input c) >>= fun r ->
      begin match r with
      | None -> fail (Failure "Unable to parse HTTP response from server")
      | Some x ->

In the future I'd like a client which can handle a set of open connections
(perhaps growing and shrinking the set according to load and policy) and
which helps me build higher-level APIs on top which can do things like
transparently login after a session times out.



On Tue, Nov 12, 2013 at 2:11 PM, Christopher Greenhalgh <
Chris.Greenhalgh@nottingham.ac.uk> wrote:

> is there any news on the return of the cohttp client?
> I need to start making some HTTP requests from my mirage-based web
> service...
> What is the best ultra-short-term workaround? (i am mostly developing on
> unix/sockets)
> cheers
> chris
> This message and any attachment are intended solely for the addressee and
> may contain confidential information. If you have received this message in
> error, please send it back to me, and immediately delete it.   Please do
> not use, copy or disclose the information contained in this message or in
> any attachment.  Any views or opinions expressed by the author of this
> email do not necessarily reflect the views of the University of Nottingham.
>
> This message has been checked for viruses but the contents of an attachment
> may still contain software viruses which could damage your computer
> system, you are advised to perform your own checks. Email communications
> with the University of Nottingham may be monitored as permitted by UK
> legislation.
>
>
>
>
>
>


-- 
Dave Scott

--047d7b5d9fa96d4f7404eafbb229
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">My common pattern is like this:<div><br></div><div><a href=
=3D"https://github.com/djs55/vhd-tool/blob/master/src/impl.ml#L592">https:/=
/github.com/djs55/vhd-tool/blob/master/src/impl.ml#L592</a><br></div><div><=
br>
</div><div>-- instantiate Request and Response (I&#39;m using a non-standar=
d I/O module here, but you can use the cohttp mirage module IIRC) and then=
=A0</div><div><br></div><div><div>=A0 =A0 =A0 let request =3D Cohttp.Reques=
t.make ~meth:`PUT ~version:`HTTP_1_1 ~headers uri&#39; in</div>
<div>=A0 =A0 =A0 Request.write (fun t _ -&gt; return ()) request c &gt;&gt;=
=3D fun () -&gt;</div><div>=A0 =A0 =A0 Response.read (Cohttp_unbuffered_io.=
make_input c) &gt;&gt;=3D fun r -&gt;</div><div>=A0 =A0 =A0 begin match r w=
ith</div><div>=A0 =A0 =A0 | None -&gt; fail (Failure &quot;Unable to parse =
HTTP response from server&quot;)</div>
<div>=A0 =A0 =A0 | Some x -&gt;</div></div><div><br></div><div>In the futur=
e I&#39;d like a client which can handle a set of open connections (perhaps=
 growing and shrinking the set according to load and policy) and which help=
s me build higher-level APIs on top which can do things like transparently =
login after a session times out.</div>
<div><br></div></div><div class=3D"gmail_extra"><br><br><div class=3D"gmail=
_quote">On Tue, Nov 12, 2013 at 2:11 PM, Christopher Greenhalgh <span dir=
=3D"ltr">&lt;<a href=3D"mailto:Chris.Greenhalgh@nottingham.ac.uk" target=3D=
"_blank">Chris.Greenhalgh@nottingham.ac.uk</a>&gt;</span> wrote:<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex">is there any news on the return of the cohtt=
p client?<br>
I need to start making some HTTP requests from my mirage-based web service.=
..<br>
What is the best ultra-short-term workaround? (i am mostly developing on un=
ix/sockets)<br>
cheers<br>
chris<br>
This message and any attachment are intended solely for the addressee and m=
ay contain confidential information. If you have received this message in e=
rror, please send it back to me, and immediately delete it. =A0 Please do n=
ot use, copy or disclose the information contained in this message or in an=
y attachment. =A0Any views or opinions expressed by the author of this emai=
l do not necessarily reflect the views of the University of Nottingham.<br>

<br>
This message has been checked for viruses but the contents of an attachment=
<br>
may still contain software viruses which could damage your computer system,=
 you are advised to perform your own checks. Email communications with the =
University of Nottingham may be monitored as permitted by UK legislation.<b=
r>

<br>
<br>
<br>
<br>
<br>
</blockquote></div><br><br clear=3D"all"><div><br></div>-- <br>Dave Scott
</div>

--047d7b5d9fa96d4f7404eafbb229--


From thomas.gazagnaire@gmail.com Tue Nov 12 14:36:01 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VgF4T-0004Oj-0J (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <thomas.gazagnaire@gmail.com>);
	Tue, 12 Nov 2013 14:36:01 +0000
X-Cam-SpamDetails: score 0.6 from SpamAssassin-3.3.2-1540636 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.212.182 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (thomas.gazagnaire[at]gmail.com)
	*  0.0 DKIM_ADSP_CUSTOM_MED No valid author signature, adsp_override is
	*      CUSTOM_MED
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
	*  1.2 NML_ADSP_CUSTOM_MED ADSP custom_med hit, and not from a mailing
	*      list
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-wi0-f182.google.com ([209.85.212.182]:42108)
	by ppsw-32.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with esmtps (TLSv1:RC4-SHA:128)
	id 1VgF4S-0006dW-1N (Exim 4.82_3-c0e5623) for cl-mirage@lists.cam.ac.uk
	(return-path <thomas.gazagnaire@gmail.com>);
	Tue, 12 Nov 2013 14:36:00 +0000
Received: by mail-wi0-f182.google.com with SMTP id ez12so3799274wid.3
	for <cl-mirage@lists.cam.ac.uk>; Tue, 12 Nov 2013 06:36:00 -0800 (PST)
X-Received: by 10.180.231.38 with SMTP id td6mr16748894wic.61.1384266960044;
	Tue, 12 Nov 2013 06:36:00 -0800 (PST)
Received: from piana.mac.cl.cam.ac.uk (piana.mac.cl.cam.ac.uk. [128.232.56.38])
	by mx.google.com with ESMTPSA id
	ey4sm45276040wic.11.2013.11.12.06.35.59 for <multiple recipients>
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Tue, 12 Nov 2013 06:35:59 -0800 (PST)
Content-Type: text/plain; charset=windows-1252
Mime-Version: 1.0 (Mac OS X Mail 7.0 \(1822\))
Subject: Re: cohttp_lwt_mirage.ml / client
From: Thomas Gazagnaire <thomas.gazagnaire@gmail.com>
In-Reply-To: <CAG_esB2iLT5jDeTiNj8byz8BMTJL_ebuq_TuP0uLy=PoS0gLiQ@mail.gmail.com>
Date: Tue, 12 Nov 2013 14:35:57 +0000
Content-Transfer-Encoding: quoted-printable
Message-Id: <2CDA0BB1-376A-495E-A50A-53323DB8C1D2@gmail.com>
References: <4C20415C7327A849961F3B8421413725010CD7D4E0A8@EXCHANGE1.ad.nottingham.ac.uk>
	<CAG_esB2iLT5jDeTiNj8byz8BMTJL_ebuq_TuP0uLy=PoS0gLiQ@mail.gmail.com>
To: David Scott <scott.dj@gmail.com>
X-Mailer: Apple Mail (2.1822)
Cc: Christopher Greenhalgh <Chris.Greenhalgh@nottingham.ac.uk>,
	Mirage List <cl-mirage@lists.cam.ac.uk>,
	Anil Madhavapeddy <anil@recoil.org>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 12 Nov 2013 14:36:01 -0000
Content-Length: 2396
Lines: 66

Just a side note: I=92ve got client hanging issues with cohttp.0.9.11 on =
unix sockets. Not totally sure how to fix it yet (apart from downgrading =
to 0.9.10). Haven=92t checked if the problem is there with lwt_mirage.

Thomas

On 12 Nov 2013, at 14:30, David Scott <scott.dj@gmail.com> wrote:

> My common pattern is like this:
>=20
> https://github.com/djs55/vhd-tool/blob/master/src/impl.ml#L592
>=20
> -- instantiate Request and Response (I'm using a non-standard I/O =
module here, but you can use the cohttp mirage module IIRC) and then=20
>=20
>       let request =3D Cohttp.Request.make ~meth:`PUT =
~version:`HTTP_1_1 ~headers uri' in
>       Request.write (fun t _ -> return ()) request c >>=3D fun () ->
>       Response.read (Cohttp_unbuffered_io.make_input c) >>=3D fun r ->
>       begin match r with
>       | None -> fail (Failure "Unable to parse HTTP response from =
server")
>       | Some x ->
>=20
> In the future I'd like a client which can handle a set of open =
connections (perhaps growing and shrinking the set according to load and =
policy) and which helps me build higher-level APIs on top which can do =
things like transparently login after a session times out.
>=20
>=20
>=20
> On Tue, Nov 12, 2013 at 2:11 PM, Christopher Greenhalgh =
<Chris.Greenhalgh@nottingham.ac.uk> wrote:
> is there any news on the return of the cohttp client?
> I need to start making some HTTP requests from my mirage-based web =
service...
> What is the best ultra-short-term workaround? (i am mostly developing =
on unix/sockets)
> cheers
> chris
> This message and any attachment are intended solely for the addressee =
and may contain confidential information. If you have received this =
message in error, please send it back to me, and immediately delete it.  =
 Please do not use, copy or disclose the information contained in this =
message or in any attachment.  Any views or opinions expressed by the =
author of this email do not necessarily reflect the views of the =
University of Nottingham.
>=20
> This message has been checked for viruses but the contents of an =
attachment
> may still contain software viruses which could damage your computer =
system, you are advised to perform your own checks. Email communications =
with the University of Nottingham may be monitored as permitted by UK =
legislation.
>=20
>=20
>=20
>=20
>=20
>=20
>=20
>=20
> --=20
> Dave Scott



From lars.kurth.xen@gmail.com Tue Nov 12 15:12:01 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VgFdJ-0006ZJ-OL (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk (return-path <lars.kurth.xen@gmail.com>);
	Tue, 12 Nov 2013 15:12:01 +0000
X-Cam-SpamDetails: score -0.6 from SpamAssassin-3.3.2-1540636 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [74.125.82.44 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (lars.kurth.xen[at]gmail.com)
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-wg0-f44.google.com ([74.125.82.44]:36677)
	by ppsw-52.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with esmtps (TLSv1:RC4-SHA:128)
	id 1VgFdI-0005Yr-G4 (Exim 4.82_3-c0e5623) for cl-mirage@lists.cam.ac.uk
	(return-path <lars.kurth.xen@gmail.com>);
	Tue, 12 Nov 2013 15:12:01 +0000
Received: by mail-wg0-f44.google.com with SMTP id k14so4389461wgh.11
	for <cl-mirage@lists.cam.ac.uk>; Tue, 12 Nov 2013 07:12:00 -0800 (PST)
X-Received: by 10.180.36.80 with SMTP id o16mr16898111wij.1.1384269120625;
	Tue, 12 Nov 2013 07:12:00 -0800 (PST)
Received: from [172.16.25.10] ([2.122.219.75]) by mx.google.com with ESMTPSA id
	ll10sm45491469wic.9.2013.11.12.07.11.59 for <multiple recipients>
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Tue, 12 Nov 2013 07:11:59 -0800 (PST)
Sender: Lars Kurth <lars.kurth.xen@gmail.com>
Message-ID: <5282453E.4050302@xen.org>
Date: Tue, 12 Nov 2013 15:11:58 +0000
From: Lars Kurth <lars.kurth@xen.org>
User-Agent: Mozilla/5.0 (Windows NT 6.1;
	rv:24.0) Gecko/20100101 Thunderbird/24.1.0
MIME-Version: 1.0
To: xen-devel@devel.xen.org, "xen-api@lists.xen.org" <xen-api@lists.xen.org>,
	"cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>, 
	xs-devel@lists.xenserver.org
Subject: Xen Project Developer Summit Presentations and Videos and Bof Notes
Content-Type: multipart/alternative;
	boundary="------------070607090107000706090400"
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
Reply-To: lars.kurth@xen.org
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 12 Nov 2013 15:12:01 -0000
Content-Length: 1760
Lines: 45

This is a multi-part message in MIME format.
--------------070607090107000706090400
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Seehttp://xenproject.org/component/content/article/9-uncategorised/159-xen-project-developer-summit-2013-videos-and-presentations.html

I am missing a few presentations and BoF Notes. If any of the speakers / 
BoF hosts can point me to the right place for the presentations or BoF 
notes, I would be grateful. I will be chasing the individuals in 
question in a few days. There is one video missing : the video output 
was not captured - it will take a few extra days to get this missing 
video together.

Best Regards
Lars

--------------070607090107000706090400
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    See<a
href="http://xenproject.org/component/content/article/9-uncategorised/159-xen-project-developer-summit-2013-videos-and-presentations.html">
http://xenproject.org/component/content/article/9-uncategorised/159-xen-project-developer-summit-2013-videos-and-presentations.html</a><br>
    <br>
    I am missing a few presentations and BoF Notes. If any of the
    speakers / BoF hosts can point me to the right place for the
    presentations or BoF notes, I would be grateful. I will be chasing
    the individuals in question in a few days. There is one video
    missing : the video output was not captured - it will take a few
    extra days to get this missing video together.<br>
    <br>
    Best Regards<br>
    Lars <br>
  </body>
</html>

--------------070607090107000706090400--


From lars.kurth.xen@gmail.com Thu Nov 14 13:04:57 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VgwbR-0002KB-PR (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk (return-path <lars.kurth.xen@gmail.com>);
	Thu, 14 Nov 2013 13:04:57 +0000
X-Cam-SpamDetails: score -0.6 from SpamAssassin-3.3.2-1541424 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [74.125.82.52 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (lars.kurth.xen[at]gmail.com)
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-wg0-f52.google.com ([74.125.82.52]:33577)
	by ppsw-52.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with esmtps (TLSv1:RC4-SHA:128)
	id 1VgwbR-00087h-DC (Exim 4.82_3-c0e5623) for cl-mirage@lists.cam.ac.uk
	(return-path <lars.kurth.xen@gmail.com>);
	Thu, 14 Nov 2013 13:04:57 +0000
Received: by mail-wg0-f52.google.com with SMTP id z12so1888158wgg.31
	for <cl-mirage@lists.cam.ac.uk>; Thu, 14 Nov 2013 05:04:56 -0800 (PST)
X-Received: by 10.194.20.230 with SMTP id q6mr1593722wje.49.1384434296780;
	Thu, 14 Nov 2013 05:04:56 -0800 (PST)
Received: from [172.16.25.10] ([2.122.219.75])
	by mx.google.com with ESMTPSA id e1sm65951278wij.6.2013.11.14.05.04.55
	for <multiple recipients>
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Thu, 14 Nov 2013 05:04:55 -0800 (PST)
Sender: Lars Kurth <lars.kurth.xen@gmail.com>
Message-ID: <5284CA76.4070106@xen.org>
Date: Thu, 14 Nov 2013 13:04:54 +0000
From: Lars Kurth <lars.kurth@xen.org>
User-Agent: Mozilla/5.0 (Windows NT 6.1;
	rv:24.0) Gecko/20100101 Thunderbird/24.1.0
MIME-Version: 1.0
To: xs-devel@lists.xenserver.org, 
	"xen-devel@lists.xen.org" <xen-devel@lists.xen.org>,
	"xen-api@lists.xen.org" <xen-api@lists.xen.org>, 
	"cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>
Subject: Xen Project Developer Summit Presentations and Videos (now working)
Content-Type: multipart/alternative;
	boundary="------------050708050101010609080107"
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
Reply-To: lars.kurth@xen.org
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Thu, 14 Nov 2013 13:04:57 -0000
Content-Length: 2900
Lines: 75

This is a multi-part message in MIME format.
--------------050708050101010609080107
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Hi all,

sorry for the difficulties with the videos yesterday. This was caused by 
the videographer re-doing all the videos without telling anyone (as the 
wrong logo was used) and apparently in youtube it is not possible to 
re-upload a video. I also bulk-uploaded some missing presentations to 
slideshare now and all should by now be accessible (with bulk-upload 
they are private until processing has completed).

There are several places where you can get to these:

  * http://xenproject.org/component/content/article/9-uncategorised/159-xen-project-developer-summit-2013-videos-and-presentations.html

  * http://xenproject.org/help/presentations-and-videos.html
  * http://www.youtube.com/user/TheLinuxFoundation/videos?sort=dd&view=0&shelf_id=5

I think I tested everything, but If you still notice issues with your 
presentations, do let me know. Feel free to promote your stuff on 
twitter, G+, LinkedIn, etc.

Regards
Lars




--------------050708050101010609080107
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    Hi all,<br>
    <br>
    sorry for the difficulties with the videos yesterday. This was
    caused by the videographer re-doing all the videos without telling
    anyone (as the wrong logo was used) and apparently in youtube it is
    not possible to re-upload a video. I also bulk-uploaded some missing
    presentations to slideshare now and all should by now be accessible
    (with bulk-upload they are private until processing has completed).<br>
    <br>
    There are several places where you can get to these:<br>
    <ul>
      <li><a
href="http://xenproject.org/component/content/article/9-uncategorised/159-xen-project-developer-summit-2013-videos-and-presentations.html">http://xenproject.org/component/content/article/9-uncategorised/159-xen-project-developer-summit-2013-videos-and-presentations.html</a>
        <br>
      </li>
      <li><a
          href="http://xenproject.org/help/presentations-and-videos.html">http://xenproject.org/help/presentations-and-videos.html</a></li>
      <li><a
href="http://www.youtube.com/user/TheLinuxFoundation/videos?sort=dd&amp;view=0&amp;shelf_id=5">http://www.youtube.com/user/TheLinuxFoundation/videos?sort=dd&amp;view=0&amp;shelf_id=5</a></li>
    </ul>
    I think I tested everything, but If you still notice issues with
    your presentations, do let me know. Feel free to promote your stuff
    on twitter, G+, LinkedIn, etc.<br>
    <br>
    Regards<br>
    Lars<br>
    <br>
    <br>
    <br>
  </body>
</html>

--------------050708050101010609080107--


From Chris.Greenhalgh@nottingham.ac.uk Mon Nov 18 09:22:29 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1ViL2L-0007HA-B1 (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Chris.Greenhalgh@nottingham.ac.uk>);
	Mon, 18 Nov 2013 09:22:29 +0000
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1542661 
	*  0.0 HTML_MESSAGE BODY: HTML included in message
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from engine03-20433-10.icritical.com ([93.159.202.53]:37301)
	by ppsw-52.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with smtp id 1ViL2K-00072O-Dd (Exim 4.82_3-c0e5623) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Chris.Greenhalgh@nottingham.ac.uk>);
	Mon, 18 Nov 2013 09:22:29 +0000
Received: (qmail 6280 invoked from network); 18 Nov 2013 09:22:23 -0000
Received: from localhost (127.0.0.1)
	by engine03-20433-10.icritical.com with SMTP; 18 Nov 2013 09:22:23 -0000
Received: from engine03-20433-10.icritical.com ([127.0.0.1])
	by localhost (engine03-20433-10.icritical.com [127.0.0.1]) (amavisd-new,
	port 10024) with SMTP id 06229-03 for <cl-mirage@lists.cam.ac.uk>;
	Mon, 18 Nov 2013 09:22:22 +0000 (GMT)
Received: (qmail 5931 invoked by uid 599); 18 Nov 2013 09:21:49 -0000
Received: from unknown (HELO smtp4.nottingham.ac.uk) (128.243.220.65)
	by engine03-20433-10.icritical.com (qpsmtpd/0.28) with ESMTP;
	Mon, 18 Nov 2013 09:21:49 +0000
Received: from uiwexhub02.ad.nottingham.ac.uk ([128.243.15.132])
	by smtp4.nottingham.ac.uk with esmtps (TLSv1:AES128-SHA:128)
	(Exim 4.77) (envelope-from <Chris.Greenhalgh@nottingham.ac.uk>)
	id 1ViL1k-0003bK-8C; Mon, 18 Nov 2013 09:21:52 +0000
From: Christopher Greenhalgh <Chris.Greenhalgh@nottingham.ac.uk>
To: "cl-mirage@lists.cam.ac.uk" <cl-mirage@lists.cam.ac.uk>
Date: Mon, 18 Nov 2013 09:21:51 +0000
Subject: RE: cohttp_lwt_mirage.ml / client
Thread-Topic: cohttp_lwt_mirage.ml / client
Thread-Index: Ac7fs9mEIaINEosmR9uMFFOfBeXPKQEi3wpQ
Message-ID: <4C20415C7327A849961F3B8421413725010CD7CBC616@EXCHANGE1.ad.nottingham.ac.uk>
References: <4C20415C7327A849961F3B8421413725010CD7D4E0A8@EXCHANGE1.ad.nottingham.ac.uk>
	<CAG_esB2iLT5jDeTiNj8byz8BMTJL_ebuq_TuP0uLy=PoS0gLiQ@mail.gmail.com>
In-Reply-To: <CAG_esB2iLT5jDeTiNj8byz8BMTJL_ebuq_TuP0uLy=PoS0gLiQ@mail.gmail.com>
Accept-Language: en-US, en-GB
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
acceptlanguage: en-US, en-GB
Content-Type: multipart/alternative;
	boundary="_000_4C20415C7327A849961F3B8421413725010CD7CBC616EXCHANGE1ad_"
MIME-Version: 1.0
X-Virus-Scanned: by iCritical at engine03-20433-10.icritical.com
Cc: Christopher Greenhalgh <Chris.Greenhalgh@nottingham.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Mon, 18 Nov 2013 09:22:29 -0000
Content-Length: 11544
Lines: 229

--_000_4C20415C7327A849961F3B8421413725010CD7CBC616EXCHANGE1ad_
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Thanks, Dave.
Unfortunately it turns out it is a HTTPS-only API (and I should also be usi=
ng https for my server for a "real" deployment) so
can someone comment on the status/timeline of https support, client and ser=
ver?

Cheers
Chris


From: cl-mirage-bounces@lists.cam.ac.uk [mailto:cl-mirage-bounces@lists.cam=
.ac.uk] On Behalf Of David Scott
Sent: 12 November 2013 14:31
To: Christopher Greenhalgh
Cc: cl-mirage@lists.cam.ac.uk; anil@recoil.org
Subject: Re: cohttp_lwt_mirage.ml / client

My common pattern is like this:

https://github.com/djs55/vhd-tool/blob/master/src/impl.ml#L592

-- instantiate Request and Response (I'm using a non-standard I/O module he=
re, but you can use the cohttp mirage module IIRC) and then

      let request =3D Cohttp.Request.make ~meth:`PUT ~version:`HTTP_1_1 ~he=
aders uri' in
      Request.write (fun t _ -> return ()) request c >>=3D fun () ->
      Response.read (Cohttp_unbuffered_io.make_input c) >>=3D fun r ->
      begin match r with
      | None -> fail (Failure "Unable to parse HTTP response from server")
      | Some x ->

In the future I'd like a client which can handle a set of open connections =
(perhaps growing and shrinking the set according to load and policy) and wh=
ich helps me build higher-level APIs on top which can do things like transp=
arently login after a session times out.


On Tue, Nov 12, 2013 at 2:11 PM, Christopher Greenhalgh <Chris.Greenhalgh@n=
ottingham.ac.uk<mailto:Chris.Greenhalgh@nottingham.ac.uk>> wrote:
is there any news on the return of the cohttp client?
I need to start making some HTTP requests from my mirage-based web service.=
..
What is the best ultra-short-term workaround? (i am mostly developing on un=
ix/sockets)
cheers
chris
This message and any attachment are intended solely for the addressee and m=
ay contain confidential information. If you have received this message in e=
rror, please send it back to me, and immediately delete it.   Please do not=
 use, copy or disclose the information contained in this message or in any =
attachment.  Any views or opinions expressed by the author of this email do=
 not necessarily reflect the views of the University of Nottingham.

This message has been checked for viruses but the contents of an attachment
may still contain software viruses which could damage your computer system,=
 you are advised to perform your own checks. Email communications with the =
University of Nottingham may be monitored as permitted by UK legislation.







--
Dave Scott

This message and any attachment are intended solely for the addressee and m=
ay contain confidential information. If you have received this message in er=
ror, please send it back to me, and immediately delete it.   Please do not u=
se, copy or disclose the information contained in this message or in any att=
achment.  Any views or opinions expressed by the author of this email do not=
 necessarily reflect the views of the University of Nottingham.=0D=0A
=0D=0A
This message has been checked for viruses but the contents of an attachment=
=0D=0A
may still contain software viruses which could damage your computer system,=
 you are advised to perform your own checks. Email communications with the U=
niversity of Nottingham may be monitored as permitted by UK legislation.=0D=0A
=0D=0A
=0D=0A
=0D=0A
=0D=0A

--_000_4C20415C7327A849961F3B8421413725010CD7CBC616EXCHANGE1ad_
Content-Type: text/html; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<html xmlns:v=3D"urn:schemas-microsoft-com:vml" xmlns:o=3D"urn:schemas-micr=
osoft-com:office:office" xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" xmlns=3D"http:=
//www.w3.org/TR/REC-html40"><head><META HTTP-EQUIV=3D"Content-Type" CONTENT=
=3D"text/html; charset=3Dus-ascii"><meta name=3DGenerator content=3D"Micros=
oft Word 12 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
	{font-family:Tahoma;
	panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0cm;
	margin-bottom:.0001pt;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-priority:99;
	color:purple;
	text-decoration:underline;}
span.EmailStyle17
	{mso-style-type:personal-reply;
	font-family:"Calibri","sans-serif";
	color:#1F497D;}
.MsoChpDefault
	{mso-style-type:export-only;}
@page WordSection1
	{size:612.0pt 792.0pt;
	margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
	{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1" />
</o:shapelayout></xml><![endif]--></head><body lang=3DEN-GB link=3Dblue vli=
nk=3Dpurple><div class=3DWordSection1><p class=3DMsoNormal><span style=3D'f=
ont-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Thanks, D=
ave.<o:p></o:p></span></p><p class=3DMsoNormal><span style=3D'font-size:11.=
0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Unfortunately it turn=
s out it is a HTTPS-only API (and I should also be using https for my serve=
r for a &#8220;real&#8221; deployment) so <o:p></o:p></span></p><p class=3D=
MsoNormal><span style=3D'font-size:11.0pt;font-family:"Calibri","sans-serif=
";color:#1F497D'>can someone comment on the status/timeline of https suppor=
t, client and server?<o:p></o:p></span></p><p class=3DMsoNormal><span style=
=3D'font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p=
>&nbsp;</o:p></span></p><p class=3DMsoNormal><span style=3D'font-size:11.0p=
t;font-family:"Calibri","sans-serif";color:#1F497D'>Cheers<o:p></o:p></span=
></p><p class=3DMsoNormal><span style=3D'font-size:11.0pt;font-family:"Cali=
bri","sans-serif";color:#1F497D'>Chris<o:p></o:p></span></p><p class=3DMsoN=
ormal><span style=3D'font-size:11.0pt;font-family:"Calibri","sans-serif";co=
lor:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=3DMsoNormal><span style=
=3D'font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p=
>&nbsp;</o:p></span></p><div style=3D'border:none;border-top:solid #B5C4DF =
1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=3DMsoNormal><b><span lang=3DEN-US=
 style=3D'font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span><=
/b><span lang=3DEN-US style=3D'font-size:10.0pt;font-family:"Tahoma","sans-=
serif"'> cl-mirage-bounces@lists.cam.ac.uk [mailto:cl-mirage-bounces@lists.=
cam.ac.uk] <b>On Behalf Of </b>David Scott<br><b>Sent:</b> 12 November 2013=
 14:31<br><b>To:</b> Christopher Greenhalgh<br><b>Cc:</b> cl-mirage@lists.c=
am.ac.uk; anil@recoil.org<br><b>Subject:</b> Re: cohttp_lwt_mirage.ml / cli=
ent<o:p></o:p></span></p></div><p class=3DMsoNormal><o:p>&nbsp;</o:p></p><d=
iv><p class=3DMsoNormal>My common pattern is like this:<o:p></o:p></p><div>=
<p class=3DMsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=3DMsoNormal><=
a href=3D"https://github.com/djs55/vhd-tool/blob/master/src/impl.ml#L592">h=
ttps://github.com/djs55/vhd-tool/blob/master/src/impl.ml#L592</a><o:p></o:p=
></p></div><div><p class=3DMsoNormal><o:p>&nbsp;</o:p></p></div><div><p cla=
ss=3DMsoNormal>-- instantiate Request and Response (I'm using a non-standar=
d I/O module here, but you can use the cohttp mirage module IIRC) and then&=
nbsp;<o:p></o:p></p></div><div><p class=3DMsoNormal><o:p>&nbsp;</o:p></p></=
div><div><div><p class=3DMsoNormal>&nbsp; &nbsp; &nbsp; let request =3D Coh=
ttp.Request.make ~meth:`PUT ~version:`HTTP_1_1 ~headers uri' in<o:p></o:p><=
/p></div><div><p class=3DMsoNormal>&nbsp; &nbsp; &nbsp; Request.write (fun =
t _ -&gt; return ()) request c &gt;&gt;=3D fun () -&gt;<o:p></o:p></p></div=
><div><p class=3DMsoNormal>&nbsp; &nbsp; &nbsp; Response.read (Cohttp_unbuf=
fered_io.make_input c) &gt;&gt;=3D fun r -&gt;<o:p></o:p></p></div><div><p =
class=3DMsoNormal>&nbsp; &nbsp; &nbsp; begin match r with<o:p></o:p></p></d=
iv><div><p class=3DMsoNormal>&nbsp; &nbsp; &nbsp; | None -&gt; fail (Failur=
e &quot;Unable to parse HTTP response from server&quot;)<o:p></o:p></p></di=
v><div><p class=3DMsoNormal>&nbsp; &nbsp; &nbsp; | Some x -&gt;<o:p></o:p><=
/p></div></div><div><p class=3DMsoNormal><o:p>&nbsp;</o:p></p></div><div><p=
 class=3DMsoNormal>In the future I'd like a client which can handle a set o=
f open connections (perhaps growing and shrinking the set according to load=
 and policy) and which helps me build higher-level APIs on top which can do=
 things like transparently login after a session times out.<o:p></o:p></p><=
/div><div><p class=3DMsoNormal><o:p>&nbsp;</o:p></p></div></div><div><p cla=
ss=3DMsoNormal style=3D'margin-bottom:12.0pt'><o:p>&nbsp;</o:p></p><div><p =
class=3DMsoNormal>On Tue, Nov 12, 2013 at 2:11 PM, Christopher Greenhalgh &=
lt;<a href=3D"mailto:Chris.Greenhalgh@nottingham.ac.uk" target=3D"_blank">C=
hris.Greenhalgh@nottingham.ac.uk</a>&gt; wrote:<o:p></o:p></p><p class=3DMs=
oNormal style=3D'margin-bottom:12.0pt'>is there any news on the return of t=
he cohttp client?<br>I need to start making some HTTP requests from my mira=
ge-based web service...<br>What is the best ultra-short-term workaround? (i=
 am mostly developing on unix/sockets)<br>cheers<br>chris<br>This message a=
nd any attachment are intended solely for the addressee and may contain con=
fidential information. If you have received this message in error, please s=
end it back to me, and immediately delete it. &nbsp; Please do not use, cop=
y or disclose the information contained in this message or in any attachmen=
t. &nbsp;Any views or opinions expressed by the author of this email do not=
 necessarily reflect the views of the University of Nottingham.<br><br>This=
 message has been checked for viruses but the contents of an attachment<br>=
may still contain software viruses which could damage your computer system,=
 you are advised to perform your own checks. Email communications with the =
University of Nottingham may be monitored as permitted by UK legislation.<b=
r><br><br><br><br><o:p></o:p></p></div><p class=3DMsoNormal><br><br clear=
=3Dall><o:p></o:p></p><div><p class=3DMsoNormal><o:p>&nbsp;</o:p></p></div>=
<p class=3DMsoNormal>-- <br>Dave Scott <o:p></o:p></p></div></div>
<br>=
<p>This message and any attachment are intended solely for the addressee an=
d may contain confidential information. If you have received this message in=
 error, please send it back to me, and immediately delete it.&nbsp;&nbsp; Pl=
ease do not use, copy or disclose the information contained in this message =
or in any attachment.&nbsp; Any views or opinions expressed by the author of=
 this email do not necessarily reflect the views of the University of Nottin=
gham.</p><p>This message has been checked for viruses but the contents of an=
 attachment may still contain software viruses which could damage your compu=
ter system, you are advised to perform your own checks. Email communications=
 with the University of Nottingham may be monitored as permitted by UK legis=
lation.</p>
<br>=
</body></=
html>=

--_000_4C20415C7327A849961F3B8421413725010CD7CBC616EXCHANGE1ad_--


From anil@recoil.org Mon Nov 18 16:02:48 2013
Received: from ppsw-33.csi.cam.ac.uk ([131.111.8.133])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1ViRHk-0005uQ-1c (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Mon, 18 Nov 2013 16:02:48 +0000
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1542661 
	*  0.0 HTML_MESSAGE BODY: HTML included in message
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:22785
	helo=dark.recoil.org)
	by ppsw-33.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with smtp id 1ViRHj-0004DF-gC (Exim 4.82_3-c0e5623) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Mon, 18 Nov 2013 16:02:48 +0000
Received: (qmail 10019 invoked by uid 634); 18 Nov 2013 16:02:46 -0000
X-Spam-Level: *
X-Spam-Status: No, hits=-1.0 required=5.0
	tests=ALL_TRUSTED,HTML_MESSAGE
X-Spam-Check-By: dark.recoil.org
Received: from 30.sub-70-197-89.myvzw.com (HELO [192.168.1.22]) (70.197.89.30)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Mon, 18 Nov 2013 16:02:44 +0000
Content-Type: multipart/alternative;
	boundary="Apple-Mail=_DAE1AD43-1634-4EB8-9D62-827151C1EA97"
Mime-Version: 1.0 (Mac OS X Mail 7.0 \(1812\))
Subject: Re: cohttp_lwt_mirage.ml / client
From: Anil Madhavapeddy <anil@recoil.org>
In-Reply-To: <4C20415C7327A849961F3B8421413725010CD7CBC616@EXCHANGE1.ad.nottingham.ac.uk>
Date: Mon, 18 Nov 2013 08:02:36 -0800
Message-Id: <884EED7A-B2FB-4244-89F4-94E7269794D8@recoil.org>
References: <4C20415C7327A849961F3B8421413725010CD7D4E0A8@EXCHANGE1.ad.nottingham.ac.uk>
	<CAG_esB2iLT5jDeTiNj8byz8BMTJL_ebuq_TuP0uLy=PoS0gLiQ@mail.gmail.com>
	<4C20415C7327A849961F3B8421413725010CD7CBC616@EXCHANGE1.ad.nottingham.ac.uk>
To: Christopher Greenhalgh <Chris.Greenhalgh@nottingham.ac.uk>
X-Mailer: Apple Mail (2.1812)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
Cc: "cl-mirage@lists.cam.ac.uk" <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Mon, 18 Nov 2013 16:02:48 -0000
Content-Length: 15302
Lines: 283


--Apple-Mail=_DAE1AD43-1634-4EB8-9D62-827151C1EA97
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=windows-1252

I have the exact same problem for the GitHub client API too.  As a =
short-term fix, we could bind an embedded SSL library, and as a =
medium-term action, wait for ctypes stub generation to make this easier.

Jon: do you have the sources to the SSL library you did bindings too at =
that Yahoo event we were at?  I'm back in Cambridge and resuming work on =
mirage-platform on Wednesday, so I can look at SSL in the Xen backend at =
the same time.

-anil

On 18 Nov 2013, at 01:21, Christopher Greenhalgh =
<Chris.Greenhalgh@nottingham.ac.uk> wrote:

> Thanks, Dave.
> Unfortunately it turns out it is a HTTPS-only API (and I should also =
be using https for my server for a =93real=94 deployment) so
> can someone comment on the status/timeline of https support, client =
and server?
> =20
> Cheers
> Chris
> =20
> =20
> From: cl-mirage-bounces@lists.cam.ac.uk =
[mailto:cl-mirage-bounces@lists.cam.ac.uk] On Behalf Of David Scott
> Sent: 12 November 2013 14:31
> To: Christopher Greenhalgh
> Cc: cl-mirage@lists.cam.ac.uk; anil@recoil.org
> Subject: Re: cohttp_lwt_mirage.ml / client
> =20
> My common pattern is like this:
> =20
> https://github.com/djs55/vhd-tool/blob/master/src/impl.ml#L592
> =20
> -- instantiate Request and Response (I'm using a non-standard I/O =
module here, but you can use the cohttp mirage module IIRC) and then=20
> =20
>       let request =3D Cohttp.Request.make ~meth:`PUT =
~version:`HTTP_1_1 ~headers uri' in
>       Request.write (fun t _ -> return ()) request c >>=3D fun () ->
>       Response.read (Cohttp_unbuffered_io.make_input c) >>=3D fun r ->
>       begin match r with
>       | None -> fail (Failure "Unable to parse HTTP response from =
server")
>       | Some x ->
> =20
> In the future I'd like a client which can handle a set of open =
connections (perhaps growing and shrinking the set according to load and =
policy) and which helps me build higher-level APIs on top which can do =
things like transparently login after a session times out.
> =20
> =20
>=20
> On Tue, Nov 12, 2013 at 2:11 PM, Christopher Greenhalgh =
<Chris.Greenhalgh@nottingham.ac.uk> wrote:
> is there any news on the return of the cohttp client?
> I need to start making some HTTP requests from my mirage-based web =
service...
> What is the best ultra-short-term workaround? (i am mostly developing =
on unix/sockets)
> cheers
> chris
> This message and any attachment are intended solely for the addressee =
and may contain confidential information. If you have received this =
message in error, please send it back to me, and immediately delete it.  =
 Please do not use, copy or disclose the information contained in this =
message or in any attachment.  Any views or opinions expressed by the =
author of this email do not necessarily reflect the views of the =
University of Nottingham.
>=20
> This message has been checked for viruses but the contents of an =
attachment
> may still contain software viruses which could damage your computer =
system, you are advised to perform your own checks. Email communications =
with the University of Nottingham may be monitored as permitted by UK =
legislation.
>=20
>=20
>=20
>=20
>=20
>=20
>=20
> =20
> --=20
> Dave Scott
>=20
> This message and any attachment are intended solely for the addressee =
and may contain confidential information. If you have received this =
message in error, please send it back to me, and immediately delete it.  =
 Please do not use, copy or disclose the information contained in this =
message or in any attachment.  Any views or opinions expressed by the =
author of this email do not necessarily reflect the views of the =
University of Nottingham.
>=20
> This message has been checked for viruses but the contents of an =
attachment may still contain software viruses which could damage your =
computer system, you are advised to perform your own checks. Email =
communications with the University of Nottingham may be monitored as =
permitted by UK legislation.
>=20


--Apple-Mail=_DAE1AD43-1634-4EB8-9D62-827151C1EA97
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;
	charset=windows-1252

<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html =
charset=3Dwindows-1252"></head><body style=3D"word-wrap: break-word; =
-webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">I have =
the exact same problem for the GitHub client API too. &nbsp;As a =
short-term fix, we could bind an embedded SSL library, and as a =
medium-term action, wait for ctypes stub generation to make this =
easier.<div><br></div><div>Jon: do you have the sources to the SSL =
library you did bindings too at that Yahoo event we were at? &nbsp;I'm =
back in Cambridge and resuming work on mirage-platform on Wednesday, so =
I can look at SSL in the Xen backend at the same =
time.</div><div><br></div><div>-anil</div><div><br></div><div><div><div>On=
 18 Nov 2013, at 01:21, Christopher Greenhalgh &lt;<a =
href=3D"mailto:Chris.Greenhalgh@nottingham.ac.uk">Chris.Greenhalgh@notting=
ham.ac.uk</a>&gt; wrote:</div><br =
class=3D"Apple-interchange-newline"><blockquote type=3D"cite"><div =
lang=3D"EN-GB" link=3D"blue" vlink=3D"purple" style=3D"font-family: =
Helvetica; font-size: 12px; font-style: normal; font-variant: normal; =
font-weight: normal; letter-spacing: normal; line-height: normal; =
orphans: auto; text-align: start; text-indent: 0px; text-transform: =
none; white-space: normal; widows: auto; word-spacing: 0px; =
-webkit-text-stroke-width: 0px;"><div class=3D"WordSection1" =
style=3D"page: WordSection1;"><div style=3D"margin: 0cm 0cm 0.0001pt; =
font-size: 12pt; font-family: 'Times New Roman', serif;"><span =
style=3D"font-size: 11pt; font-family: Calibri, sans-serif; color: =
rgb(31, 73, 125);">Thanks, Dave.<o:p></o:p></span></div><div =
style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times =
New Roman', serif;"><span style=3D"font-size: 11pt; font-family: =
Calibri, sans-serif; color: rgb(31, 73, 125);">Unfortunately it turns =
out it is a HTTPS-only API (and I should also be using https for my =
server for a =93real=94 deployment) so<o:p></o:p></span></div><div =
style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times =
New Roman', serif;"><span style=3D"font-size: 11pt; font-family: =
Calibri, sans-serif; color: rgb(31, 73, 125);">can someone comment on =
the status/timeline of https support, client and =
server?<o:p></o:p></span></div><div style=3D"margin: 0cm 0cm 0.0001pt; =
font-size: 12pt; font-family: 'Times New Roman', serif;"><span =
style=3D"font-size: 11pt; font-family: Calibri, sans-serif; color: =
rgb(31, 73, 125);">&nbsp;</span></div><div style=3D"margin: 0cm 0cm =
0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;"><span =
style=3D"font-size: 11pt; font-family: Calibri, sans-serif; color: =
rgb(31, 73, 125);">Cheers<o:p></o:p></span></div><div style=3D"margin: =
0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', =
serif;"><span style=3D"font-size: 11pt; font-family: Calibri, =
sans-serif; color: rgb(31, 73, 125);">Chris<o:p></o:p></span></div><div =
style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times =
New Roman', serif;"><span style=3D"font-size: 11pt; font-family: =
Calibri, sans-serif; color: rgb(31, 73, 125);">&nbsp;</span></div><div =
style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times =
New Roman', serif;"><span style=3D"font-size: 11pt; font-family: =
Calibri, sans-serif; color: rgb(31, 73, 125);">&nbsp;</span></div><div =
style=3D"border-style: solid none none; border-top-color: rgb(181, 196, =
223); border-top-width: 1pt; padding: 3pt 0cm 0cm;"><div style=3D"margin: =
0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', =
serif;"><b><span lang=3D"EN-US" style=3D"font-size: 10pt; font-family: =
Tahoma, sans-serif;">From:</span></b><span lang=3D"EN-US" =
style=3D"font-size: 10pt; font-family: Tahoma, sans-serif;"><span =
class=3D"Apple-converted-space">&nbsp;</span><a =
href=3D"mailto:cl-mirage-bounces@lists.cam.ac.uk">cl-mirage-bounces@lists.=
cam.ac.uk</a> [<a =
href=3D"mailto:cl-mirage-bounces@lists.cam.ac.uk">mailto:cl-mirage-bounces=
@lists.cam.ac.uk</a>]<span =
class=3D"Apple-converted-space">&nbsp;</span><b>On Behalf Of<span =
class=3D"Apple-converted-space">&nbsp;</span></b>David =
Scott<br><b>Sent:</b><span class=3D"Apple-converted-space">&nbsp;</span>12=
 November 2013 14:31<br><b>To:</b><span =
class=3D"Apple-converted-space">&nbsp;</span>Christopher =
Greenhalgh<br><b>Cc:</b><span =
class=3D"Apple-converted-space">&nbsp;</span><a =
href=3D"mailto:cl-mirage@lists.cam.ac.uk">cl-mirage@lists.cam.ac.uk</a>; =
<a =
href=3D"mailto:anil@recoil.org">anil@recoil.org</a><br><b>Subject:</b><spa=
n class=3D"Apple-converted-space">&nbsp;</span>Re: cohttp_lwt_mirage.ml =
/ client<o:p></o:p></span></div></div><div style=3D"margin: 0cm 0cm =
0.0001pt; font-size: 12pt; font-family: 'Times New Roman', =
serif;"><o:p>&nbsp;</o:p></div><div><div style=3D"margin: 0cm 0cm =
0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;">My =
common pattern is like this:<o:p></o:p></div><div><div style=3D"margin: =
0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', =
serif;"><o:p>&nbsp;</o:p></div></div><div><div style=3D"margin: 0cm 0cm =
0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;"><a =
href=3D"https://github.com/djs55/vhd-tool/blob/master/src/impl.ml#L592" =
style=3D"color: purple; text-decoration: =
underline;">https://github.com/djs55/vhd-tool/blob/master/src/impl.ml#L592=
</a><o:p></o:p></div></div><div><div style=3D"margin: 0cm 0cm 0.0001pt; =
font-size: 12pt; font-family: 'Times New Roman', =
serif;"><o:p>&nbsp;</o:p></div></div><div><div style=3D"margin: 0cm 0cm =
0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;">-- =
instantiate Request and Response (I'm using a non-standard I/O module =
here, but you can use the cohttp mirage module IIRC) and =
then&nbsp;<o:p></o:p></div></div><div><div style=3D"margin: 0cm 0cm =
0.0001pt; font-size: 12pt; font-family: 'Times New Roman', =
serif;"><o:p>&nbsp;</o:p></div></div><div><div><div style=3D"margin: 0cm =
0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', =
serif;">&nbsp; &nbsp; &nbsp; let request =3D Cohttp.Request.make =
~meth:`PUT ~version:`HTTP_1_1 ~headers uri' =
in<o:p></o:p></div></div><div><div style=3D"margin: 0cm 0cm 0.0001pt; =
font-size: 12pt; font-family: 'Times New Roman', serif;">&nbsp; &nbsp; =
&nbsp; Request.write (fun t _ -&gt; return ()) request c &gt;&gt;=3D fun =
() -&gt;<o:p></o:p></div></div><div><div style=3D"margin: 0cm 0cm =
0.0001pt; font-size: 12pt; font-family: 'Times New Roman', =
serif;">&nbsp; &nbsp; &nbsp; Response.read =
(Cohttp_unbuffered_io.make_input c) &gt;&gt;=3D fun r =
-&gt;<o:p></o:p></div></div><div><div style=3D"margin: 0cm 0cm 0.0001pt; =
font-size: 12pt; font-family: 'Times New Roman', serif;">&nbsp; &nbsp; =
&nbsp; begin match r with<o:p></o:p></div></div><div><div style=3D"margin:=
 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', =
serif;">&nbsp; &nbsp; &nbsp; | None -&gt; fail (Failure "Unable to parse =
HTTP response from server")<o:p></o:p></div></div><div><div =
style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times =
New Roman', serif;">&nbsp; &nbsp; &nbsp; | Some x =
-&gt;<o:p></o:p></div></div></div><div><div style=3D"margin: 0cm 0cm =
0.0001pt; font-size: 12pt; font-family: 'Times New Roman', =
serif;"><o:p>&nbsp;</o:p></div></div><div><div style=3D"margin: 0cm 0cm =
0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;">In =
the future I'd like a client which can handle a set of open connections =
(perhaps growing and shrinking the set according to load and policy) and =
which helps me build higher-level APIs on top which can do things like =
transparently login after a session times =
out.<o:p></o:p></div></div><div><div style=3D"margin: 0cm 0cm 0.0001pt; =
font-size: 12pt; font-family: 'Times New Roman', =
serif;"><o:p>&nbsp;</o:p></div></div></div><div><p class=3D"MsoNormal" =
style=3D"margin: 0cm 0cm 12pt; font-size: 12pt; font-family: 'Times New =
Roman', serif;"><o:p>&nbsp;</o:p></p><div><div style=3D"margin: 0cm 0cm =
0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;">On =
Tue, Nov 12, 2013 at 2:11 PM, Christopher Greenhalgh &lt;<a =
href=3D"mailto:Chris.Greenhalgh@nottingham.ac.uk" target=3D"_blank" =
style=3D"color: purple; text-decoration: =
underline;">Chris.Greenhalgh@nottingham.ac.uk</a>&gt; =
wrote:<o:p></o:p></div><p class=3D"MsoNormal" style=3D"margin: 0cm 0cm =
12pt; font-size: 12pt; font-family: 'Times New Roman', serif;">is there =
any news on the return of the cohttp client?<br>I need to start making =
some HTTP requests from my mirage-based web service...<br>What is the =
best ultra-short-term workaround? (i am mostly developing on =
unix/sockets)<br>cheers<br>chris<br>This message and any attachment are =
intended solely for the addressee and may contain confidential =
information. If you have received this message in error, please send it =
back to me, and immediately delete it. &nbsp; Please do not use, copy or =
disclose the information contained in this message or in any attachment. =
&nbsp;Any views or opinions expressed by the author of this email do not =
necessarily reflect the views of the University of =
Nottingham.<br><br>This message has been checked for viruses but the =
contents of an attachment<br>may still contain software viruses which =
could damage your computer system, you are advised to perform your own =
checks. Email communications with the University of Nottingham may be =
monitored as permitted by UK =
legislation.<br><br><br><br><br><o:p></o:p></p></div><div style=3D"margin:=
 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', =
serif;"><br><br clear=3D"all"><o:p></o:p></div><div><div style=3D"margin: =
0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', =
serif;"><o:p>&nbsp;</o:p></div></div><div style=3D"margin: 0cm 0cm =
0.0001pt; font-size: 12pt; font-family: 'Times New Roman', =
serif;">--<span class=3D"Apple-converted-space">&nbsp;</span><br>Dave =
Scott<o:p></o:p></div></div></div><br><p>This message and any attachment =
are intended solely for the addressee and may contain confidential =
information. If you have received this message in error, please send it =
back to me, and immediately delete it.&nbsp;&nbsp; Please do not use, =
copy or disclose the information contained in this message or in any =
attachment.&nbsp; Any views or opinions expressed by the author of this =
email do not necessarily reflect the views of the University of =
Nottingham.</p><p>This message has been checked for viruses but the =
contents of an attachment may still contain software viruses which could =
damage your computer system, you are advised to perform your own checks. =
Email communications with the University of Nottingham may be monitored =
as permitted by UK =
legislation.</p></div></blockquote></div><br></div></body></html>=

--Apple-Mail=_DAE1AD43-1634-4EB8-9D62-827151C1EA97--


From jjl25@cam.ac.uk Mon Nov 18 16:35:21 2013
Received: from ppsw-33.csi.cam.ac.uk ([131.111.8.133])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1ViRnF-0007ds-TD (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <jjl25@cam.ac.uk>); Mon, 18 Nov 2013 16:35:21 +0000
X-Cam-AntiVirus: no malware found
X-Cam-ScannerInfo: http://www.cam.ac.uk/cs/email/scanner/
Received: from [185.25.64.249] (port=49993 helo=[10.80.118.191])
	by ppsw-33.csi.cam.ac.uk (smtp.hermes.cam.ac.uk [131.111.8.157]:587)
	with esmtpsa (PLAIN:jjl25) (TLSv1:DHE-RSA-CAMELLIA256-SHA:256)
	id 1ViRnF-0004Hr-hw (Exim 4.82_3-c0e5623) for cl-mirage@lists.cam.ac.uk
	(return-path <jjl25@cam.ac.uk>); Mon, 18 Nov 2013 16:35:21 +0000
Message-ID: <528A41C8.3010302@cam.ac.uk>
Date: Mon, 18 Nov 2013 16:35:20 +0000
From: Jon Ludlam <jjl25@cam.ac.uk>
User-Agent: Mozilla/5.0 (X11; Linux x86_64;
	rv:24.0) Gecko/20100101 Thunderbird/24.1.0
MIME-Version: 1.0
To: cl-mirage@lists.cam.ac.uk
Subject: Re: cohttp_lwt_mirage.ml / client
References: <4C20415C7327A849961F3B8421413725010CD7D4E0A8@EXCHANGE1.ad.nottingham.ac.uk>	<CAG_esB2iLT5jDeTiNj8byz8BMTJL_ebuq_TuP0uLy=PoS0gLiQ@mail.gmail.com>	<4C20415C7327A849961F3B8421413725010CD7CBC616@EXCHANGE1.ad.nottingham.ac.uk>
	<884EED7A-B2FB-4244-89F4-94E7269794D8@recoil.org>
In-Reply-To: <884EED7A-B2FB-4244-89F4-94E7269794D8@recoil.org>
Content-Type: multipart/alternative;
	boundary="------------080604030702020600050506"
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Mon, 18 Nov 2013 16:35:22 -0000
Content-Length: 20856
Lines: 421

This is a multi-part message in MIME format.
--------------080604030702020600050506
Content-Type: text/plain; charset=windows-1252
Content-Transfer-Encoding: 8bit

That was matrix-ssl - we decided subsequently that axTLS might be a
better bet for licensing reasons. MatrixSSL stuff is on github, I hadn't
made a start on axTLS yet.

Jon

On 18/11/13 16:02, Anil Madhavapeddy wrote:
> I have the exact same problem for the GitHub client API too.  As a
> short-term fix, we could bind an embedded SSL library, and as a
> medium-term action, wait for ctypes stub generation to make this easier.
>
> Jon: do you have the sources to the SSL library you did bindings too
> at that Yahoo event we were at?  I'm back in Cambridge and resuming
> work on mirage-platform on Wednesday, so I can look at SSL in the Xen
> backend at the same time.
>
> -anil
>
> On 18 Nov 2013, at 01:21, Christopher Greenhalgh
> <Chris.Greenhalgh@nottingham.ac.uk
> <mailto:Chris.Greenhalgh@nottingham.ac.uk>> wrote:
>
>> Thanks, Dave.
>> Unfortunately it turns out it is a HTTPS-only API (and I should also
>> be using https for my server for a “real” deployment) so
>> can someone comment on the status/timeline of https support, client
>> and server?
>>  
>> Cheers
>> Chris
>>  
>>  
>> *From:* cl-mirage-bounces@lists.cam.ac.uk
>> <mailto:cl-mirage-bounces@lists.cam.ac.uk>
>> [mailto:cl-mirage-bounces@lists.cam.ac.uk] *On Behalf Of *David Scott
>> *Sent:* 12 November 2013 14:31
>> *To:* Christopher Greenhalgh
>> *Cc:* cl-mirage@lists.cam.ac.uk <mailto:cl-mirage@lists.cam.ac.uk>;
>> anil@recoil.org <mailto:anil@recoil.org>
>> *Subject:* Re: cohttp_lwt_mirage.ml / client
>>  
>> My common pattern is like this:
>>  
>> https://github.com/djs55/vhd-tool/blob/master/src/impl.ml#L592
>>  
>> -- instantiate Request and Response (I'm using a non-standard I/O
>> module here, but you can use the cohttp mirage module IIRC) and then 
>>  
>>       let request = Cohttp.Request.make ~meth:`PUT ~version:`HTTP_1_1
>> ~headers uri' in
>>       Request.write (fun t _ -> return ()) request c >>= fun () ->
>>       Response.read (Cohttp_unbuffered_io.make_input c) >>= fun r ->
>>       begin match r with
>>       | None -> fail (Failure "Unable to parse HTTP response from
>> server")
>>       | Some x ->
>>  
>> In the future I'd like a client which can handle a set of open
>> connections (perhaps growing and shrinking the set according to load
>> and policy) and which helps me build higher-level APIs on top which
>> can do things like transparently login after a session times out.
>>  
>>
>>  
>>
>> On Tue, Nov 12, 2013 at 2:11 PM, Christopher Greenhalgh
>> <Chris.Greenhalgh@nottingham.ac.uk
>> <mailto:Chris.Greenhalgh@nottingham.ac.uk>> wrote:
>>
>> is there any news on the return of the cohttp client?
>> I need to start making some HTTP requests from my mirage-based web
>> service...
>> What is the best ultra-short-term workaround? (i am mostly developing
>> on unix/sockets)
>> cheers
>> chris
>> This message and any attachment are intended solely for the addressee
>> and may contain confidential information. If you have received this
>> message in error, please send it back to me, and immediately delete
>> it.   Please do not use, copy or disclose the information contained
>> in this message or in any attachment.  Any views or opinions
>> expressed by the author of this email do not necessarily reflect the
>> views of the University of Nottingham.
>>
>> This message has been checked for viruses but the contents of an
>> attachment
>> may still contain software viruses which could damage your computer
>> system, you are advised to perform your own checks. Email
>> communications with the University of Nottingham may be monitored as
>> permitted by UK legislation.
>>
>>
>>
>>
>>
>>
>>  
>> -- 
>> Dave Scott
>>
>> This message and any attachment are intended solely for the addressee
>> and may contain confidential information. If you have received this
>> message in error, please send it back to me, and immediately delete
>> it.   Please do not use, copy or disclose the information contained
>> in this message or in any attachment.  Any views or opinions
>> expressed by the author of this email do not necessarily reflect the
>> views of the University of Nottingham.
>>
>> This message has been checked for viruses but the contents of an
>> attachment may still contain software viruses which could damage your
>> computer system, you are advised to perform your own checks. Email
>> communications with the University of Nottingham may be monitored as
>> permitted by UK legislation.
>>
>


--------------080604030702020600050506
Content-Type: text/html; charset=windows-1252
Content-Transfer-Encoding: 8bit

<html>
  <head>
    <meta content="text/html; charset=windows-1252"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <div class="moz-cite-prefix">That was matrix-ssl - we decided
      subsequently that axTLS might be a better bet for licensing
      reasons. MatrixSSL stuff is on github, I hadn't made a start on
      axTLS yet.<br>
      <br>
      Jon<br>
      <br>
      On 18/11/13 16:02, Anil Madhavapeddy wrote:<br>
    </div>
    <blockquote
      cite="mid:884EED7A-B2FB-4244-89F4-94E7269794D8@recoil.org"
      type="cite">
      <meta http-equiv="Content-Type" content="text/html;
        charset=windows-1252">
      I have the exact same problem for the GitHub client API too.  As a
      short-term fix, we could bind an embedded SSL library, and as a
      medium-term action, wait for ctypes stub generation to make this
      easier.
      <div><br>
      </div>
      <div>Jon: do you have the sources to the SSL library you did
        bindings too at that Yahoo event we were at?  I'm back in
        Cambridge and resuming work on mirage-platform on Wednesday, so
        I can look at SSL in the Xen backend at the same time.</div>
      <div><br>
      </div>
      <div>-anil</div>
      <div><br>
      </div>
      <div>
        <div>
          <div>On 18 Nov 2013, at 01:21, Christopher Greenhalgh &lt;<a
              moz-do-not-send="true"
              href="mailto:Chris.Greenhalgh@nottingham.ac.uk">Chris.Greenhalgh@nottingham.ac.uk</a>&gt;
            wrote:</div>
          <br class="Apple-interchange-newline">
          <blockquote type="cite">
            <div link="blue" vlink="purple" style="font-family:
              Helvetica; font-size: 12px; font-style: normal;
              font-variant: normal; font-weight: normal; letter-spacing:
              normal; line-height: normal; orphans: auto; text-align:
              start; text-indent: 0px; text-transform: none;
              white-space: normal; widows: auto; word-spacing: 0px;
              -webkit-text-stroke-width: 0px;" lang="EN-GB">
              <div class="WordSection1" style="page: WordSection1;">
                <div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt;
                  font-family: 'Times New Roman', serif;"><span
                    style="font-size: 11pt; font-family: Calibri,
                    sans-serif; color: rgb(31, 73, 125);">Thanks, Dave.<o:p></o:p></span></div>
                <div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt;
                  font-family: 'Times New Roman', serif;"><span
                    style="font-size: 11pt; font-family: Calibri,
                    sans-serif; color: rgb(31, 73, 125);">Unfortunately
                    it turns out it is a HTTPS-only API (and I should
                    also be using https for my server for a “real”
                    deployment) so<o:p></o:p></span></div>
                <div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt;
                  font-family: 'Times New Roman', serif;"><span
                    style="font-size: 11pt; font-family: Calibri,
                    sans-serif; color: rgb(31, 73, 125);">can someone
                    comment on the status/timeline of https support,
                    client and server?<o:p></o:p></span></div>
                <div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt;
                  font-family: 'Times New Roman', serif;"><span
                    style="font-size: 11pt; font-family: Calibri,
                    sans-serif; color: rgb(31, 73, 125);"> </span></div>
                <div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt;
                  font-family: 'Times New Roman', serif;"><span
                    style="font-size: 11pt; font-family: Calibri,
                    sans-serif; color: rgb(31, 73, 125);">Cheers<o:p></o:p></span></div>
                <div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt;
                  font-family: 'Times New Roman', serif;"><span
                    style="font-size: 11pt; font-family: Calibri,
                    sans-serif; color: rgb(31, 73, 125);">Chris<o:p></o:p></span></div>
                <div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt;
                  font-family: 'Times New Roman', serif;"><span
                    style="font-size: 11pt; font-family: Calibri,
                    sans-serif; color: rgb(31, 73, 125);"> </span></div>
                <div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt;
                  font-family: 'Times New Roman', serif;"><span
                    style="font-size: 11pt; font-family: Calibri,
                    sans-serif; color: rgb(31, 73, 125);"> </span></div>
                <div style="border-style: solid none none;
                  border-top-color: rgb(181, 196, 223);
                  border-top-width: 1pt; padding: 3pt 0cm 0cm;">
                  <div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt;
                    font-family: 'Times New Roman', serif;"><b><span
                        style="font-size: 10pt; font-family: Tahoma,
                        sans-serif;" lang="EN-US">From:</span></b><span
                      style="font-size: 10pt; font-family: Tahoma,
                      sans-serif;" lang="EN-US"><span
                        class="Apple-converted-space"> </span><a
                        moz-do-not-send="true"
                        href="mailto:cl-mirage-bounces@lists.cam.ac.uk">cl-mirage-bounces@lists.cam.ac.uk</a>
                      [<a moz-do-not-send="true"
                        href="mailto:cl-mirage-bounces@lists.cam.ac.uk">mailto:cl-mirage-bounces@lists.cam.ac.uk</a>]<span
                        class="Apple-converted-space"> </span><b>On
                        Behalf Of<span class="Apple-converted-space"> </span></b>David
                      Scott<br>
                      <b>Sent:</b><span class="Apple-converted-space"> </span>12
                      November 2013 14:31<br>
                      <b>To:</b><span class="Apple-converted-space"> </span>Christopher
                      Greenhalgh<br>
                      <b>Cc:</b><span class="Apple-converted-space"> </span><a
                        moz-do-not-send="true"
                        href="mailto:cl-mirage@lists.cam.ac.uk">cl-mirage@lists.cam.ac.uk</a>;
                      <a moz-do-not-send="true"
                        href="mailto:anil@recoil.org">anil@recoil.org</a><br>
                      <b>Subject:</b><span class="Apple-converted-space"> </span>Re:
                      cohttp_lwt_mirage.ml / client<o:p></o:p></span></div>
                </div>
                <div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt;
                  font-family: 'Times New Roman', serif;"><o:p> </o:p></div>
                <div>
                  <div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt;
                    font-family: 'Times New Roman', serif;">My common
                    pattern is like this:<o:p></o:p></div>
                  <div>
                    <div style="margin: 0cm 0cm 0.0001pt; font-size:
                      12pt; font-family: 'Times New Roman', serif;"><o:p> </o:p></div>
                  </div>
                  <div>
                    <div style="margin: 0cm 0cm 0.0001pt; font-size:
                      12pt; font-family: 'Times New Roman', serif;"><a
                        moz-do-not-send="true"
                        href="https://github.com/djs55/vhd-tool/blob/master/src/impl.ml#L592"
                        style="color: purple; text-decoration:
                        underline;">https://github.com/djs55/vhd-tool/blob/master/src/impl.ml#L592</a><o:p></o:p></div>
                  </div>
                  <div>
                    <div style="margin: 0cm 0cm 0.0001pt; font-size:
                      12pt; font-family: 'Times New Roman', serif;"><o:p> </o:p></div>
                  </div>
                  <div>
                    <div style="margin: 0cm 0cm 0.0001pt; font-size:
                      12pt; font-family: 'Times New Roman', serif;">--
                      instantiate Request and Response (I'm using a
                      non-standard I/O module here, but you can use the
                      cohttp mirage module IIRC) and then <o:p></o:p></div>
                  </div>
                  <div>
                    <div style="margin: 0cm 0cm 0.0001pt; font-size:
                      12pt; font-family: 'Times New Roman', serif;"><o:p> </o:p></div>
                  </div>
                  <div>
                    <div>
                      <div style="margin: 0cm 0cm 0.0001pt; font-size:
                        12pt; font-family: 'Times New Roman', serif;"> 
                            let request = Cohttp.Request.make ~meth:`PUT
                        ~version:`HTTP_1_1 ~headers uri' in<o:p></o:p></div>
                    </div>
                    <div>
                      <div style="margin: 0cm 0cm 0.0001pt; font-size:
                        12pt; font-family: 'Times New Roman', serif;"> 
                            Request.write (fun t _ -&gt; return ())
                        request c &gt;&gt;= fun () -&gt;<o:p></o:p></div>
                    </div>
                    <div>
                      <div style="margin: 0cm 0cm 0.0001pt; font-size:
                        12pt; font-family: 'Times New Roman', serif;"> 
                            Response.read
                        (Cohttp_unbuffered_io.make_input c) &gt;&gt;=
                        fun r -&gt;<o:p></o:p></div>
                    </div>
                    <div>
                      <div style="margin: 0cm 0cm 0.0001pt; font-size:
                        12pt; font-family: 'Times New Roman', serif;"> 
                            begin match r with<o:p></o:p></div>
                    </div>
                    <div>
                      <div style="margin: 0cm 0cm 0.0001pt; font-size:
                        12pt; font-family: 'Times New Roman', serif;"> 
                            | None -&gt; fail (Failure "Unable to parse
                        HTTP response from server")<o:p></o:p></div>
                    </div>
                    <div>
                      <div style="margin: 0cm 0cm 0.0001pt; font-size:
                        12pt; font-family: 'Times New Roman', serif;"> 
                            | Some x -&gt;<o:p></o:p></div>
                    </div>
                  </div>
                  <div>
                    <div style="margin: 0cm 0cm 0.0001pt; font-size:
                      12pt; font-family: 'Times New Roman', serif;"><o:p> </o:p></div>
                  </div>
                  <div>
                    <div style="margin: 0cm 0cm 0.0001pt; font-size:
                      12pt; font-family: 'Times New Roman', serif;">In
                      the future I'd like a client which can handle a
                      set of open connections (perhaps growing and
                      shrinking the set according to load and policy)
                      and which helps me build higher-level APIs on top
                      which can do things like transparently login after
                      a session times out.<o:p></o:p></div>
                  </div>
                  <div>
                    <div style="margin: 0cm 0cm 0.0001pt; font-size:
                      12pt; font-family: 'Times New Roman', serif;"><o:p> </o:p></div>
                  </div>
                </div>
                <div>
                  <p class="MsoNormal" style="margin: 0cm 0cm 12pt;
                    font-size: 12pt; font-family: 'Times New Roman',
                    serif;"><o:p> </o:p></p>
                  <div>
                    <div style="margin: 0cm 0cm 0.0001pt; font-size:
                      12pt; font-family: 'Times New Roman', serif;">On
                      Tue, Nov 12, 2013 at 2:11 PM, Christopher
                      Greenhalgh &lt;<a moz-do-not-send="true"
                        href="mailto:Chris.Greenhalgh@nottingham.ac.uk"
                        target="_blank" style="color: purple;
                        text-decoration: underline;">Chris.Greenhalgh@nottingham.ac.uk</a>&gt;
                      wrote:<o:p></o:p></div>
                    <p class="MsoNormal" style="margin: 0cm 0cm 12pt;
                      font-size: 12pt; font-family: 'Times New Roman',
                      serif;">is there any news on the return of the
                      cohttp client?<br>
                      I need to start making some HTTP requests from my
                      mirage-based web service...<br>
                      What is the best ultra-short-term workaround? (i
                      am mostly developing on unix/sockets)<br>
                      cheers<br>
                      chris<br>
                      This message and any attachment are intended
                      solely for the addressee and may contain
                      confidential information. If you have received
                      this message in error, please send it back to me,
                      and immediately delete it.   Please do not use,
                      copy or disclose the information contained in this
                      message or in any attachment.  Any views or
                      opinions expressed by the author of this email do
                      not necessarily reflect the views of the
                      University of Nottingham.<br>
                      <br>
                      This message has been checked for viruses but the
                      contents of an attachment<br>
                      may still contain software viruses which could
                      damage your computer system, you are advised to
                      perform your own checks. Email communications with
                      the University of Nottingham may be monitored as
                      permitted by UK legislation.<br>
                      <br>
                      <br>
                      <br>
                      <br>
                      <o:p></o:p></p>
                  </div>
                  <div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt;
                    font-family: 'Times New Roman', serif;"><br>
                    <br clear="all">
                    <o:p></o:p></div>
                  <div>
                    <div style="margin: 0cm 0cm 0.0001pt; font-size:
                      12pt; font-family: 'Times New Roman', serif;"><o:p> </o:p></div>
                  </div>
                  <div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt;
                    font-family: 'Times New Roman', serif;">--<span
                      class="Apple-converted-space"> </span><br>
                    Dave Scott<o:p></o:p></div>
                </div>
              </div>
              <br>
              <p>This message and any attachment are intended solely for
                the addressee and may contain confidential information.
                If you have received this message in error, please send
                it back to me, and immediately delete it.   Please do
                not use, copy or disclose the information contained in
                this message or in any attachment.  Any views or
                opinions expressed by the author of this email do not
                necessarily reflect the views of the University of
                Nottingham.</p>
              <p>This message has been checked for viruses but the
                contents of an attachment may still contain software
                viruses which could damage your computer system, you are
                advised to perform your own checks. Email communications
                with the University of Nottingham may be monitored as
                permitted by UK legislation.</p>
            </div>
          </blockquote>
        </div>
        <br>
      </div>
    </blockquote>
    <br>
  </body>
</html>

--------------080604030702020600050506--


From raphlalou@gmail.com Tue Nov 19 08:33:42 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1Vigkg-0003AO-Dc (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <raphlalou@gmail.com>); Tue, 19 Nov 2013 08:33:42 +0000
X-Cam-SpamDetails: score -0.6 from SpamAssassin-3.3.2-1542949 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.128.43 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (raphlalou[at]gmail.com)
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-qe0-f43.google.com ([209.85.128.43]:51060)
	by ppsw-52.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with esmtps (TLSv1:RC4-SHA:128)
	id 1Vigkf-0003vf-FW (Exim 4.82_3-c0e5623) for cl-mirage@lists.cam.ac.uk
	(return-path <raphlalou@gmail.com>); Tue, 19 Nov 2013 08:33:42 +0000
Received: by mail-qe0-f43.google.com with SMTP id 2so2592197qeb.16
	for <cl-mirage@lists.cam.ac.uk>; Tue, 19 Nov 2013 00:33:40 -0800 (PST)
MIME-Version: 1.0
X-Received: by 10.224.12.10 with SMTP id v10mr9838169qav.98.1384850020668;
	Tue, 19 Nov 2013 00:33:40 -0800 (PST)
Sender: raphlalou@gmail.com
Received: by 10.96.82.200 with HTTP; Tue, 19 Nov 2013 00:33:40 -0800 (PST)
Date: Tue, 19 Nov 2013 08:33:40 +0000
X-Google-Sender-Auth: ybEuBgKN8DVDJJJNZ1rHDi9wqqo
Message-ID: <CAAmHUAkT7t8pom+V38RY+1Chzkh0+2x7smMqNFV_yzW3qoaibw@mail.gmail.com>
Subject: Booting Rust app on UEFI
From: Raphael Proust <raphael.proust@cl.cam.ac.uk>
To: "cl-mirage@lists.cam.ac.uk" <cl-mirage@lists.cam.ac.uk>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 19 Nov 2013 08:33:42 -0000
Content-Length: 111
Lines: 7

http://blog.theincredibleholk.org/blog/2013/11/18/booting-to-rust/


--=20
______________
Rapha=C3=ABl Proust


From scott.dj@gmail.com Wed Nov 20 15:37:38 2013
Received: from ppsw-42.csi.cam.ac.uk ([131.111.8.142])
	by lists-1.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1Vj9qU-0006hH-6o (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <scott.dj@gmail.com>); Wed, 20 Nov 2013 15:37:38 +0000
X-Cam-SpamScore: s
X-Cam-SpamDetails: score 1.3 from SpamAssassin-3.3.2-1543347 
	* -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/,
	no *      trust
	*      [209.85.192.171 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (scott.dj[at]gmail.com)
	*  0.0 DKIM_ADSP_CUSTOM_MED No valid author signature, adsp_override is
	*      CUSTOM_MED
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
	*  1.2 NML_ADSP_CUSTOM_MED ADSP custom_med hit, and not from a mailing
	*      list
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-pd0-f171.google.com ([209.85.192.171]:58372)
	by ppsw-42.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with esmtps (TLSv1:RC4-SHA:128)
	id 1Vj9qT-0003oj-7y (Exim 4.82_3-c0e5623) for cl-mirage@lists.cam.ac.uk
	(return-path <scott.dj@gmail.com>); Wed, 20 Nov 2013 15:37:38 +0000
Received: by mail-pd0-f171.google.com with SMTP id z10so8197172pdj.16
	for <cl-mirage@lists.cam.ac.uk>; Wed, 20 Nov 2013 07:37:35 -0800 (PST)
MIME-Version: 1.0
X-Received: by 10.68.113.130 with SMTP id iy2mr1422648pbb.2.1384961855767;
	Wed, 20 Nov 2013 07:37:35 -0800 (PST)
Received: by 10.70.56.36 with HTTP; Wed, 20 Nov 2013 07:37:35 -0800 (PST)
Date: Wed, 20 Nov 2013 15:37:35 +0000
Message-ID: <CAG_esB08+q+ckmXxtXpvnT1gS8Cnv8ze2KOnOEOa+mVVJGvByA@mail.gmail.com>
Subject: thoughts about block devices in Mirage
From: David Scott <scott.dj@gmail.com>
To: Mirage List <cl-mirage@lists.cam.ac.uk>
Content-Type: multipart/alternative; boundary=047d7b6d7a6670cc6b04eb9d8fd0
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Wed, 20 Nov 2013 15:37:38 -0000
Content-Length: 4260
Lines: 97

--047d7b6d7a6670cc6b04eb9d8fd0
Content-Type: text/plain; charset=ISO-8859-1

Hi,

I've been trying to tidy up the mirage block device interface before the
big release. I've added a signature BLOCK to mirage-types:

https://github.com/mirage/mirage-types/blob/master/lib/v1.ml#L124

This has notions of
* an active/ open device
* a blocking I/O action
* a page aligned buffer
and allows you to read and write from/to a set of buffers.

I've proposed a less-abstract version of the signature in
mirage-platform/xen (but it should be common to both unix and xen):

https://github.com/mirage/mirage-platform/pull/73/files

which looks like this:

 +module type S = V1.BLOCK_DEVICE
 +  with type page_aligned_buffer := Cstruct.t
 +  and type 'a io := 'a Lwt.t

together with a lookup table mapping driver names (strings) to (module S)
instances. Does this seem like a reasonable approach?

In my xen block driver I've added support for this interface and left the
old code for backwards compat:

https://github.com/mirage/ocaml-xen-block-driver/pull/8

The idea is the block driver will automatically register itself as a driver
called "local". A Unix version could do the same. We could add things like
"iscsi" later.

Finally I've proposed some test cases for mirage-skeleton which check
various read/write operations seem to be working (and failing when they
should be failing etc):

https://github.com/mirage/mirage-skeleton/pull/15

Let me know what you think. The next step would be to get this new
interface working on Unix and then to start working on a filesystem
interface (for those who like that sort of thing)

Cheers,

-- 
Dave Scott

--047d7b6d7a6670cc6b04eb9d8fd0
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Hi,<div><br></div><div>I&#39;ve been trying to tidy up the=
 mirage block device interface before the big release. I&#39;ve added a sig=
nature BLOCK to mirage-types:</div><div><br></div><div><a href=3D"https://g=
ithub.com/mirage/mirage-types/blob/master/lib/v1.ml#L124">https://github.co=
m/mirage/mirage-types/blob/master/lib/v1.ml#L124</a></div>
<div><br></div><div>This has notions of</div><div>* an active/ open device<=
/div><div>* a blocking I/O action</div><div>* a page aligned buffer</div><d=
iv>and allows you to read and write from/to a set of buffers.</div><div>
<br></div><div>I&#39;ve proposed a less-abstract version of the signature i=
n mirage-platform/xen (but it should be common to both unix and xen):</div>=
<div><br></div><div><a href=3D"https://github.com/mirage/mirage-platform/pu=
ll/73/files">https://github.com/mirage/mirage-platform/pull/73/files</a></d=
iv>
<div><br></div><div>which looks like this:</div><div><br></div><div><div>=
=A0+module type S =3D V1.BLOCK_DEVICE</div><div>=A0+ =A0with type page_alig=
ned_buffer :=3D Cstruct.t</div><div>=A0+ =A0and type &#39;a io :=3D &#39;a =
Lwt.t</div><div>
<br></div><div>together with a lookup table mapping driver names (strings) =
to (module S) instances. Does this seem like a reasonable approach?</div><d=
iv><br></div><div>In my xen block driver I&#39;ve added support for this in=
terface and left the old code for backwards compat:</div>
<div><br></div><div><a href=3D"https://github.com/mirage/ocaml-xen-block-dr=
iver/pull/8">https://github.com/mirage/ocaml-xen-block-driver/pull/8</a><br=
></div><div><br></div><div>The idea is the block driver will automatically =
register itself as a driver called &quot;local&quot;. A Unix version could =
do the same. We could add things like &quot;iscsi&quot; later.</div>
<div><br></div><div>Finally I&#39;ve proposed some test cases for mirage-sk=
eleton which check various read/write operations seem to be working (and fa=
iling when they should be failing etc):</div><div><br></div><div><a href=3D=
"https://github.com/mirage/mirage-skeleton/pull/15">https://github.com/mira=
ge/mirage-skeleton/pull/15</a><br>
</div><div><br></div><div>Let me know what you think. The next step would b=
e to get this new interface working on Unix and then to start working on a =
filesystem interface (for those who like that sort of thing)</div><div>
<br></div><div>Cheers,</div><div><br></div>-- <br>Dave Scott
</div></div>

--047d7b6d7a6670cc6b04eb9d8fd0--


From russell.pavlicek.xen@gmail.com Wed Nov 20 19:35:25 2013
Received: from ppsw-33.csi.cam.ac.uk ([131.111.8.133])
	by lists-1.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VjDYb-0007kb-4i (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <russell.pavlicek.xen@gmail.com>);
	Wed, 20 Nov 2013 19:35:25 +0000
X-Cam-SpamScore: s
X-Cam-SpamDetails: score 1.9 from SpamAssassin-3.3.2-1543347 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.217.181 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (russell.pavlicek.xen[at]gmail.com)
	*  2.5 SUSPICIOUS_RECIPS Similar addresses in recipient list
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-lb0-f181.google.com ([209.85.217.181]:48453)
	by ppsw-33.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with esmtps (TLSv1:RC4-SHA:128)
	id 1VjDYa-0008Mn-hj (Exim 4.82_3-c0e5623) for cl-mirage@lists.cam.ac.uk
	(return-path <russell.pavlicek.xen@gmail.com>);
	Wed, 20 Nov 2013 19:35:25 +0000
Received: by mail-lb0-f181.google.com with SMTP id q8so6549495lbi.12
	for <cl-mirage@lists.cam.ac.uk>; Wed, 20 Nov 2013 11:35:23 -0800 (PST)
MIME-Version: 1.0
X-Received: by 10.152.28.37 with SMTP id y5mr1676545lag.23.1384976123788; Wed,
	20 Nov 2013 11:35:23 -0800 (PST)
Sender: russell.pavlicek.xen@gmail.com
Received: by 10.112.120.138 with HTTP; Wed, 20 Nov 2013 11:35:23 -0800 (PST)
Date: Wed, 20 Nov 2013 14:35:23 -0500
X-Google-Sender-Auth: vDFPVv60ty18Z9lpU3Jv_D2X-ew
Message-ID: <CAHehzX3DabB76v0wDbu5D0F-sfFY4dpEmFZC-q9uTYS0Mpuk0w@mail.gmail.com>
Subject: Xen Project Documentation Day for Nov & Dec
From: Russ Pavlicek <russell.pavlicek@xenproject.org>
To: "xen-users@lists.xen.org" <xen-users@lists.xen.org>,
	xen-devel@lists.xen.org, xen-api@lists.xen.org, 
	xs-devel@lists.xenserver.org, cl-mirage@lists.cam.ac.uk
Content-Type: text/plain; charset=ISO-8859-1
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Wed, 20 Nov 2013 19:35:25 -0000
Content-Length: 1469
Lines: 41

Greetings,

Normally, we hold the Xen Project Documentation Day on the fourth
Monday of the month.  However, for the next two months, there are some
issues:

- Next Monday is the beginning of Thanksgiving week in the US.  This
is historically a very hard time to accomplish anything (other than
shop for the holidays which occur in December), so if we hold
Documentation Day on Monday, it is likely to lack any US contribution.

- The usual Monday in December is buried in the holiday season and is
unlikely to be the center of almost anyone's attention (including
mine) during that time.

- Participation in Doc Days overall has been rather muted during the
past couple of months.

Given these factors, I recommend the following:

- We cancel the Doc Days for November and December, restarting in
January with renewed vigor.

- We express our opinions about the 4th Monday schedule for the new
year.  Is this working for you?  Is there a better day of the week or
week of the month which might be more convenient?  Please speak up.

If at least 3 people reply to this message and say they want the Doc
Day to go on as scheduled on Monday, we can definitely accommodate.
Or, if there is some demand to move it to early December, we can
certainly do that instead.  Now is the time to register your opinion.

If there is no groundswell of support for another Doc Day this
calendar year, we will schedule the next one for January.

So what do you all say?

Thanks,

Russ


From konrad.wilk@oracle.com Wed Nov 20 21:57:48 2013
Received: from ppsw-42.csi.cam.ac.uk ([131.111.8.142])
	by lists-1.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VjFmO-0002yh-Lt (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <konrad.wilk@oracle.com>); Wed, 20 Nov 2013 21:57:48 +0000
X-Cam-SpamDetails: score -0.4 from SpamAssassin-3.3.2-1543347 
	* -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at http://www.dnswl.org/,
	*      medium trust
	*      [141.146.126.69 listed in list.dnswl.dnsbl.ja.net]
	* -0.5 RP_MATCHES_RCVD Envelope sender domain matches handover relay
	*      domain
	*  2.5 SUSPICIOUS_RECIPS Similar addresses in recipient list
	*  0.0 UNPARSEABLE_RELAY Informational: message has unparseable relay
	*      lines
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from aserp1040.oracle.com ([141.146.126.69]:30890)
	by ppsw-42.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with esmtps (TLSv1:DHE-RSA-AES256-SHA:256)
	id 1VjFmN-0004sE-9J (Exim 4.82_3-c0e5623) for cl-mirage@lists.cam.ac.uk
	(return-path <konrad.wilk@oracle.com>); Wed, 20 Nov 2013 21:57:48 +0000
Received: from acsinet21.oracle.com (acsinet21.oracle.com [141.146.126.237])
	by aserp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with
	ESMTP id rAKLvgbX017651
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK);
	Wed, 20 Nov 2013 21:57:42 GMT
Received: from aserz7021.oracle.com (aserz7021.oracle.com [141.146.126.230])
	by acsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id
	rAKLvflV016112
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO);
	Wed, 20 Nov 2013 21:57:42 GMT
Received: from abhmp0014.oracle.com (abhmp0014.oracle.com [141.146.116.20])
	by aserz7021.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id
	rAKLvfs9016102; Wed, 20 Nov 2013 21:57:41 GMT
Received: from phenom.dumpdata.com (/50.195.21.189)
	by default (Oracle Beehive Gateway v4.0)
	with ESMTP ; Wed, 20 Nov 2013 13:57:41 -0800
Received: by phenom.dumpdata.com (Postfix, from userid 1000)
	id 0D9A81BF7E3; Wed, 20 Nov 2013 16:57:40 -0500 (EST)
Date: Wed, 20 Nov 2013 16:57:39 -0500
From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: Russ Pavlicek <russell.pavlicek@xenproject.org>
Subject: Re: [Xen-devel] Xen Project Documentation Day for Nov & Dec
Message-ID: <20131120215739.GA12404@phenom.dumpdata.com>
References: <CAHehzX3DabB76v0wDbu5D0F-sfFY4dpEmFZC-q9uTYS0Mpuk0w@mail.gmail.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <CAHehzX3DabB76v0wDbu5D0F-sfFY4dpEmFZC-q9uTYS0Mpuk0w@mail.gmail.com>
User-Agent: Mutt/1.5.21 (2010-09-15)
X-Source-IP: acsinet21.oracle.com [141.146.126.237]
Cc: "xen-users@lists.xen.org" <xen-users@lists.xen.org>, xen-api@lists.xen.org,
	xs-devel@lists.xenserver.org, cl-mirage@lists.cam.ac.uk,
	xen-devel@lists.xen.org
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Wed, 20 Nov 2013 21:57:48 -0000
Content-Length: 939
Lines: 27

On Wed, Nov 20, 2013 at 02:35:23PM -0500, Russ Pavlicek wrote:
> Greetings,
> 
> Normally, we hold the Xen Project Documentation Day on the fourth
> Monday of the month.  However, for the next two months, there are some
> issues:
> 
> - Next Monday is the beginning of Thanksgiving week in the US.  This
> is historically a very hard time to accomplish anything (other than
> shop for the holidays which occur in December), so if we hold
> Documentation Day on Monday, it is likely to lack any US contribution.
> 
> - The usual Monday in December is buried in the holiday season and is
> unlikely to be the center of almost anyone's attention (including
> mine) during that time.
> 
> - Participation in Doc Days overall has been rather muted during the
> past couple of months.
> 
> Given these factors, I recommend the following:
> 
> - We cancel the Doc Days for November and December, restarting in
> January with renewed vigor.


+1


From anil@recoil.org Thu Nov 21 11:51:20 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-1.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VjSn1-0003P3-VA (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Thu, 21 Nov 2013 11:51:19 +0000
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1543736 
	*  0.0 HTML_MESSAGE BODY: HTML included in message
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:43674
	helo=dark.recoil.org)
	by ppsw-52.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with smtp id 1VjSn1-00046M-DB (Exim 4.82_3-c0e5623) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Thu, 21 Nov 2013 11:51:19 +0000
Received: (qmail 9202 invoked by uid 634); 21 Nov 2013 11:51:18 -0000
X-Spam-Level: *
X-Spam-Status: No, hits=-1.0 required=5.0
	tests=ALL_TRUSTED,HTML_MESSAGE
X-Spam-Check-By: dark.recoil.org
Received: from host81-149-102-120.in-addr.btopenworld.com (HELO flick.home)
	(81.149.102.120)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Thu, 21 Nov 2013 11:51:18 +0000
Content-Type: multipart/alternative;
	boundary="Apple-Mail=_DDD75BB9-D94B-49AA-8395-5D4D1D781F18"
Mime-Version: 1.0 (Mac OS X Mail 7.0 \(1812\))
Subject: Re: thoughts about block devices in Mirage
From: Anil Madhavapeddy <anil@recoil.org>
In-Reply-To: <CAG_esB08+q+ckmXxtXpvnT1gS8Cnv8ze2KOnOEOa+mVVJGvByA@mail.gmail.com>
Date: Thu, 21 Nov 2013 11:51:08 +0000
Message-Id: <D66AB0CA-E977-4652-8D52-24238B816B47@recoil.org>
References: <CAG_esB08+q+ckmXxtXpvnT1gS8Cnv8ze2KOnOEOa+mVVJGvByA@mail.gmail.com>
To: David Scott <scott.dj@gmail.com>
X-Mailer: Apple Mail (2.1812)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
Cc: Mirage List <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Thu, 21 Nov 2013 11:51:20 -0000
Content-Length: 6726
Lines: 150


--Apple-Mail=_DDD75BB9-D94B-49AA-8395-5D4D1D781F18
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=iso-8859-1

This all looks right to me.  I've merged in most of them (except =
xen-block-driver; made a few minor comments on the pull req).

I'm coming around to the idea that the dynamic device registration is =
generally a good idea rather than a pure Mirari-generator, since it =
covers hotplug too, and makes development much easier (less boilerplate =
code to generate).

I'm currently porting the Release framework to work as a non-root user, =
which will give us an IPC-capable, privdropping Unix backend.  I'll hook =
in a block device message to dynamically "hotplug" new block devices =
into the Unix backend too.  This is useful both for testing and for =
production use in Unix, since it allows incoming file descriptors to be =
sandboxed more easily using frameworks such as Capsicum on FreeBSD.

-anil

On 20 Nov 2013, at 15:37, David Scott <scott.dj@gmail.com> wrote:

> Hi,
>=20
> I've been trying to tidy up the mirage block device interface before =
the big release. I've added a signature BLOCK to mirage-types:
>=20
> https://github.com/mirage/mirage-types/blob/master/lib/v1.ml#L124
>=20
> This has notions of
> * an active/ open device
> * a blocking I/O action
> * a page aligned buffer
> and allows you to read and write from/to a set of buffers.
>=20
> I've proposed a less-abstract version of the signature in =
mirage-platform/xen (but it should be common to both unix and xen):
>=20
> https://github.com/mirage/mirage-platform/pull/73/files
>=20
> which looks like this:
>=20
>  +module type S =3D V1.BLOCK_DEVICE
>  +  with type page_aligned_buffer :=3D Cstruct.t
>  +  and type 'a io :=3D 'a Lwt.t
>=20
> together with a lookup table mapping driver names (strings) to (module =
S) instances. Does this seem like a reasonable approach?
>=20
> In my xen block driver I've added support for this interface and left =
the old code for backwards compat:
>=20
> https://github.com/mirage/ocaml-xen-block-driver/pull/8
>=20
> The idea is the block driver will automatically register itself as a =
driver called "local". A Unix version could do the same. We could add =
things like "iscsi" later.
>=20
> Finally I've proposed some test cases for mirage-skeleton which check =
various read/write operations seem to be working (and failing when they =
should be failing etc):
>=20
> https://github.com/mirage/mirage-skeleton/pull/15
>=20
> Let me know what you think. The next step would be to get this new =
interface working on Unix and then to start working on a filesystem =
interface (for those who like that sort of thing)
>=20
> Cheers,
>=20
> --=20
> Dave Scott


--Apple-Mail=_DDD75BB9-D94B-49AA-8395-5D4D1D781F18
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;
	charset=iso-8859-1

<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html =
charset=3Diso-8859-1"></head><body style=3D"word-wrap: break-word; =
-webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">This =
all looks right to me. &nbsp;I've merged in most of them (except =
xen-block-driver; made a few minor comments on the pull =
req).<div><br></div><div>I'm coming around to the idea that the dynamic =
device registration is generally a good idea rather than a pure =
Mirari-generator, since it covers hotplug too, and makes development =
much easier (less boilerplate code to =
generate).</div><div><br></div><div>I'm currently porting the Release =
framework to work as a non-root user, which will give us an IPC-capable, =
privdropping Unix backend. &nbsp;I'll hook in a block device message to =
dynamically "hotplug" new block devices into the Unix backend too. =
&nbsp;This is useful both for testing and for production use in Unix, =
since it allows incoming file descriptors to be sandboxed more easily =
using frameworks such as Capsicum on =
FreeBSD.</div><div><br></div><div>-anil</div><div><br><div><div>On 20 =
Nov 2013, at 15:37, David Scott &lt;<a =
href=3D"mailto:scott.dj@gmail.com">scott.dj@gmail.com</a>&gt; =
wrote:</div><br class=3D"Apple-interchange-newline"><blockquote =
type=3D"cite"><div dir=3D"ltr">Hi,<div><br></div><div>I've been trying =
to tidy up the mirage block device interface before the big release. =
I've added a signature BLOCK to =
mirage-types:</div><div><br></div><div><a =
href=3D"https://github.com/mirage/mirage-types/blob/master/lib/v1.ml#L124"=
>https://github.com/mirage/mirage-types/blob/master/lib/v1.ml#L124</a></di=
v>
<div><br></div><div>This has notions of</div><div>* an active/ open =
device</div><div>* a blocking I/O action</div><div>* a page aligned =
buffer</div><div>and allows you to read and write from/to a set of =
buffers.</div><div>
<br></div><div>I've proposed a less-abstract version of the signature in =
mirage-platform/xen (but it should be common to both unix and =
xen):</div><div><br></div><div><a =
href=3D"https://github.com/mirage/mirage-platform/pull/73/files">https://g=
ithub.com/mirage/mirage-platform/pull/73/files</a></div>
<div><br></div><div>which looks like =
this:</div><div><br></div><div><div>&nbsp;+module type S =3D =
V1.BLOCK_DEVICE</div><div>&nbsp;+ &nbsp;with type page_aligned_buffer :=3D=
 Cstruct.t</div><div>&nbsp;+ &nbsp;and type 'a io :=3D 'a =
Lwt.t</div><div>
<br></div><div>together with a lookup table mapping driver names =
(strings) to (module S) instances. Does this seem like a reasonable =
approach?</div><div><br></div><div>In my xen block driver I've added =
support for this interface and left the old code for backwards =
compat:</div>
<div><br></div><div><a =
href=3D"https://github.com/mirage/ocaml-xen-block-driver/pull/8">https://g=
ithub.com/mirage/ocaml-xen-block-driver/pull/8</a><br></div><div><br></div=
><div>The idea is the block driver will automatically register itself as =
a driver called "local". A Unix version could do the same. We could add =
things like "iscsi" later.</div>
<div><br></div><div>Finally I've proposed some test cases for =
mirage-skeleton which check various read/write operations seem to be =
working (and failing when they should be failing =
etc):</div><div><br></div><div><a =
href=3D"https://github.com/mirage/mirage-skeleton/pull/15">https://github.=
com/mirage/mirage-skeleton/pull/15</a><br>
</div><div><br></div><div>Let me know what you think. The next step =
would be to get this new interface working on Unix and then to start =
working on a filesystem interface (for those who like that sort of =
thing)</div><div>
<br></div><div>Cheers,</div><div><br></div>-- <br>Dave Scott
</div></div>
</blockquote></div><br></div></body></html>=

--Apple-Mail=_DDD75BB9-D94B-49AA-8395-5D4D1D781F18--


From Chris.Greenhalgh@nottingham.ac.uk Thu Nov 21 14:39:05 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-1.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VjVPN-0003lZ-KE (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Chris.Greenhalgh@nottingham.ac.uk>);
	Thu, 21 Nov 2013 14:39:05 +0000
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1543736 
	*  0.0 HTML_MESSAGE BODY: HTML included in message
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from engine04-20433-4.icritical.com ([195.62.217.152]:33366)
	by ppsw-52.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with smtp id 1VjVPM-0001vf-Dx (Exim 4.82_3-c0e5623) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Chris.Greenhalgh@nottingham.ac.uk>);
	Thu, 21 Nov 2013 14:39:05 +0000
Received: (qmail 31101 invoked from network); 21 Nov 2013 14:38:59 -0000
Received: from localhost (127.0.0.1)
	by engine04-20433-4.icritical.com with SMTP; 21 Nov 2013 14:38:59 -0000
Received: from engine04-20433-4.icritical.com ([127.0.0.1])
	by localhost (engine04-20433-4.icritical.com [127.0.0.1]) (amavisd-new,
	port 10024) with SMTP id 31072-01 for <cl-mirage@lists.cam.ac.uk>;
	Thu, 21 Nov 2013 14:38:58 +0000 (GMT)
Received: (qmail 30366 invoked by uid 599); 21 Nov 2013 14:38:17 -0000
Received: from unknown (HELO smtp3.nottingham.ac.uk) (128.243.44.55)
	by engine04-20433-4.icritical.com (qpsmtpd/0.28) with ESMTP;
	Thu, 21 Nov 2013 14:38:17 +0000
Received: from uiwexhub02.ad.nottingham.ac.uk ([128.243.15.132])
	by smtp3.nottingham.ac.uk with esmtps (TLSv1:AES128-SHA:128)
	(Exim 4.77) (envelope-from <Chris.Greenhalgh@nottingham.ac.uk>)
	id 1VjVOe-0003va-EV
	for cl-mirage@lists.cam.ac.uk; Thu, 21 Nov 2013 14:38:20 +0000
From: Christopher Greenhalgh <Chris.Greenhalgh@nottingham.ac.uk>
To: David Scott <scott.dj@gmail.com>
Date: Thu, 21 Nov 2013 14:38:19 +0000
Subject: RE: thoughts about block devices in Mirage
Thread-Topic: thoughts about block devices in Mirage
Thread-Index: Ac7mslsaGCAZ+PFKQtuhaYDT3pgMcwAFAwZA
Message-ID: <4C20415C7327A849961F3B8421413725010CD7CBC6AC@EXCHANGE1.ad.nottingham.ac.uk>
References: <CAG_esB08+q+ckmXxtXpvnT1gS8Cnv8ze2KOnOEOa+mVVJGvByA@mail.gmail.com>
	<D66AB0CA-E977-4652-8D52-24238B816B47@recoil.org>
In-Reply-To: <D66AB0CA-E977-4652-8D52-24238B816B47@recoil.org>
Accept-Language: en-US, en-GB
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
acceptlanguage: en-US, en-GB
Content-Type: multipart/alternative;
	boundary="_000_4C20415C7327A849961F3B8421413725010CD7CBC6ACEXCHANGE1ad_"
MIME-Version: 1.0
X-Virus-Scanned: by iCritical at engine04-20433-4.icritical.com
Cc: Mirage List <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Thu, 21 Nov 2013 14:39:05 -0000
Content-Length: 14156
Lines: 278

--_000_4C20415C7327A849961F3B8421413725010CD7CBC6ACEXCHANGE1ad_
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Might be worth adding a 'sync' operation to the abstract signature, even if=
 it doesn't do anything with initial drivers
I would find it useful if the comments clarified any general constraints/ex=
pectations on the size(s) of buffers for read and write, e.g. arbitrary len=
gth in bytes? Exactly one sector? Any multiple of sector size? A specific m=
ultiple of sector size? Up to any size?

Cheers
Chris


From: cl-mirage-bounces@lists.cam.ac.uk [mailto:cl-mirage-bounces@lists.cam=
.ac.uk] On Behalf Of Anil Madhavapeddy
Sent: 21 November 2013 11:51
To: David Scott
Cc: Mirage List
Subject: Re: thoughts about block devices in Mirage

This all looks right to me.  I've merged in most of them (except xen-block-=
driver; made a few minor comments on the pull req).

I'm coming around to the idea that the dynamic device registration is gener=
ally a good idea rather than a pure Mirari-generator, since it covers hotpl=
ug too, and makes development much easier (less boilerplate code to generat=
e).

I'm currently porting the Release framework to work as a non-root user, whi=
ch will give us an IPC-capable, privdropping Unix backend.  I'll hook in a =
block device message to dynamically "hotplug" new block devices into the Un=
ix backend too.  This is useful both for testing and for production use in =
Unix, since it allows incoming file descriptors to be sandboxed more easily=
 using frameworks such as Capsicum on FreeBSD.

-anil

On 20 Nov 2013, at 15:37, David Scott <scott.dj@gmail.com<mailto:scott.dj@g=
mail.com>> wrote:


Hi,

I've been trying to tidy up the mirage block device interface before the bi=
g release. I've added a signature BLOCK to mirage-types:

https://github.com/mirage/mirage-types/blob/master/lib/v1.ml#L124

This has notions of
* an active/ open device
* a blocking I/O action
* a page aligned buffer
and allows you to read and write from/to a set of buffers.

I've proposed a less-abstract version of the signature in mirage-platform/x=
en (but it should be common to both unix and xen):

https://github.com/mirage/mirage-platform/pull/73/files

which looks like this:

 +module type S =3D V1.BLOCK_DEVICE
 +  with type page_aligned_buffer :=3D Cstruct.t
 +  and type 'a io :=3D 'a Lwt.t

together with a lookup table mapping driver names (strings) to (module S) i=
nstances. Does this seem like a reasonable approach?

In my xen block driver I've added support for this interface and left the o=
ld code for backwards compat:

https://github.com/mirage/ocaml-xen-block-driver/pull/8

The idea is the block driver will automatically register itself as a driver=
 called "local". A Unix version could do the same. We could add things like=
 "iscsi" later.

Finally I've proposed some test cases for mirage-skeleton which check vario=
us read/write operations seem to be working (and failing when they should b=
e failing etc):

https://github.com/mirage/mirage-skeleton/pull/15

Let me know what you think. The next step would be to get this new interfac=
e working on Unix and then to start working on a filesystem interface (for =
those who like that sort of thing)

Cheers,

--
Dave Scott


This message and any attachment are intended solely for the addressee and m=
ay contain confidential information. If you have received this message in er=
ror, please send it back to me, and immediately delete it.   Please do not u=
se, copy or disclose the information contained in this message or in any att=
achment.  Any views or opinions expressed by the author of this email do not=
 necessarily reflect the views of the University of Nottingham.=0D=0A
=0D=0A
This message has been checked for viruses but the contents of an attachment=
=0D=0A
may still contain software viruses which could damage your computer system,=
 you are advised to perform your own checks. Email communications with the U=
niversity of Nottingham may be monitored as permitted by UK legislation.=0D=0A
=0D=0A
=0D=0A
=0D=0A
=0D=0A

--_000_4C20415C7327A849961F3B8421413725010CD7CBC6ACEXCHANGE1ad_
Content-Type: text/html; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<html xmlns:v=3D"urn:schemas-microsoft-com:vml" xmlns:o=3D"urn:schemas-micr=
osoft-com:office:office" xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" xmlns=3D"http:=
//www.w3.org/TR/REC-html40"><head><meta http-equiv=3DContent-Type content=
=3D"text/html; charset=3Dus-ascii"><meta name=3DGenerator content=3D"Micros=
oft Word 12 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
	{font-family:Tahoma;
	panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0cm;
	margin-bottom:.0001pt;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-priority:99;
	color:purple;
	text-decoration:underline;}
span.EmailStyle17
	{mso-style-type:personal-reply;
	font-family:"Calibri","sans-serif";
	color:#1F497D;}
.MsoChpDefault
	{mso-style-type:export-only;
	font-size:10.0pt;}
@page WordSection1
	{size:612.0pt 792.0pt;
	margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
	{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1" />
</o:shapelayout></xml><![endif]--></head><body lang=3DEN-GB link=3Dblue vli=
nk=3Dpurple><div class=3DWordSection1><p class=3DMsoNormal><span style=3D'f=
ont-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Might be =
worth adding a &#8216;sync&#8217; operation to the abstract signature, even=
 if it doesn&#8217;t do anything with initial drivers <o:p></o:p></span></p=
><p class=3DMsoNormal><span style=3D'font-size:11.0pt;font-family:"Calibri"=
,"sans-serif";color:#1F497D'>I would find it useful if the comments clarifi=
ed any general constraints/expectations on the size(s) of buffers for read =
and write, e.g. arbitrary length in bytes? Exactly one sector? Any multiple=
 of sector size? A specific multiple of sector size? Up to any size?<o:p></=
o:p></span></p><p class=3DMsoNormal><span style=3D'font-size:11.0pt;font-fa=
mily:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p c=
lass=3DMsoNormal><span style=3D'font-size:11.0pt;font-family:"Calibri","san=
s-serif";color:#1F497D'>Cheers<o:p></o:p></span></p><p class=3DMsoNormal><s=
pan style=3D'font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F4=
97D'>Chris<o:p></o:p></span></p><p class=3DMsoNormal><span style=3D'font-si=
ze:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:=
p></span></p><p class=3DMsoNormal><span style=3D'font-size:11.0pt;font-fami=
ly:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><div><=
div style=3D'border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0=
cm 0cm'><p class=3DMsoNormal><b><span lang=3DEN-US style=3D'font-size:10.0p=
t;font-family:"Tahoma","sans-serif"'>From:</span></b><span lang=3DEN-US sty=
le=3D'font-size:10.0pt;font-family:"Tahoma","sans-serif"'> cl-mirage-bounce=
s@lists.cam.ac.uk [mailto:cl-mirage-bounces@lists.cam.ac.uk] <b>On Behalf O=
f </b>Anil Madhavapeddy<br><b>Sent:</b> 21 November 2013 11:51<br><b>To:</b=
> David Scott<br><b>Cc:</b> Mirage List<br><b>Subject:</b> Re: thoughts abo=
ut block devices in Mirage<o:p></o:p></span></p></div></div><p class=3DMsoN=
ormal><o:p>&nbsp;</o:p></p><p class=3DMsoNormal>This all looks right to me.=
 &nbsp;I've merged in most of them (except xen-block-driver; made a few min=
or comments on the pull req).<o:p></o:p></p><div><p class=3DMsoNormal><o:p>=
&nbsp;</o:p></p></div><div><p class=3DMsoNormal>I'm coming around to the id=
ea that the dynamic device registration is generally a good idea rather tha=
n a pure Mirari-generator, since it covers hotplug too, and makes developme=
nt much easier (less boilerplate code to generate).<o:p></o:p></p></div><di=
v><p class=3DMsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=3DMsoNormal=
>I'm currently porting the Release framework to work as a non-root user, wh=
ich will give us an IPC-capable, privdropping Unix backend. &nbsp;I'll hook=
 in a block device message to dynamically &quot;hotplug&quot; new block dev=
ices into the Unix backend too. &nbsp;This is useful both for testing and f=
or production use in Unix, since it allows incoming file descriptors to be =
sandboxed more easily using frameworks such as Capsicum on FreeBSD.<o:p></o=
:p></p></div><div><p class=3DMsoNormal><o:p>&nbsp;</o:p></p></div><div><p c=
lass=3DMsoNormal>-anil<o:p></o:p></p></div><div><p class=3DMsoNormal><o:p>&=
nbsp;</o:p></p><div><div><p class=3DMsoNormal>On 20 Nov 2013, at 15:37, Dav=
id Scott &lt;<a href=3D"mailto:scott.dj@gmail.com">scott.dj@gmail.com</a>&g=
t; wrote:<o:p></o:p></p></div><p class=3DMsoNormal><br><br><o:p></o:p></p><=
div><p class=3DMsoNormal>Hi,<o:p></o:p></p><div><p class=3DMsoNormal><o:p>&=
nbsp;</o:p></p></div><div><p class=3DMsoNormal>I've been trying to tidy up =
the mirage block device interface before the big release. I've added a sign=
ature BLOCK to mirage-types:<o:p></o:p></p></div><div><p class=3DMsoNormal>=
<o:p>&nbsp;</o:p></p></div><div><p class=3DMsoNormal><a href=3D"https://git=
hub.com/mirage/mirage-types/blob/master/lib/v1.ml#L124">https://github.com/=
mirage/mirage-types/blob/master/lib/v1.ml#L124</a><o:p></o:p></p></div><div=
><p class=3DMsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=3DMsoNormal>=
This has notions of<o:p></o:p></p></div><div><p class=3DMsoNormal>* an acti=
ve/ open device<o:p></o:p></p></div><div><p class=3DMsoNormal>* a blocking =
I/O action<o:p></o:p></p></div><div><p class=3DMsoNormal>* a page aligned b=
uffer<o:p></o:p></p></div><div><p class=3DMsoNormal>and allows you to read =
and write from/to a set of buffers.<o:p></o:p></p></div><div><p class=3DMso=
Normal><o:p>&nbsp;</o:p></p></div><div><p class=3DMsoNormal>I've proposed a=
 less-abstract version of the signature in mirage-platform/xen (but it shou=
ld be common to both unix and xen):<o:p></o:p></p></div><div><p class=3DMso=
Normal><o:p>&nbsp;</o:p></p></div><div><p class=3DMsoNormal><a href=3D"http=
s://github.com/mirage/mirage-platform/pull/73/files">https://github.com/mir=
age/mirage-platform/pull/73/files</a><o:p></o:p></p></div><div><p class=3DM=
soNormal><o:p>&nbsp;</o:p></p></div><div><p class=3DMsoNormal>which looks l=
ike this:<o:p></o:p></p></div><div><p class=3DMsoNormal><o:p>&nbsp;</o:p></=
p></div><div><div><p class=3DMsoNormal>&nbsp;+module type S =3D V1.BLOCK_DE=
VICE<o:p></o:p></p></div><div><p class=3DMsoNormal>&nbsp;+ &nbsp;with type =
page_aligned_buffer :=3D Cstruct.t<o:p></o:p></p></div><div><p class=3DMsoN=
ormal>&nbsp;+ &nbsp;and type 'a io :=3D 'a Lwt.t<o:p></o:p></p></div><div><=
p class=3DMsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=3DMsoNormal>to=
gether with a lookup table mapping driver names (strings) to (module S) ins=
tances. Does this seem like a reasonable approach?<o:p></o:p></p></div><div=
><p class=3DMsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=3DMsoNormal>=
In my xen block driver I've added support for this interface and left the o=
ld code for backwards compat:<o:p></o:p></p></div><div><p class=3DMsoNormal=
><o:p>&nbsp;</o:p></p></div><div><p class=3DMsoNormal><a href=3D"https://gi=
thub.com/mirage/ocaml-xen-block-driver/pull/8">https://github.com/mirage/oc=
aml-xen-block-driver/pull/8</a><o:p></o:p></p></div><div><p class=3DMsoNorm=
al><o:p>&nbsp;</o:p></p></div><div><p class=3DMsoNormal>The idea is the blo=
ck driver will automatically register itself as a driver called &quot;local=
&quot;. A Unix version could do the same. We could add things like &quot;is=
csi&quot; later.<o:p></o:p></p></div><div><p class=3DMsoNormal><o:p>&nbsp;<=
/o:p></p></div><div><p class=3DMsoNormal>Finally I've proposed some test ca=
ses for mirage-skeleton which check various read/write operations seem to b=
e working (and failing when they should be failing etc):<o:p></o:p></p></di=
v><div><p class=3DMsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=3DMsoN=
ormal><a href=3D"https://github.com/mirage/mirage-skeleton/pull/15">https:/=
/github.com/mirage/mirage-skeleton/pull/15</a><o:p></o:p></p></div><div><p =
class=3DMsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=3DMsoNormal>Let =
me know what you think. The next step would be to get this new interface wo=
rking on Unix and then to start working on a filesystem interface (for thos=
e who like that sort of thing)<o:p></o:p></p></div><div><p class=3DMsoNorma=
l><o:p>&nbsp;</o:p></p></div><div><p class=3DMsoNormal>Cheers,<o:p></o:p></=
p></div><div><p class=3DMsoNormal><o:p>&nbsp;</o:p></p></div><p class=3DMso=
Normal>-- <br>Dave Scott <o:p></o:p></p></div></div></div><p class=3DMsoNor=
mal><o:p>&nbsp;</o:p></p></div></div>
<br>=
<p>This message and any attachment are intended solely for the addressee an=
d may contain confidential information. If you have received this message in=
 error, please send it back to me, and immediately delete it.&nbsp;&nbsp; Pl=
ease do not use, copy or disclose the information contained in this message =
or in any attachment.&nbsp; Any views or opinions expressed by the author of=
 this email do not necessarily reflect the views of the University of Nottin=
gham.</p><p>This message has been checked for viruses but the contents of an=
 attachment may still contain software viruses which could damage your compu=
ter system, you are advised to perform your own checks. Email communications=
 with the University of Nottingham may be monitored as permitted by UK legis=
lation.</p>
<br>=
</body></html>=

--_000_4C20415C7327A849961F3B8421413725010CD7CBC6ACEXCHANGE1ad_--


From konrad.wilk@oracle.com Mon Nov 25 14:36:03 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-1.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VkxGd-0006k9-9o (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <konrad.wilk@oracle.com>); Mon, 25 Nov 2013 14:36:03 +0000
X-Cam-SpamDetails: score -2.3 from SpamAssassin-3.3.2-1544945 
	* -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at http://www.dnswl.org/,
	*      medium trust
	*      [156.151.31.81 listed in list.dnswl.dnsbl.ja.net]
	* -0.0 RP_MATCHES_RCVD Envelope sender domain matches handover relay
	*      domain
	*  0.0 UNPARSEABLE_RELAY Informational: message has unparseable relay
	*      lines
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from userp1040.oracle.com ([156.151.31.81]:28832)
	by ppsw-52.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with esmtps (TLSv1:DHE-RSA-AES256-SHA:256)
	id 1VkxGc-0002oo-Eg (Exim 4.82_3-c0e5623) for cl-mirage@lists.cam.ac.uk
	(return-path <konrad.wilk@oracle.com>); Mon, 25 Nov 2013 14:36:03 +0000
Received: from ucsinet21.oracle.com (ucsinet21.oracle.com [156.151.31.93])
	by userp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with
	ESMTP id rAPEZwYN003607
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK);
	Mon, 25 Nov 2013 14:35:59 GMT
Received: from aserz7021.oracle.com (aserz7021.oracle.com [141.146.126.230])
	by ucsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id
	rAPEZuZX028295
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO);
	Mon, 25 Nov 2013 14:35:57 GMT
Received: from abhmp0001.oracle.com (abhmp0001.oracle.com [141.146.116.7])
	by aserz7021.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id
	rAPEZuUg022634; Mon, 25 Nov 2013 14:35:56 GMT
Received: from phenom.dumpdata.com (/50.195.21.189)
	by default (Oracle Beehive Gateway v4.0)
	with ESMTP ; Mon, 25 Nov 2013 06:35:56 -0800
Received: by phenom.dumpdata.com (Postfix, from userid 1000)
	id 744181C01FE; Mon, 25 Nov 2013 09:35:55 -0500 (EST)
Date: Mon, 25 Nov 2013 09:35:55 -0500
From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: Lars Kurth <lars.kurth@xen.org>
Subject: Re: [Xen-devel] Developer Dashboards for Xen Project sub-projects
	(need input)
Message-ID: <20131125143555.GA6095@phenom.dumpdata.com>
References: <52790B64.2060101@xen.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <52790B64.2060101@xen.org>
User-Agent: Mutt/1.5.21 (2010-09-15)
X-Source-IP: ucsinet21.oracle.com [156.151.31.93]
Cc: "xen-api@lists.xen.org" <xen-api@lists.xen.org>,
	"cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>,
	"xen-devel@lists.xen.org" <xen-devel@lists.xen.org>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Mon, 25 Nov 2013 14:36:03 -0000
Content-Length: 2602
Lines: 61

. snip..
> I wanted to start a discussion about this and what would be useful.
> For the Hypervisor for example, we could track activity on xen.git
> and osstest.git on master as well as stable branches (not sure
> whether there is any point in tracking activity on staging
> branches). There is also stuff they can do such as map
> activity/authors/<almost anything you may want to ask> to code, etc.
> See the example below which maps authors to kernel components.
> 
> The mailing lists plugins are quite sophisticated apparently (they
> have support for the Linux kernel and its workflow) and have a lot
> of filtering and tagging capabilities. For example it should be
> possible to
> * Model our code review process and link it to commits (assuming
> that in the majority of cases there is a mapping between patch
> series and commit, e.g. via commit message or similar). I believe in
> our case we do have a mapping which would enable this.
> * It can in theory handle osstest mails and xenbugs, etc. - although
> this will probably require customization which will add extra set-up
> cost
> * We can track specific keywords in list conversations (e.g. arm,
> etc. as useful) and create custom views if we want to
> 
> There is probably a lot more which can be done, but I believe that
> git activity, code review and list activity are most valuable for
> now. We may be able to use this for PVOPS and other upstreams too,
> but usefulness is an open question.

pvops is mostly Linus upstream. We have some patches - but every
merge window we flush them out to Linus.

> 
> We can do similar things for XAPI and Mirage.
> 
> So what I am looking for is
> a) a discussion on the list on what might be useful, and
> b) a number of volunteers (ideally one per project) who will work
> with me and the vendor getting this off the ground

I like the idea of getting an idea of 'we are getting less and less
commits in this area' as a way to figure out what needs attention
(or perhaps no need).

But not every week, not every month either - quaterly is nice enough.
Or maybe once a year (say at Xen Summit?). But that should be possible
already right? Or is it a major pain to create those nice graphs?

What is the overall goal?

>From my PoV my feeling is that:
 a). I need to hire more folks
 b). I have more things we want to do than there are
     developers.

And I think the same is true for everybody else. But I don't know
if this dashboard will help in this regards?

Or is it a way to use that information to figure out overall
trends of changes + test coverage -> good/bad patch ratio?



From lars.kurth.xen@gmail.com Tue Nov 26 13:22:03 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-1.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VlIaY-0005Xe-Vv (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk (return-path <lars.kurth.xen@gmail.com>);
	Tue, 26 Nov 2013 13:22:03 +0000
X-Cam-SpamDetails: score -0.6 from SpamAssassin-3.3.2-1545174 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.215.182 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (lars.kurth.xen[at]gmail.com)
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-ea0-f182.google.com ([209.85.215.182]:53953)
	by ppsw-32.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with esmtps (TLSv1:RC4-SHA:128)
	id 1VlIaV-0005PC-36 (Exim 4.82_3-c0e5623) for cl-mirage@lists.cam.ac.uk
	(return-path <lars.kurth.xen@gmail.com>);
	Tue, 26 Nov 2013 13:22:01 +0000
Received: by mail-ea0-f182.google.com with SMTP id o10so4874486eaj.41
	for <cl-mirage@lists.cam.ac.uk>; Tue, 26 Nov 2013 05:21:59 -0800 (PST)
X-Received: by 10.15.24.142 with SMTP id j14mr2496803eeu.52.1385472119411;
	Tue, 26 Nov 2013 05:21:59 -0800 (PST)
Received: from [172.16.25.10] ([2.122.219.75])
	by mx.google.com with ESMTPSA id h8sm8959747eew.16.2013.11.26.05.21.57
	for <multiple recipients>
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Tue, 26 Nov 2013 05:21:58 -0800 (PST)
Sender: Lars Kurth <lars.kurth.xen@gmail.com>
Message-ID: <5294A073.9000209@xen.org>
Date: Tue, 26 Nov 2013 13:21:55 +0000
From: Lars Kurth <lars.kurth@xen.org>
User-Agent: Mozilla/5.0 (Windows NT 6.1;
	rv:24.0) Gecko/20100101 Thunderbird/24.1.1
MIME-Version: 1.0
To: "xen-devel@lists.xen.org" <xen-devel@lists.xen.org>, 
	"xen-api@lists.xen.org" <xen-api@lists.xen.org>,
	"cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>
Subject: Testing for the Xen Project
Content-Type: text/plain; charset=windows-1252; format=flowed
Content-Transfer-Encoding: 8bit
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
Reply-To: lars.kurth@xen.org
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 26 Nov 2013 13:22:03 -0000
Content-Length: 9254
Lines: 197

Hi all,

you probably have all heard by now that the Xen Project Advisory Board 
(a group of vendors who provide funds to the Xen Project that are 
intended to be used for the good of the community) recently created the 
Test Framework Working 
Group.http://wiki.xenproject.org/wiki/AB_WG/Test_Frameworkcontains more 
information about the group. The working group had its first meeting a 
few weeks ago and one of the actions I had was to kick off a thread on 
development lists to figure out what would help the developer community.

I was planning to kick off this thread with some questions and options, 
which reflect some discussions I had with individuals in the community, 
various meetings (WG and AB meetings), etc. which I condensed into a 
picture.

This reflects my personal opinion (not a Citrix opinion) and is merely 
intended to get a discussion going. Feel free to pick it apart: I won’t 
be upset.

First, I wanted to clear up a few misconceptions that I have heard from 
a few people:

* The Advisory Board has funds that can be used to create an 
independently hosted test infrastructure to help the developer 
community. However, funds are limited. Thus, it is important that we do 
what is right for the Xen community in the short term and the longer 
term. Otherwise, we will burn funds that could be used to help the Xen 
community in other ways.
* The Test Framework Working Group is made up of people employed by 
vendors who have some experience in testing.
* There is no intention to prescribe a test environment that you then 
have to use. Advisory Board members made clear to me that they want to 
make sure that what we end up with a solution that works for you.
* At the Xen Developer Summit two different solutions for system testing 
were presented. The intention was to explain what is there and what we 
can use going forward. A presentation on OSSTest which runs regularly 
today was given. And one for XenRT, for which there is a plan to get a 
small 3 box system up and running that can be used for you to look at. 
Citrix volunteered to set this up at its own cost.
* Just to be clear: what works for you may be one of these, none of 
these, both of them, …
* There may also be different answers in the short and the long run.
* At the end of the day, different community members will have different 
views. Also the Advisory Board members who provide the funds, will also 
have specific interests that they will push for. Thus, in all 
likelihood, we will have to find a good enough compromise.
* The vast majority of Advisory Board members care about the Hypervisor 
(and not so much about XAPI and Mirage OS). Thus, it is likely that the 
focus of the test system would be the Hypervisor.

So let me try and condense some of the arguments and opinions I heard 
and information that is around. This list may be incomplete.

== Work Flow ==

I added this section, because some members of the community and the 
working group had prior experience with attempts to introduce a test 
infrastructure for an open source community in the past, and these may 
not have worked as well as hoped. I made up some of the terminology.

*Local testing*: the basic idea here is for a developer to write their 
code and be able to run some tests on their machine locally as part of 
their development workflow. We do have same capability to do this with 
OSSTest 
(seehttp://blog.xen.org/index.php/2013/09/30/osstest-standalone-mode-step-by-step/), 
but the drawback is that this only works on the developers machine. This 
may be good enough. We could “emulate” different environments using 
QEMU, but that is likely to be slow.

*System testing*: both OSSTest and XenRT are essentially system test 
environments, which would be run on code that is already in the Xen 
mainline (or a staging branch). This is really great for regression 
testing on different hardware platforms, but does not match the typical 
workflow in the community:
a) code developed locally
b) code submitted to list for review
c) code reviewed and then submitted by the committer to the staging 
branch/mainline
d) only then tests are run
e) if tests fail, the whole process starts again
One of the issues here is that the elapsed time between development and 
the tests being run. Another issue we have with the current set-up is 
that OSSTest is currently hosted at Citrix, which makes difficult for 
community members to log into a machine and investigate issues. 
Admittedly this can fixed by having the system test hosted somewhere 
neutral (some sort of access control would still remain).

*Test on demand:* this would be a mixture between local testing and 
system testing. It can probably be implemented in both OSSTest and 
XenRT, although I believe XenRT is a closer to this model already. The 
workflow would look like this:
a) code developed locally
b) developer checks working prototype into their personal git branch 
(which would need to be accessible from the web)
c) developer submits a job to the test farm which checks out and builds 
code and runs a set of interesting (or new) tests on some machines of 
different architectures. New tests would probably need to be on the git 
branch
d) if the test fail, the cycle starts again
d) if all works well, code is submitted for review as normal (and test 
results could be attached)
This would only really work, if the interface into the system is easy to 
use and tests are run fast enough. Access control, etc. would be similar 
to system test. IMHO, this would be a nice mid to long-term goal, 
assuming it could be made to work with the funds we have.

== OSSTest ==

What runs now and thus easiest to get started on

More Info
*http://blog.xen.org/index.php/2013/02/02/xen-automatic-test-system-osstest/
*http://blog.xen.org/index.php/2013/09/30/osstest-standalone-mode-step-by-step/
*http://www.youtube.com/watch?v=JxTFZIwZzJ8

Problems:
* Runs on Citrix premises (thus general access is an issue)
* Ian Jackson is acting as sys-admin in his spare time. But, the 
Advisory Board could provide resource to fix this
* Basic test coverage
* Not a lot of documentation right now (which is a bit of a barrier to 
adoption)

Risks
* Not well understood (maybe you guys can fill the gaps)

== XenRT ==

Used by Citrix for XenServer testing. Tarballs have been made available 
by Citrix under a BSD license. But the code has not been put into live 
repos: my understanding is that Citrix would do this, if the Xen 
community believes this is valuable.

More Info
*http://wiki.xenproject.org/wiki/Getting_Started_with_XenRT
*http://www.youtube.com/watch?v=s11_Iw7AI_U

Problems:
* No publicly accessible demo instance (this is being worked on – to be 
hosted on a small test bed at http://osuosl.org/ – work sponsored by Citrix)
* Currently does not yet support “xl” (a “xl” connector is being worked 
on – sponsored by Citrix)
* Code not in yet public repo

Potentially Interesting Properties:
* Very large test coverage (including performance, security and other 
tests). Most of them should work once an “xl” connector is in place
* Been in production at scale for a long time: thus well understood
* XenRT has a lot of provisioning functionality and supports a 
distributed architecture: aka the ability to manage machines in 
different locations (data centres). The detail is abstracted away from 
users. This creates some interesting possibilities. For example:
** Hardware Vendors on the Advisory Board could provide hardware to the 
community on their site (assuming that these can be hosted outside a 
firewall). Some HW vendors on the AB indicated that this would indeed be 
doable.
** This would open up the opportunity to make available cutting edge or 
“unusual” HW for testing to the community.
** It would also mean that machines that would be expensive to ship and 
host by the project, could be hosted on premise by AB vendors
* XenRT has the capability to “inject” some test code on the fly (i.e. 
the test code is attached to a job that is submitted).
* I checked this with the XenRT devs and the *Test on demand* approach 
should be relatively easy to implement, but does not exist.

I do not know what of the above would apply to OSSTest.

Risks
* Complexity
* The cost of supporting such a system may be too high
* Not in use by the community today
* Not clear whether a *local test* version of XenRT is feasible

== Support and Ownership ==

Whatever solution we go for, needs to be properly funded and looked 
after. This is understood and the intention would be for the Xen Project 
(aka Advisory Board) to fund a Linux Foundation employee to do this on 
behalf of the Xen Project: this is a bit like Greg KH and others being 
LF employees working on the kernel. Some vendors on the Advisory Board 
indicated that providing Colo/hosting space and HW would be possible in 
principle, which could help keeping the cost manageable.

== Access ==

Any central system, has of course the issue of access control and 
managing users. This is obviously a barrier to entry (if we do not have 
also a local test mechanism). Am wondering how other FOSS communities 
handle this. This should certainly be the job of the Test Framework 
owner (see above).

Best Regards

Lars



From dario.faggioli@citrix.com Wed Nov 27 01:57:38 2013
Received: from ppsw-33.csi.cam.ac.uk ([131.111.8.133])
	by lists-1.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VlUNm-0001Bv-MT (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk (return-path <dario.faggioli@citrix.com>);
	Wed, 27 Nov 2013 01:57:38 +0000
X-Cam-SpamDetails: score -5.0 from SpamAssassin-3.3.2-1545174 
	* -0.0 RP_MATCHES_RCVD Envelope sender domain matches handover relay
	*      domain
	* -5.0 RCVD_IN_DNSWL_HI RBL: Sender listed at http://www.dnswl.org/,
	high *      trust
	*      [66.165.176.89 listed in list.dnswl.dnsbl.ja.net]
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from smtp.citrix.com ([66.165.176.89]:8103)
	by ppsw-33.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with esmtps (TLSv1:RC4-SHA:128)
	id 1VlUNl-0000sC-iP (Exim 4.82_3-c0e5623) for cl-mirage@lists.cam.ac.uk
	(return-path <dario.faggioli@citrix.com>);
	Wed, 27 Nov 2013 01:57:38 +0000
X-IronPort-AV: E=Sophos;i="4.93,779,1378857600"; 
	d="asc'?scan'208";a="78490361"
Received: from accessns.citrite.net (HELO FTLPEX01CL02.citrite.net)
	([10.9.154.239])
	by FTLPIPO01.CITRIX.COM with ESMTP; 27 Nov 2013 01:57:12 +0000
Received: from [127.0.0.1] (10.80.16.47) by smtprelay.citrix.com
	(10.13.107.79) with Microsoft SMTP Server id 14.2.342.4;
	Tue, 26 Nov 2013 20:57:11 -0500
Message-ID: <1385517429.15201.106.camel@Solace>
Subject: Re: [Xen-devel] Developer Dashboards for Xen Project sub-projects
	(need input)
From: Dario Faggioli <dario.faggioli@citrix.com>
To: <lars.kurth@xen.org>
Date: Wed, 27 Nov 2013 02:57:09 +0100
In-Reply-To: <52790B64.2060101@xen.org>
References: <52790B64.2060101@xen.org>
Content-Type: multipart/signed; micalg=pgp-sha1;
	protocol="application/pgp-signature"; boundary="=-t0aIG2ifztA2bG5uAClS"
X-Mailer: Evolution 3.8.5 (3.8.5-2.fc19) 
MIME-Version: 1.0
X-DLP: MIA2
Cc: "xen-api@lists.xen.org" <xen-api@lists.xen.org>, "cl-mirage@lists.cam.ac.uk
	List" <cl-mirage@lists.cam.ac.uk>,
	"xen-devel@lists.xen.org" <xen-devel@lists.xen.org>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Wed, 27 Nov 2013 01:57:38 -0000
Content-Length: 2358
Lines: 68

--=-t0aIG2ifztA2bG5uAClS
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On mar, 2013-11-05 at 15:14 +0000, Lars Kurth wrote:
> I have been talking to a 3rd party vendor about creating a community
> development dashboard for the Xen Project at OWF and LinuxCon EU and
> found a vendor in the community to fund a beta. This is a relatively=20
> [..]
> Examples are:
>       * http://activity.openstack.org/dash/newbrowser/browser/
>       * http://korma.wmflabs.org/browser/ (mediawiki)
>=20
Wow... How shiny! I like it. :-)

> The idea would be to create a dashboard for the Hypervisor, XAPI and
> Mirage projects focussing on repos, lists and code reviews first. We
> can extend out to other areas if this is attractive. This would make
> my life easier and the dashboard has some functionality to spot
> community problems.
>=20
Yep, I only gave the examples above a quick glance, but it looks like
there is a lot of potentially useful information.

> I wanted to start a discussion about this and what would be useful.
>
I think it could very well be.

> We can do similar things for XAPI and Mirage.
>=20
>=20
> So what I am looking for is=20
> a) a discussion on the list on what might be useful, and=20
> b) a number of volunteers (ideally one per project) who will work with
> me and the vendor getting this off the ground
>=20
Can we have some more info (if you have them yourself) on what it is
that the volunteers would need to do?

I like this thing and, in principle, I'd like to help, but it would be
nice to know what kind of effort is it, to make sure I'll actually have
time for it, and that it matches my competences.

Regards,
Dario

--=20
<<This happens because I choose it to happen!>> (Raistlin Majere)
-----------------------------------------------------------------
Dario Faggioli, Ph.D, http://about.me/dario.faggioli
Senior Software Engineer, Citrix Systems R&D Ltd., Cambridge (UK)


--=-t0aIG2ifztA2bG5uAClS
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: This is a digitally signed message part
Content-Transfer-Encoding: 7bit

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.15 (GNU/Linux)

iEYEABECAAYFAlKVUXUACgkQk4XaBE3IOsRlQwCfWBj4EMX5ZExUu0WiKyqPsHiD
qrQAoI9738jH28H9RU2YdocIdpCqd6Df
=dAoK
-----END PGP SIGNATURE-----

--=-t0aIG2ifztA2bG5uAClS--


From dario.faggioli@citrix.com Wed Nov 27 02:20:04 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-1.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VlUjU-0001WQ-8z (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk (return-path <dario.faggioli@citrix.com>);
	Wed, 27 Nov 2013 02:20:04 +0000
X-Cam-SpamDetails: score -5.0 from SpamAssassin-3.3.2-1545174 
	* -0.0 RP_MATCHES_RCVD Envelope sender domain matches handover relay
	*      domain
	* -5.0 RCVD_IN_DNSWL_HI RBL: Sender listed at http://www.dnswl.org/,
	high *      trust
	*      [66.165.176.89 listed in list.dnswl.dnsbl.ja.net]
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from smtp.citrix.com ([66.165.176.89]:22491)
	by ppsw-52.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with esmtps (TLSv1:RC4-SHA:128)
	id 1VlUjT-0005HA-Dz (Exim 4.82_3-c0e5623) for cl-mirage@lists.cam.ac.uk
	(return-path <dario.faggioli@citrix.com>);
	Wed, 27 Nov 2013 02:20:04 +0000
X-IronPort-AV: E=Sophos;i="4.93,779,1378857600"; 
	d="asc'?scan'208";a="78494834"
Received: from accessns.citrite.net (HELO FTLPEX01CL02.citrite.net)
	([10.9.154.239])
	by FTLPIPO01.CITRIX.COM with ESMTP; 27 Nov 2013 02:20:01 +0000
Received: from [127.0.0.1] (10.80.16.47) by smtprelay.citrix.com
	(10.13.107.79) with Microsoft SMTP Server id 14.2.342.4;
	Tue, 26 Nov 2013 21:20:00 -0500
Message-ID: <1385518798.15201.122.camel@Solace>
Subject: Re: [Xen-devel] Developer Dashboards for Xen Project sub-projects
	(need input)
From: Dario Faggioli <dario.faggioli@citrix.com>
To: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Date: Wed, 27 Nov 2013 03:19:58 +0100
In-Reply-To: <20131125143555.GA6095@phenom.dumpdata.com>
References: <52790B64.2060101@xen.org>
	<20131125143555.GA6095@phenom.dumpdata.com>
Content-Type: multipart/signed; micalg=pgp-sha1;
	protocol="application/pgp-signature"; boundary="=-CYyDO0URogAn3mbvJyTG"
X-Mailer: Evolution 3.8.5 (3.8.5-2.fc19) 
MIME-Version: 1.0
X-DLP: MIA2
Cc: Lars Kurth <lars.kurth@xen.org>,
	"xen-devel@lists.xen.org" <xen-devel@lists.xen.org>,
	"cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>,
	"xen-api@lists.xen.org" <xen-api@lists.xen.org>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Wed, 27 Nov 2013 02:20:04 -0000
Content-Length: 3101
Lines: 87

--=-CYyDO0URogAn3mbvJyTG
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On lun, 2013-11-25 at 09:35 -0500, Konrad Rzeszutek Wilk wrote:
> > We can do similar things for XAPI and Mirage.
> >=20
> > So what I am looking for is
> > a) a discussion on the list on what might be useful, and
> > b) a number of volunteers (ideally one per project) who will work
> > with me and the vendor getting this off the ground
>=20
> I like the idea of getting an idea of 'we are getting less and less
> commits in this area' as a way to figure out what needs attention
> (or perhaps no need).
>=20
Agreed.

> But not every week, not every month either - quaterly is nice enough.
> Or maybe once a year (say at Xen Summit?). But that should be possible
> already right? Or is it a major pain to create those nice graphs?
>=20
Yes, I also agree that we should pick-up a proper periodicity with which
we look at this, or we risk going mad! :-)

> What is the overall goal?
>=20
> From my PoV my feeling is that:
>  a). I need to hire more folks
>  b). I have more things we want to do than there are
>      developers.
>=20
> And I think the same is true for everybody else. But I don't know
> if this dashboard will help in this regards?
>=20
Well, I think it goes way beyond that.

Lars is collecting numbers and plotting graphs similar to the ones this
thing is able to produce from some time now, and, honestly, I think they
provide really useful information. They tell much more than just 'there
is more effort needed in this area', they, if done well, provide
insights about the health of a community that, in my opinion, every Open
Source project should be considering very seriously.

As an example, have a look at his 'community roundup' from XS in
Edinburgh:
http://www.xenproject.org/component/allvideoshare/video/latest/xpds13-welco=
me.html

So, if this allows for getting even more info with even less (or equal)
effort, I think it's 100% worth it.

> Or is it a way to use that information to figure out overall
> trends of changes + test coverage -> good/bad patch ratio?
>=20
That too, I guess. However, I think it's probably something more like
"using that information to as much as possible avoid the risk of dying",
as it happened some years ago! :-P :-P

So, as I said in the other mail, provided what would be needed is made a
bit more clear, I'm up for helping with this.

Regards,
Dario

--=20
<<This happens because I choose it to happen!>> (Raistlin Majere)
-----------------------------------------------------------------
Dario Faggioli, Ph.D, http://about.me/dario.faggioli
Senior Software Engineer, Citrix Systems R&D Ltd., Cambridge (UK)


--=-CYyDO0URogAn3mbvJyTG
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: This is a digitally signed message part
Content-Transfer-Encoding: 7bit

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.15 (GNU/Linux)

iEYEABECAAYFAlKVVs4ACgkQk4XaBE3IOsRH/QCgnCfIi+Ng4fQ+XjeXYH8ajAEL
P5YAoKcYXEgixWFc0+aqAsnO/v4mjEdj
=ICxS
-----END PGP SIGNATURE-----

--=-CYyDO0URogAn3mbvJyTG--


From dario.faggioli@citrix.com Wed Nov 27 03:56:33 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-1.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VlWEr-0002Tw-7L (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk (return-path <dario.faggioli@citrix.com>);
	Wed, 27 Nov 2013 03:56:33 +0000
X-Cam-SpamDetails: score -0.7 from SpamAssassin-3.3.2-1545174 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [66.165.176.63 listed in list.dnswl.dnsbl.ja.net]
	* -0.0 RP_MATCHES_RCVD Envelope sender domain matches handover relay
	*      domain
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from smtp02.citrix.com ([66.165.176.63]:61126)
	by ppsw-32.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with esmtps (TLSv1:RC4-SHA:128)
	id 1VlWEp-0005fe-35 (Exim 4.82_3-c0e5623) for cl-mirage@lists.cam.ac.uk
	(return-path <dario.faggioli@citrix.com>);
	Wed, 27 Nov 2013 03:56:33 +0000
X-IronPort-AV: E=Sophos;i="4.93,779,1378857600"; 
	d="asc'?scan'208";a="76096630"
Received: from accessns.citrite.net (HELO FTLPEX01CL01.citrite.net)
	([10.9.154.239])
	by FTLPIPO02.CITRIX.COM with ESMTP; 27 Nov 2013 03:56:30 +0000
Received: from [127.0.0.1] (10.80.16.47) by smtprelay.citrix.com
	(10.13.107.78) with Microsoft SMTP Server id 14.2.342.4;
	Tue, 26 Nov 2013 22:56:29 -0500
Message-ID: <1385524587.15201.187.camel@Solace>
Subject: Re: [Xen-devel] Testing for the Xen Project
From: Dario Faggioli <dario.faggioli@citrix.com>
To: <lars.kurth@xen.org>
Date: Wed, 27 Nov 2013 04:56:27 +0100
In-Reply-To: <5294A073.9000209@xen.org>
References: <5294A073.9000209@xen.org>
Content-Type: multipart/signed; micalg=pgp-sha1;
	protocol="application/pgp-signature"; boundary="=-yMaWHHLCE7ZwI9dmVoMv"
X-Mailer: Evolution 3.8.5 (3.8.5-2.fc19) 
MIME-Version: 1.0
X-DLP: MIA2
Cc: "xen-api@lists.xen.org" <xen-api@lists.xen.org>, "cl-mirage@lists.cam.ac.uk
	List" <cl-mirage@lists.cam.ac.uk>,
	"xen-devel@lists.xen.org" <xen-devel@lists.xen.org>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Wed, 27 Nov 2013 03:56:33 -0000
Content-Length: 8435
Lines: 208

--=-yMaWHHLCE7ZwI9dmVoMv
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

Premise/Disclaimer: I reply because I'm one of the ones that played (is
playing, actually) with OSSTest, since when standalone mode become
available, so I think I may have an opinion on it.

Unfortunately, I don't have direct experience with XenRT, and about it,
I only know what I've learn in talks and presentations, and talking with
people that uses it at Citrix.

For that reason, I wouldn't go as far as providing any sort of
comparison, as I only know one of the twos, and that would be unfair, if
at all possible.

On mar, 2013-11-26 at 13:21 +0000, Lars Kurth wrote:
> =3D=3D Work Flow =3D=3D

> *Local testing*: the basic idea here is for a developer to write their=
=20
> code and be able to run some tests on their machine locally as part of=
=20
> their development workflow. We do have same capability to do this with=
=20
> OSSTest=20
> (seehttp://blog.xen.org/index.php/2013/09/30/osstest-standalone-mode-step=
-by-step/),=20
> but the drawback is that this only works on the developers machine. This=
=20
> may be good enough. We could =E2=80=9Cemulate=E2=80=9D different environm=
ents using=20
> QEMU, but that is likely to be slow.
>=20
Honestly, I don't believe this kind of testing needs to be that broad
and/or that general, which is a good thing, as I don't think it would be
possible for it to be that way! ;-P

What I mean is, before starting to work on feature X, I usually make
sure that I will have access to a platform reasonably sensitive to
feature X. Before sending, I do test feature X on such platform, to make
sure the code serves its purpose / match with the original design, in an
testing environment (which in this case includes both the test platform
and the kind of test I execute) meant at highlight exactly that.

I don't see how the job of checking, as thoroughly as possible, hat
feature X does not break other --even completely unrelated-- features,
does what is expected on a number of platform and architecture that are
either similar or totally different from my own one can't be demanded to
'system testing'. I don't think there is a way for every developer to
have every of its patch series tested on 5 or 10 different boxes, in all
the PV, HVM and PVH variants, etc.! :-O

All this to say that, I think 'local testing' is ok to stay on the
developers' machine. What should be done, from a workflow perspective,
is (and we've started trying to pull in that direction) require that,
along with feature X, a testcase for whatever the 'system testing' will
end up being to be submited. That way, breakage of feature X on weird
archs, as well as feature X either breaking or being broken (in future)
by other features would come, again as a part of 'system testing'.

About the actual tools, I've been able to install and use OSSTest
standalone mode inside the Citrix network (i.e., the easy part :-)) and
am halfway through setting it up here at my place, for using it to
manage my (only!) testbox. It's not super easy yet, it probably can be
improved, but it's _there_ right now and it's _working_. The fact that
such a thing is possible is, I think, of paramount importance to allow
people to familiarize with the testing framework if they want, and
becomes absolutely fundamental if we want to encourage (not to mention
request, more or less formally) developers to submit test cases for
their stuff.

> *Test on demand:* this would be a mixture between local testing and=20
> system testing. It can probably be implemented in both OSSTest and=20
> XenRT, although I believe XenRT is a closer to this model already.=20
>
Well, if this will become a real chance, considering that *a*lot* of
people would possibly wan to run complex and lengthy tests, unless the
amount of hardware we'll have is unlimited, it looks to me that a job
scheduler would be quite a nice thing to have.

As I stated already, I know next to nothing of XenRT, and what I know
about OSSTest is mostly about standalone mode, so I don't know who's
ahead, I'll just say that I really think we need something good at doing
this (test job scheduling) in he final solution.

> The=20
> workflow would look like this:
> a) code developed locally
> b) developer checks working prototype into their personal git branch=20
> (which would need to be accessible from the web)
> c) developer submits a job to the test farm which checks out and builds=
=20
> code and runs a set of interesting (or new) tests on some machines of=20
> different architectures. New tests would probably need to be on the git=
=20
> branch
> d) if the test fail, the cycle starts again
> d) if all works well, code is submitted for review as normal (and test=
=20
> results could be attached)
>
Modulo scheduling test jobs (covered above), for what I know OSSTest can
handle all of this.

> =3D=3D OSSTest =3D=3D
>=20
> What runs now and thus easiest to get started on
>=20
> More Info
> *http://blog.xen.org/index.php/2013/02/02/xen-automatic-test-system-osste=
st/
> *http://blog.xen.org/index.php/2013/09/30/osstest-standalone-mode-step-by=
-step/
> *http://www.youtube.com/watch?v=3DJxTFZIwZzJ8
>=20
> Problems:
> * Runs on Citrix premises (thus general access is an issue)
> * Ian Jackson is acting as sys-admin in his spare time. But, the=20
> Advisory Board could provide resource to fix this
>
Well, these are not real issues, are they? I mean, yes, that's the
current situation, but if we decide to go for OSSTest, both
infrastructure and people will be allocated properly, making these
disappear.

> * Basic test coverage
>
True, but I never checked how may and what test coverage XenRT would
provide, perhaps someone could put this information somewhere.

For OSSTest, it's all here (isn't that Ian?):
http://www.chiark.greenend.org.uk/~xensrcts/logs/22099/

> * Not a lot of documentation right now (which is a bit of a barrier to=
=20
> adoption)
>=20
Yes, that is definitely true, the biggest issue with it (but again, I
can't really compare, since I never really went checking how much docs
there is for XenRT).

I think, a similar very strict policy about improving and keeping
updated the doc, similar to what we introduced for Xen, would be
required here too, if we go for OSSTest. If we do that, I'm sure things
will improve.

> Risks
> * Not well understood (maybe you guys can fill the gaps)
>=20
Again, true, although the fact that the code is there, and that is in an
actual repo, with all the history, etc., and the fact that we're
starting to see patches on xen-devel, is already and will continue to
clarify what OSSTest does and how it does it quite a lot.

Looking back at my experience, for instance, something that would have
helped me / saved me some time (and some questions to Ian on IRC) is a
clear definition of what 'flights', 'jobs', 'recipes' and 'testcases'
are, and what relationships they share among each others.

> =3D=3D XenRT =3D=3D
>
And I'm not saying anything about it, as I don't like speaking of things
I don't know. :-(

> =3D=3D Support and Ownership =3D=3D
>=20
> Whatever solution we go for, needs to be properly funded and looked=20
> after. This is understood and the intention would be for the Xen Project=
=20
> (aka Advisory Board) to fund a Linux Foundation employee to do this on=
=20
> behalf of the Xen Project: this is a bit like Greg KH and others being=
=20
> LF employees working on the kernel.=20
>
Or, perhaps a better example, like John Hawley which, when acting as the
chief of maintenance of the kernel.org infrastructure, is also payed by
the Linux Foundation (https://www.linkedin.com/in/warthog9).

Ok... Done. Hope my small contribution can be of help in the
discussion. :-)

Regards,
Dario

--=20
<<This happens because I choose it to happen!>> (Raistlin Majere)
-----------------------------------------------------------------
Dario Faggioli, Ph.D, http://about.me/dario.faggioli
Senior Software Engineer, Citrix Systems R&D Ltd., Cambridge (UK)


--=-yMaWHHLCE7ZwI9dmVoMv
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: This is a digitally signed message part
Content-Transfer-Encoding: 7bit

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.15 (GNU/Linux)

iEYEABECAAYFAlKVbWsACgkQk4XaBE3IOsQj9ACffNPJjbsrIDzwu983Wy1l48GL
hyoAoJmzOxddSP+A7FHzCU6S6CJQ4H8j
=cuxK
-----END PGP SIGNATURE-----

--=-yMaWHHLCE7ZwI9dmVoMv--


From scott.dj@gmail.com Wed Nov 27 14:09:23 2013
Received: from ppsw-42.csi.cam.ac.uk ([131.111.8.142])
	by lists-1.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1Vlfnv-00052g-FU (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <scott.dj@gmail.com>); Wed, 27 Nov 2013 14:09:23 +0000
X-Cam-SpamScore: s
X-Cam-SpamDetails: score 1.3 from SpamAssassin-3.3.2-1545569 
	* -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/,
	no *      trust
	*      [209.85.192.173 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (scott.dj[at]gmail.com)
	*  0.0 DKIM_ADSP_CUSTOM_MED No valid author signature, adsp_override is
	*      CUSTOM_MED
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
	*  1.2 NML_ADSP_CUSTOM_MED ADSP custom_med hit, and not from a mailing
	*      list
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-pd0-f173.google.com ([209.85.192.173]:63067)
	by ppsw-42.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with esmtps (TLSv1:RC4-SHA:128)
	id 1Vlfnu-0006ez-7V (Exim 4.82_3-c0e5623) for cl-mirage@lists.cam.ac.uk
	(return-path <scott.dj@gmail.com>); Wed, 27 Nov 2013 14:09:23 +0000
Received: by mail-pd0-f173.google.com with SMTP id p10so9968505pdj.18
	for <cl-mirage@lists.cam.ac.uk>; Wed, 27 Nov 2013 06:09:19 -0800 (PST)
MIME-Version: 1.0
X-Received: by 10.68.113.130 with SMTP id iy2mr5377600pbb.2.1385561358806;
	Wed, 27 Nov 2013 06:09:18 -0800 (PST)
Received: by 10.70.56.36 with HTTP; Wed, 27 Nov 2013 06:09:18 -0800 (PST)
Date: Wed, 27 Nov 2013 14:09:18 +0000
Message-ID: <CAG_esB2qhNNp_Ar0Dm5DPsg3ETJTUSGbkHauSi348WUca1boFA@mail.gmail.com>
Subject: 12 days to Mirage 1.0! (was: Mirage weekly call today, 4pm GMT)
From: David Scott <scott.dj@gmail.com>
To: Mirage List <cl-mirage@lists.cam.ac.uk>
Content-Type: multipart/alternative; boundary=047d7b6d7a669b372904ec29241d
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Wed, 27 Nov 2013 14:09:23 -0000
Content-Length: 2191
Lines: 55

--047d7b6d7a669b372904ec29241d
Content-Type: text/plain; charset=ISO-8859-1

We're fast approaching that special time of year when Mirage 1.0 will be
released!

Please join me on the Mirage call at 4pm GMT today (wednesday), there'll be
lots of exciting pre-release things to talk about.

1.  Please join my meeting.
https://www1.gotomeeting.com/join/591890401

2.  Use your microphone and speakers (VoIP) - a headset is recommended.
 Or, call in using your telephone.

United Kingdom (toll-free): 0 808 168 0209 United Kingdom: +44 (0) 207 151
1817

United States (toll-free): 1 877 309 2070 United States: +1 (626) 521-0017

Access Code: 591-890-401
Audio PIN: Shown after joining the meeting

Meeting ID: 591-890-401

-- 
Dave Scott

--047d7b6d7a669b372904ec29241d
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div>We&#39;re fast approaching that special time of year =
when Mirage 1.0 will be released!</div><div><br></div>Please join me on the=
 Mirage call at 4pm GMT today (wednesday), there&#39;ll be lots of exciting=
 pre-release things to talk about.<div>
<div><br class=3D"">1. =A0Please join my meeting.</div><div><a href=3D"http=
s://www1.gotomeeting.com/join/591890401" target=3D"_blank">https://www1.got=
omeeting.com/join/591890401</a></div><div><br></div><div>2. =A0Use your mic=
rophone and speakers (VoIP) - a headset is recommended. =A0Or, call in usin=
g your telephone.</div>
<div><br></div><div>United Kingdom (toll-free): 0 808 168 0209 United Kingd=
om:=A0<a href=3D"tel:%2B44%20%280%29%20207%20151%201817" value=3D"+44207151=
1817" target=3D"_blank">+44 (0) 207 151 1817</a></div><div><br></div><div>U=
nited States (toll-free):=A0<a href=3D"tel:1%20877%20309%202070" value=3D"+=
18773092070" target=3D"_blank">1 877 309 2070</a>=A0United States:=A0<a hre=
f=3D"tel:%2B1%20%28626%29%20521-0017" value=3D"+16265210017" target=3D"_bla=
nk">+1 (626) 521-0017</a></div>
<div><br></div><div>Access Code: 591-890-401</div><div>Audio PIN: Shown aft=
er joining the meeting</div><div><br></div><div>Meeting ID: 591-890-401</di=
v><div><br></div>-- <br>Dave Scott
</div></div>

--047d7b6d7a669b372904ec29241d--


From konrad.wilk@oracle.com Wed Nov 27 14:13:18 2013
Received: from ppsw-42.csi.cam.ac.uk ([131.111.8.142])
	by lists-1.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1Vlfri-0005Hi-Kp (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <konrad.wilk@oracle.com>); Wed, 27 Nov 2013 14:13:18 +0000
X-Cam-SpamDetails: score -2.3 from SpamAssassin-3.3.2-1545569 
	* -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at http://www.dnswl.org/,
	*      medium trust
	*      [156.151.31.81 listed in list.dnswl.dnsbl.ja.net]
	* -0.0 RP_MATCHES_RCVD Envelope sender domain matches handover relay
	*      domain
	*  0.0 UNPARSEABLE_RELAY Informational: message has unparseable relay
	*      lines
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from userp1040.oracle.com ([156.151.31.81]:47866)
	by ppsw-42.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with esmtps (TLSv1:DHE-RSA-AES256-SHA:256)
	id 1Vlfrh-0000tt-85 (Exim 4.82_3-c0e5623) for cl-mirage@lists.cam.ac.uk
	(return-path <konrad.wilk@oracle.com>); Wed, 27 Nov 2013 14:13:18 +0000
Received: from acsinet22.oracle.com (acsinet22.oracle.com [141.146.126.238])
	by userp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with
	ESMTP id rAREDBNY015252
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK);
	Wed, 27 Nov 2013 14:13:12 GMT
Received: from userz7021.oracle.com (userz7021.oracle.com [156.151.31.85])
	by acsinet22.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id
	rARED9hH017317
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO);
	Wed, 27 Nov 2013 14:13:10 GMT
Received: from abhmp0019.oracle.com (abhmp0019.oracle.com [141.146.116.25])
	by userz7021.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id
	rARED8HY026574; Wed, 27 Nov 2013 14:13:08 GMT
Received: from pegasus.dumpdata.com (/50.195.21.189)
	by default (Oracle Beehive Gateway v4.0)
	with ESMTP ; Wed, 27 Nov 2013 06:13:08 -0800
Date: Wed, 27 Nov 2013 09:13:06 -0500
From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: Dario Faggioli <dario.faggioli@citrix.com>
Subject: Re: [Xen-devel] Developer Dashboards for Xen Project sub-projects
	(need input)
Message-ID: <20131127141306.GB4430@pegasus.dumpdata.com>
References: <52790B64.2060101@xen.org>
	<20131125143555.GA6095@phenom.dumpdata.com>
	<1385518798.15201.122.camel@Solace>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <1385518798.15201.122.camel@Solace>
User-Agent: Mutt/1.5.21 (2010-09-15)
X-Source-IP: acsinet22.oracle.com [141.146.126.238]
Cc: Lars Kurth <lars.kurth@xen.org>,
	"xen-devel@lists.xen.org" <xen-devel@lists.xen.org>,
	"cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>,
	"xen-api@lists.xen.org" <xen-api@lists.xen.org>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Wed, 27 Nov 2013 14:13:18 -0000
Content-Length: 2883
Lines: 76

On Wed, Nov 27, 2013 at 03:19:58AM +0100, Dario Faggioli wrote:
> On lun, 2013-11-25 at 09:35 -0500, Konrad Rzeszutek Wilk wrote:
> > > We can do similar things for XAPI and Mirage.
> > > 
> > > So what I am looking for is
> > > a) a discussion on the list on what might be useful, and
> > > b) a number of volunteers (ideally one per project) who will work
> > > with me and the vendor getting this off the ground
> > 
> > I like the idea of getting an idea of 'we are getting less and less
> > commits in this area' as a way to figure out what needs attention
> > (or perhaps no need).
> > 
> Agreed.
> 
> > But not every week, not every month either - quaterly is nice enough.
> > Or maybe once a year (say at Xen Summit?). But that should be possible
> > already right? Or is it a major pain to create those nice graphs?
> > 
> Yes, I also agree that we should pick-up a proper periodicity with which
> we look at this, or we risk going mad! :-)
> 
> > What is the overall goal?
> > 
> > From my PoV my feeling is that:
> >  a). I need to hire more folks
> >  b). I have more things we want to do than there are
> >      developers.
> > 
> > And I think the same is true for everybody else. But I don't know
> > if this dashboard will help in this regards?
> > 
> Well, I think it goes way beyond that.
> 
> Lars is collecting numbers and plotting graphs similar to the ones this
> thing is able to produce from some time now, and, honestly, I think they
> provide really useful information. They tell much more than just 'there
> is more effort needed in this area', they, if done well, provide
> insights about the health of a community that, in my opinion, every Open
> Source project should be considering very seriously.
> 
> As an example, have a look at his 'community roundup' from XS in
> Edinburgh:
> http://www.xenproject.org/component/allvideoshare/video/latest/xpds13-welcome.html

Wow. Slide #8 says that Jan Beulich is quite productive (which
I already knew). His manager should see it :-)

> 
> So, if this allows for getting even more info with even less (or equal)
> effort, I think it's 100% worth it.
> 
> > Or is it a way to use that information to figure out overall
> > trends of changes + test coverage -> good/bad patch ratio?
> > 
> That too, I guess. However, I think it's probably something more like
> "using that information to as much as possible avoid the risk of dying",
> as it happened some years ago! :-P :-P
> 
> So, as I said in the other mail, provided what would be needed is made a
> bit more clear, I'm up for helping with this.

Fantastic!
> 
> Regards,
> Dario
> 
> -- 
> <<This happens because I choose it to happen!>> (Raistlin Majere)
> -----------------------------------------------------------------
> Dario Faggioli, Ph.D, http://about.me/dario.faggioli
> Senior Software Engineer, Citrix Systems R&D Ltd., Cambridge (UK)
> 




From lars.kurth.xen@gmail.com Fri Nov 29 16:52:23 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-1.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VmRIl-0002jL-2Z (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk (return-path <lars.kurth.xen@gmail.com>);
	Fri, 29 Nov 2013 16:52:23 +0000
X-Cam-SpamDetails: score -0.6 from SpamAssassin-3.3.2-1546311 
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (lars.kurth.xen[at]gmail.com)
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.215.180 listed in list.dnswl.dnsbl.ja.net]
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-ea0-f180.google.com ([209.85.215.180]:42089)
	by ppsw-32.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with esmtps (TLSv1:RC4-SHA:128)
	id 1VmRIk-0001L3-0q (Exim 4.82_3-c0e5623) for cl-mirage@lists.cam.ac.uk
	(return-path <lars.kurth.xen@gmail.com>);
	Fri, 29 Nov 2013 16:52:23 +0000
Received: by mail-ea0-f180.google.com with SMTP id f15so7075054eak.11
	for <cl-mirage@lists.cam.ac.uk>; Fri, 29 Nov 2013 08:52:22 -0800 (PST)
X-Received: by 10.15.82.8 with SMTP id z8mr30708993eey.25.1385743941930;
	Fri, 29 Nov 2013 08:52:21 -0800 (PST)
Received: from [172.16.25.10] ([2.122.219.75])
	by mx.google.com with ESMTPSA id m1sm36699112eeg.0.2013.11.29.08.52.20
	for <multiple recipients>
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Fri, 29 Nov 2013 08:52:21 -0800 (PST)
Sender: Lars Kurth <lars.kurth.xen@gmail.com>
Message-ID: <5298C643.20509@xen.org>
Date: Fri, 29 Nov 2013 16:52:19 +0000
From: Lars Kurth <lars.kurth@xen.org>
User-Agent: Mozilla/5.0 (Windows NT 6.1;
	rv:24.0) Gecko/20100101 Thunderbird/24.1.1
MIME-Version: 1.0
To: Dario Faggioli <dario.faggioli@citrix.com>
Subject: Re: [Xen-devel] Testing for the Xen Project
References: <5294A073.9000209@xen.org> <1385524587.15201.187.camel@Solace>
In-Reply-To: <1385524587.15201.187.camel@Solace>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Cc: "xen-devel@lists.xen.org" <xen-devel@lists.xen.org>,
	"cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>,
	"xen-api@lists.xen.org" <xen-api@lists.xen.org>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
Reply-To: lars.kurth@xen.org
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Fri, 29 Nov 2013 16:52:23 -0000
Content-Length: 6424
Lines: 131

Dario,
that makes sense. This shouldn't be a OSSTest vs. XenRT discussion. I 
added a few of comments...
Lars

On 27/11/2013 03:56, Dario Faggioli wrote:
>> *Local testing*: the basic idea here is for a developer to write their
>> code and be able to run some tests on their machine locally as part of
>> their development workflow. We do have same capability to do this with
>> OSSTest
>> (seehttp://blog.xen.org/index.php/2013/09/30/osstest-standalone-mode-step-by-step/),
>> but the drawback is that this only works on the developers machine. This
>> may be good enough. We could â€śemulateâ€ť different environments using
>> QEMU, but that is likely to be slow.
>>
> Honestly, I don't believe this kind of testing needs to be that broad
> and/or that general, which is a good thing, as I don't think it would be
> possible for it to be that way! ;-P
>
> What I mean is, before starting to work on feature X, I usually make
> sure that I will have access to a platform reasonably sensitive to
> feature X. Before sending, I do test feature X on such platform, to make
> sure the code serves its purpose / match with the original design, in an
> testing environment (which in this case includes both the test platform
> and the kind of test I execute) meant at highlight exactly that.
This is certainly true, for new feature development such as NUMA.

> I don't see how the job of checking, as thoroughly as possible, hat
> feature X does not break other --even completely unrelated-- features,
> does what is expected on a number of platform and architecture that are
> either similar or totally different from my own one can't be demanded to
> 'system testing'. I don't think there is a way for every developer to
> have every of its patch series tested on 5 or 10 different boxes, in all
> the PV, HVM and PVH variants, etc.! :-O
I don't think I am suggesting that we should always run every patch 
against all machines before it is submitted.

But maybe it is a way to de-risk feature development that is inherently 
more risky, such as HVM, or other low-level stuff.
Or for areas, where we do not have as many reviewers as we would like.
It may make HW accessible to some people, that they may not normally 
have access to.
There could be other potential uses.

If we had the capability of running some tests on different hardware 
before a patch is submitted, wouldn't that speed up the review-commit 
cycle. Each bug/issue that is found after a system test failure, will 
lead to a re-review and will consume time and effort. As we are moving 
to shorter release cycles, this sounds like something that would be very 
valuable.

It is also quite conceivable that this line of argument is a "red 
herring" (and that I stated a problem which does not actually exist). I 
guess it depends on how often we break functionality unintentionally in 
practice. I do think that our community is actually quite good and 
thorough when it comes to reviewing patches.

> All this to say that, I think 'local testing' is ok to stay on the
> developers' machine. What should be done, from a workflow perspective,
> is (and we've started trying to pull in that direction) require that,
> along with feature X, a testcase for whatever the 'system testing' will
> end up being to be submited. That way, breakage of feature X on weird
> archs, as well as feature X either breaking or being broken (in future)
> by other features would come, again as a part of 'system testing'.
>
> About the actual tools, I've been able to install and use OSSTest
> standalone mode inside the Citrix network (i.e., the easy part :-)) and
> am halfway through setting it up here at my place, for using it to
> manage my (only!) testbox. It's not super easy yet, it probably can be
> improved, but it's _there_ right now and it's _working_. The fact that
> such a thing is possible is, I think, of paramount importance to allow
> people to familiarize with the testing framework if they want, and
> becomes absolutely fundamental if we want to encourage (not to mention
> request, more or less formally) developers to submit test cases for
> their stuff.
Totally agreed.

>> [snip]
>> == OSSTest ==
>>
>> What runs now and thus easiest to get started on
>>
>> [snip]
>>
>> Problems:
>> * Runs on Citrix premises (thus general access is an issue)
>> * Ian Jackson is acting as sys-admin in his spare time. But, the
>> Advisory Board could provide resource to fix this
> Well, these are not real issues, are they? I mean, yes, that's the
> current situation, but if we decide to go for OSSTest, both
> infrastructure and people will be allocated properly, making these
> disappear.
Agreed. Which is why I added this, such that it doesn't get forgotten.

>> * Basic test coverage
>>
> True, but I never checked how may and what test coverage XenRT would
> provide, perhaps someone could put this information somewhere.
>
> For OSSTest, it's all here (isn't that Ian?):
> http://www.chiark.greenend.org.uk/~xensrcts/logs/22099/
>> * Not a lot of documentation right now (which is a bit of a barrier to
>> adoption)
>>
> Yes, that is definitely true, the biggest issue with it (but again, I
> can't really compare, since I never really went checking how much docs
> there is for XenRT).
>
> I think, a similar very strict policy about improving and keeping
> updated the doc, similar to what we introduced for Xen, would be
> required here too, if we go for OSSTest. If we do that, I'm sure things
> will improve.
Same point: it is an issue today and it could be resolved with adequate 
funds, focus and will. But the issue ought to be mentioned.

>> Risks
>> * Not well understood (maybe you guys can fill the gaps)
> Again, true, although the fact that the code is there, and that is in an
> actual repo, with all the history, etc., and the fact that we're
> starting to see patches on xen-devel, is already and will continue to
> clarify what OSSTest does and how it does it quite a lot.
>
> Looking back at my experience, for instance, something that would have
> helped me / saved me some time (and some questions to Ian on IRC) is a
> clear definition of what 'flights', 'jobs', 'recipes' and 'testcases'
> are, and what relationships they share among each others.
Again, I raised this such that the existing users of OSSTest can flesh 
this section out and provide a bit more clarity. It's basically a 
place-holder that you guys should flesh out.



From dario.faggioli@citrix.com Sat Nov 30 11:29:17 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-1.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1Vmijd-0003IG-IX (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk (return-path <dario.faggioli@citrix.com>);
	Sat, 30 Nov 2013 11:29:17 +0000
X-Cam-SpamDetails: score -5.0 from SpamAssassin-3.3.2-1546520 
	* -0.0 RP_MATCHES_RCVD Envelope sender domain matches handover relay
	*      domain
	* -5.0 RCVD_IN_DNSWL_HI RBL: Sender listed at http://www.dnswl.org/,
	high *      trust
	*      [66.165.176.89 listed in list.dnswl.dnsbl.ja.net]
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from smtp.citrix.com ([66.165.176.89]:42514)
	by ppsw-32.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with esmtps (TLSv1:RC4-SHA:128)
	id 1Vmijc-00071g-1w (Exim 4.82_3-c0e5623) for cl-mirage@lists.cam.ac.uk
	(return-path <dario.faggioli@citrix.com>);
	Sat, 30 Nov 2013 11:29:17 +0000
X-IronPort-AV: E=Sophos;i="4.93,803,1378857600"; 
	d="asc'?scan'208";a="79365537"
Received: from accessns.citrite.net (HELO FTLPEX01CL03.citrite.net)
	([10.9.154.239])
	by FTLPIPO01.CITRIX.COM with ESMTP; 30 Nov 2013 11:29:14 +0000
Received: from [127.0.0.1] (10.80.16.47) by smtprelay.citrix.com
	(10.13.107.80) with Microsoft SMTP Server id 14.2.342.4;
	Sat, 30 Nov 2013 06:29:13 -0500
Message-ID: <1385810942.5338.23.camel@Solace>
Subject: Re: [Xen-devel] Testing for the Xen Project
From: Dario Faggioli <dario.faggioli@citrix.com>
To: <lars.kurth@xen.org>
Date: Sat, 30 Nov 2013 12:29:02 +0100
In-Reply-To: <5298C643.20509@xen.org>
References: <5294A073.9000209@xen.org> <1385524587.15201.187.camel@Solace>
	<5298C643.20509@xen.org>
Content-Type: multipart/signed; micalg=pgp-sha1;
	protocol="application/pgp-signature"; boundary="=-xotpzvDCJ01c4McJV01M"
X-Mailer: Evolution 3.8.5 (3.8.5-2.fc19) 
MIME-Version: 1.0
X-DLP: MIA2
Cc: "xen-devel@lists.xen.org" <xen-devel@lists.xen.org>,
	"cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>,
	"xen-api@lists.xen.org" <xen-api@lists.xen.org>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Sat, 30 Nov 2013 11:29:17 -0000
Content-Length: 5257
Lines: 128

--=-xotpzvDCJ01c4McJV01M
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On ven, 2013-11-29 at 16:52 +0000, Lars Kurth wrote:
> Dario,
> that makes sense.=20
>
Good to know. :-)

> This shouldn't be a OSSTest vs. XenRT discussion.
>
Sure, and I neither read/interpreted it that way, nor I wanted to turn
it into something like that. If it sounded like I did, sorry, that
wasn't my intention.

As I said, I only have experience with OSSTest, and I felt like I waned
to share thoughts and opinions coming out from such experience, about
what it can and can't (right now) do and be used for, that's it. :-)

> On 27/11/2013 03:56, Dario Faggioli wrote:
> > I don't see how the job of checking, as thoroughly as possible, hat
> > feature X does not break other --even completely unrelated-- features,
> > does what is expected on a number of platform and architecture that are
> > either similar or totally different from my own one can't be demanded t=
o
> > 'system testing'. I don't think there is a way for every developer to
> > have every of its patch series tested on 5 or 10 different boxes, in al=
l
> > the PV, HVM and PVH variants, etc.! :-O
> I don't think I am suggesting that we should always run every patch=20
> against all machines before it is submitted.
>=20
Right, I got that in the first place. Point is, as you suggest yourself
below, if we go that way, there's some either some formal policing or
'rule-of-thumb'-ing needed, and I just think it's going to be an hard
call, to the point that I'm not sure it's even worth.

As I tired to say, I'd rather invest that effort in making OSSTest (but
I suspect that would apply to XenRT too) easier to "deploy", or, if you
want, in teaching people how to do that, so that they can run it in
*their* homes/offices, perform their own testing by writing actual
testcases for it and, perhaps, submit them to the "official" testing
service / push gate (e.g., as something that runs once in a while,
instead of every night, depending on the feature being tested).

> But maybe it is a way to de-risk feature development that is inherently=
=20
> more risky, such as HVM, or other low-level stuff.
> Or for areas, where we do not have as many reviewers as we would like.
> It may make HW accessible to some people, that they may not normally=20
> have access to.
>
Exactly, and there are some nice examples of policy items. Again, I'm
certainly not against it, but I don't thing this is the main point of
this discussion (and so, sorry for making some fuss about it myself in
the first place), so let's leave it and go ahead. :-)

> >> [snip]
> >> =3D=3D OSSTest =3D=3D
> >>
> >> What runs now and thus easiest to get started on
> >>
> >> [snip]
> >>
> >> Problems:
> >> * Runs on Citrix premises (thus general access is an issue)
> >> * Ian Jackson is acting as sys-admin in his spare time. But, the
> >> Advisory Board could provide resource to fix this
> > Well, these are not real issues, are they? I mean, yes, that's the
> > current situation, but if we decide to go for OSSTest, both
> > infrastructure and people will be allocated properly, making these
> > disappear.
> Agreed. Which is why I added this, such that it doesn't get forgotten.
>=20
Perfect then. Given that, I probably would move this and the other
similar arguments away from the 'Problems:' section (and of course do
the same for the same arguments in the XenRT paragraph), as, although
it's important not to forget them, they're not that relevant in the
discussion/decision phase, are they?

That is, BTW, all I meant with this (and the other similar) comment(s).

> >> Risks
> >> * Not well understood (maybe you guys can fill the gaps)
> > Again, true, although the fact that the code is there, and that is in a=
n
> > actual repo, with all the history, etc., and the fact that we're
> > starting to see patches on xen-devel, is already and will continue to
> > clarify what OSSTest does and how it does it quite a lot.
> >
> > Looking back at my experience, for instance, something that would have
> > helped me / saved me some time (and some questions to Ian on IRC) is a
> > clear definition of what 'flights', 'jobs', 'recipes' and 'testcases'
> > are, and what relationships they share among each others.
> Again, I raised this such that the existing users of OSSTest can flesh=
=20
> this section out and provide a bit more clarity. It's basically a=20
> place-holder that you guys should flesh out.
>=20
Which is exactly what I tried to do with my e-mail, all of it, but
particularly here. :-)

Regards,
Dario

--=20
<<This happens because I choose it to happen!>> (Raistlin Majere)
-----------------------------------------------------------------
Dario Faggioli, Ph.D, http://about.me/dario.faggioli
Senior Software Engineer, Citrix Systems R&D Ltd., Cambridge (UK)


--=-xotpzvDCJ01c4McJV01M
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: This is a digitally signed message part
Content-Transfer-Encoding: 7bit

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.15 (GNU/Linux)

iEYEABECAAYFAlKZy/4ACgkQk4XaBE3IOsRa3wCeI8gxAiHxyeQGx17NRKN0OaEH
iOcAnA+mNaZlihWMjRrmke1bux2mt6fr
=hKYa
-----END PGP SIGNATURE-----

--=-xotpzvDCJ01c4McJV01M--


