From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Authentication-Results: plum.tunbury.org; dkim=pass (1024-bit key; unprotected) header.d=inria.fr header.i=@inria.fr header.a=rsa-sha256 header.s=dc header.b=QsiOsmXF; dkim-atps=neutral Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=192.134.164.83; helo=mail2-relais-roc.national.inria.fr; envelope-from=caml-list-owner@inria.fr; receiver=tunbury.org Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by plum.tunbury.org (Postfix) with ESMTP id 0A1464008D for ; Tue, 23 Jun 2026 10:08:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=inria.fr; s=dc; h=from:to:date:message-id:mime-version:subject:reply-to: sender:list-id:list-help:list-subscribe:list-unsubscribe: list-post:list-owner:list-archive; bh=EeYJFp0eerv3k0Cp03t5LN0LmWZghgZ2UsYhz9BSrUI=; b=QsiOsmXF1Kwno3JfDsgJqtLTx0PLnsnIdpUHMQBzBXFnRoSwks50beCv TgLT6iiHwbIYVAGm26srt9X2jTmXOCbKfm0SCXKJaFrbDvR4Hdfvp7XU4 eLRHw51lPaF30ozLssHC0JCJVXx1XtmelaySJq9r/l+rgSAF27cxuzR3Y o=; X-CSE-ConnectionGUID: JhhoC1VWRzeuV7zkFylX4Q== X-CSE-MsgGUID: QIRMBhIyQOagR6CODS3Q4Q== Authentication-Results: mail2-relais-roc.national.inria.fr; dkim=none (message not signed) header.i=none; spf=SoftFail smtp.mailfrom=caml-list-owner@inria.fr; spf=None smtp.helo=postmaster@prod-sympa-app.inria.fr Received-SPF: SoftFail (mail2-relais-roc.national.inria.fr: domain of caml-list-owner@inria.fr is inclined to not designate 128.93.162.27 as permitted sender) identity=mailfrom; client-ip=128.93.162.27; receiver=mail2-relais-roc.national.inria.fr; envelope-from="caml-list-owner@inria.fr"; x-sender="caml-list-owner@inria.fr"; x-conformance=spf_only; x-record-type="v=spf1"; x-record-text="v=spf1 ip4:128.93.142.0/24 ip4:192.134.164.0/24 ip4:128.93.162.160 ip4:128.93.162.3 ip4:128.93.162.88 ip4:89.107.174.7 mx ~all" Received-SPF: None (mail2-relais-roc.national.inria.fr: no sender authenticity information available from domain of postmaster@prod-sympa-app.inria.fr) identity=helo; client-ip=128.93.162.27; receiver=mail2-relais-roc.national.inria.fr; envelope-from="caml-list-owner@inria.fr"; x-sender="postmaster@prod-sympa-app.inria.fr"; x-conformance=spf_only X-IronPort-AV: E=Sophos;i="6.24,220,1774306800"; d="asc'?scan'208,217";a="282957656" Received: from prod-sympa-app.inria.fr ([128.93.162.27]) by mail2-relais-roc.national.inria.fr with ESMTP; 23 Jun 2026 12:08:01 +0200 Received: by prod-sympa-app.inria.fr (Postfix, from userid 990) id 200B580562; Tue, 23 Jun 2026 12:08:01 +0200 (CEST) Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by prod-sympa-app.inria.fr (Postfix) with ESMTP id 57ECB800CB for ; Tue, 23 Jun 2026 12:07:54 +0200 (CEST) X-CSE-ConnectionGUID: WYiAzQyDRG+Q6ye31P4emA== X-CSE-MsgGUID: PIbAoajBQcqkJ62d+RALCA== IronPort-SDR: 6a3a5af9_2OOA4vI9jdPmJiqr2kRTwcM7Ed1VTk8tE2mzFeMyquYayzz OYMfHh12xatI+VJCgcIY6ScTwWd88UzAUsJUiDA== X-ThreatScanner-Verdict: Negative X-IPAS-Result: =?us-ascii?q?A0F3AwD0WTpqhSIeaIFahBaBBBsBaAZfMwcISYRYg0+OJ?= =?us-ascii?q?ZFNinyBaYFBIQIOBwEDAQgFLgEVCgECBAEBAQIBAgGEfwIWjTUCGgUGAQQ0E?= =?us-ascii?q?wECBAMCAwEBAQEBAQEBAQEBCwEBAQQBAQECAQECBAMBAQEBAhABAQEBQEmGT?= =?us-ascii?q?w2CRRk4cYElAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA?= =?us-ascii?q?QEBAQEBAgQIAYEeCQQGEwEBOBgjAxAEAQYDAgQNATUDARMBEhqCJEQBgiACA?= =?us-ascii?q?k8DBAEMBpdFmnMaN3p/M4EBggwBAQaBCD4DD0HaFoEdQwkDBoE1GIFYhBmCT?= =?us-ascii?q?g8NASpJagIBAoRPhEEnD4FVRIM+UW+CYQIBAYE2BgEBBkcJgyWCaoIRFXoSG?= =?us-ascii?q?4EhNoFlBUCBYosDgWYDWSwBVRMXCwcFXoEIAyovLW4yHYEjPhc0WBsHBYEdg?= =?us-ascii?q?W6BBIUCIx8DOX+BP4EkZGYVMDWBAhEfCoErAwttPTcUG4tDECENgS1jFw+Bc?= =?us-ascii?q?A44Bj4PFxgTAQoRECACDRcSIwUQCxkmBQkCAhgCGRIBNg+TAip3jmeOGZRjN?= =?us-ascii?q?AeEIIFgBgyJCYEmlgeEBI0UhwOSUSKYZiOCNocogSYJgW9rlWAENYUfgX8jP?= =?us-ascii?q?IEgMxowQ4JnCUccD5IjgT6DGjuBPcRXQjUCAQE7BwIHAQwEhU4dAQGMBzOBS?= =?us-ascii?q?wEB?= IronPort-PHdr: A9a23:fay7xBGIS1za7oztkzazEZ1GfyVDhN3EVzX9CrIZgr5DOp6u447ld BSGo6k20RmRBc6Bt6sV06KW6/mmBTdcp87Z8TgrS99laVwssY0uhQsuAcqIWwXQDcXBSGgXO voHf3Jeu0+BDE5OBczlbEfTqHDhpRQbGxH4KBYnbr+tQt2agMu4zf299IPOaAtUmjW9falyL BKrpgnNq8Uam4RvJ6gxxxfTvndEZ+tayX1nKF6Omxvw+tq78Jp//yhNof4s+MBNXKrgc6gkU bBUCSktPnwo6sHsqRTMQgyD62cGXG4LiBRIGQ/F7B/7Xpf1rCT3s/d21TeZM8PrU706QCyu4 ahzRhDnkSsKKTE3/nzPhsN/kKxUrhShpwdiw4HPe4GaKOB+fqLGctwEQ2dKQ9tcWDZAAoO4a IsPEvYBMONFpITzu1cCsR2zDhSrC+3y1z9InWf20rMm3OQ9Eg/G2QMgEdwJsHTRttr1NaESW v2xwKTG0TnPavVb0ir/5ofVaBAsufGCU6xtf8TfykcgGB/Kg06fqYD5JT6YzPgBv3SZ4udmS Omhi3QnqwZ0ojW32sosjpPGhoQIwV7Z6Sp5wIM1JdykSE5nfNWpF4FftyWAOItwWM8iWH1nu CY/yr0HpZ67YDMHyIwgxx7ba/2Hb5aH7Q7jVOaXIDd4nW9ld6ylixa160igxfTxW8+p21lFs iRLiMPDtmwR1xPN8MiHTONw8lmg1DuL2A3e9+9KLEA6m6fUNZMswKM8m4YOvEjdGiL4lkT7g aGKe0gl5+Wl6eDqbLroq5OBK4J5iBzyPKsylsG5HO82PA8OX22B9uS90r3u5VX5T6tWjv03j qnWrojaJcMepq68HQBZyIAj5AijDzu+19QXgWMILFdBeB6diIjpIV7OLOj3Dfe+n1SskCpry OvcMrL9BZXNK2DPn6rmfblh5U5T1RA/zctf555MFr4BIOj8Wkn+tNPGCh85NAO0z/z9BNV4y 4wSQWOPAqmDMKPTq1CE/OwvI/OKaYQIuzj9M+Ao6+PwgXI9g1MRYLWl0JQNZH22AvhqOUuUb HX0jtoCD2sGpAszQe3whFGcXjNfe2y+Uq0h6jw9FYmoF53MRpq3j7yExCq7HoNZZmRBCl2UF HfpeJiIV+0UaCKVJs9gkiAEWqa9RI8h0xGutRb6y6d5IebO/S0Yr53j2MB05+3Vix4y6SR5A 9mD32yJVW14g38ESjAs0K1xvUBx0FmO3Kdgj/xdD9NT5vdJUgkgNZ7byux3E838VB7ccNuVU FupQdaoASs/QN8pzNEAfV5wG82ljhDH3yuqH6EamKCLBJwy86LcxmXxKNhnx3bBzqkhgEErT dFLNWK8gK5z7RPTCJLJk0Wclqaqabgc0TXW+2eE0GqOul1XXxBrUanfWHASaUTXoc7+5kPYQ L+iEa4nPRdZyc6eNqtKbcXkgklcS/fmPNTSemaxm2arBRaU3b6Md4rre2AF3CrHEkQEkgYT/ WyHNQckHCuhrXjeACRoFV30e0zs6/VxqGunTk8oyAGHd1Bt26K6+hELgvySSOkd06oEtik9s zl0Bkiy38zVBdSavwdheapdbc4n7Fdf0mLZswx8PoC+IK9+hl4edQV3v1rz1xppEIlAltIqr HwywAVvKqKY0VZBeiuA057/NLLZNHX88QypZaLOx17e1cyZ+r0T5/kgs1vtpRmnGEU6/3V8y 9lV3WOR6I/WAQQPTJz9Sl039wB0p77CYiky+YfU1Xp0PKeurjLMxs8nV6MZzUPqe8hZeuvQE BD0O8kFAY6oJfB83xCiZxcAeeRT77IcPsW8dvLA1rT4EvxnmWePiW1BqLt20keN6zY0HufM1 pBD2PqY2wqbSx/ki1Owrs38mYZFfCwfWG2lxn63V8ZqeqRucNNTWi+VKMqty4Al3/YFOlZd/ V+nXRYd3dOxPACVZBr71BFR0kIepTqmnzG5xnp6iWJhtbKRiQrJxemqbx8bIihTXmA3hFPlJ 86vhNAfXVS0RxAukAq56E36walCuak5KHPcEg9TZyajF2h5SeOrs6aaJctG6ZcmqyJSBd+GW gjPeJ/nj04373b7GG9P2D0wdzero4j02RtghzeUKH916mHSecRx2Qv37tvBQ/VcxXwDGDk+j iPYVRCnJ9f8xdyPjN/Yt/ymEWKsUpoGaS7w0YaJrze2/0VvEUT5h/e3i8HqGgg80Dbm2p9tT yqgQA/URI7t2uz6NOtmehMtH1rg849gHYo4lIIshZYW0Hxch5OP/HNBn32hedNckbnzanYAX 1tpi5bc/RTl1Ut/L3mI25OxV3OTxdFkbsW7ZWVe0zw07sRDAqOZpLJemi49rl29pAPXKf9z+ 1VVgfIq4XhcmOoJvQsx0g2FBbQDAURTPSrtjgmFqdeko+QfZWqid6SxyFsrhcqoX9Tg6klXX Hf0fItnHDclt58udguUjDuosse/JIq1D5pbrBCfnhbegvIALZswkqBPni97ISfnunZjzecnj Bto1JX8vY6dKmwr8rjqZ3wQfjDzec4X/SngyKhEmcPDlbuVJc00KBQRcM7FcaewFzYDqfnsN wCPCSAx7HCBFu/WGQaZrlxtr3fOD4yDPXaKInIU1pNnGAnbI1ZQylNxPn1yjtsiGwamyda0O k597zZX/VX4rxpQ1spwMB3uTmrUpAGpcyo5Dp+FI1AFi2MKr1eQOsuY4OVpGihe9ZD0tw2BJ FuQYAFQBH0IUEiJb7z6FoGn/sKIs+2RB+7kauDLfa3Ls+tVEfGB2ZOo1IJiuTeKLMSGeHd4X bU33U9KXHYxHMq8+X1HcBYsz3f/TtS38TqArzVwqtGj/f/rXgP2+IbJDKFdZNxr8hbwmqyDM u+MmA5zLite3Z4Xg3qU2P4YxlF36WkmezS2ELsGvDLAV+qJwP4RVkZHLXgrcpAUp6snlhFAI 8vals/42vZjg/g5Bk0EMD6p0sClaMoWIn2sYVbOBUKFLrODdnXAx8D6Z7/5SKUF1b8F8UTo5 XDASwm4Ymfm9XGhTR2kPOBSgTvOORVfvNv4aRNxES35S9mgbBSnMdhxhDlwwLsuh3qMO3RPV Fo0O05LsLCU6jtVx/tlHGkUpEFfFrHRqQeDw7z1FsMOtv96Hil/l+Rb+Wk3jbxP43RNQPVz3 jDZrttvv02OmO6SzDFqS1xL9iYNg5iE9xYHW+2R5txbVHDI8QhYp16qMExflfp/JojCh/VIz dzeiK/4KDFD6s/Zu8wGCJ3dLMuBdmEqMR/oBCL8BgwYSzWmLifa21wbl+udvC7wzNByut3nn 5wATaVeXVo+G6YBC0hrK9cFJY9+QjIulbPIxN5N/3e1qwPdAdlLpp2SHOzHGu3hcXzK6NsML wtN277zKp4fc5H2y1A3IEcvh5zEQgKTXMgR8HQ7P0lt+BkLqyA4FTF7mEP9NlH0ui5VTKbo2 EVuzFAjBIZlvHTt+wtldwOM/XFp1hdr34y93njScSavfv3oBdgEV3P47xo4YMzyTlsnP1O+w hw2b2yhJfoZzLp4KzIx0FeF68cWFaYOFP8VPBMdl6PIPKskgwsA9X3vgEZD4aGt5YJKrAIxa tbsqntB31gmd9spPenKI6EPyFFMh6WItyvu1+YrwQZYKVxfuG+VfScJvgQPONxEb2Kw+fdw7 AWZhzZZUG0cDrwypfZ76k42O+KB1j/tlblZJQi9OveeIKWQp2Xb3ZfSExVpjh9OzBEDpuQ+2 NxGEQLcT001ybqNCxkFfdHPLw1YdYsa9XTeezqPrfSYwZ9xONb1HeTpQOmS8acM1xv+TUBwR 9hKtZxHRcX/tSOQZd3qJ7ME1xg3sQHiJVHfSe9MZArOijAM5ce20J5w24BZYDAbG2R0dyutt dO17kcnhuSOWNAubzIURIwBYzgNYvbizhx4pVgVIQXiyuUd2RSP5D/6pz3NAX/7ddU2bfOdY 1V3A9Gz+Ckj26KxlFjc/46YIj3qc9N4tZWcjIFS74bCEP5SQbRn5g3EnJJEQnWxT2PVOdulf t7obI09cdH/CnC7S0GyzTUvQI2iWbTlZrjNigbuS4FOtYCd1z12Ls6xGAYVHBJorv0C7qZxN kUTJoA2ahnyu0EiJrSydU2Gh862TT/nel40B7FPiP+3bLtNw28wY/+mnTE+G4oiwbD/+AZIT ZUOxHk2JN6md9AYSS/3C2BQcAXJpDMkmi5mLOlgm4/XJTvQtl0NLz2AdOpocXFJ+dYmCgHKS Z2ZImA/WlmXgJGF51K8mbcI8HkE9+s= IronPort-Data: A9a23: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 IronPort-HdrOrdr: A9a23:DH1kKKhbTOXmojOnys+vw1T/9nBQXtsji2hC6mlwRA09TyX4rb HMoB1173TJYVoqMk3I3OruBEDiexPhHPxOjbX5VI3KNDUO+lHHEGgI1+rfKkjbakrDH5lmpM NdmsZFZeEYdWIK6PoStzPIceod/A== X-Talos-CUID: =?us-ascii?q?9a23=3AKc6jSGvaxnZjbPCDGTGxgrh56IsaQ3z03k7BD3W?= =?us-ascii?q?XSl83WbDOEGfM9aZNxp8=3D?= X-Talos-MUID: 9a23:8+U8dAllaG50Az8NBXL+dnpaFc1B5K2sInkGiJYk5ZOIdhZZHxy02WE= X-IronPort-Anti-Spam-Filtered: true X-IronPort-AV: E=Sophos;i="6.24,220,1774306800"; d="asc'?scan'208,217";a="282957565" X-IronPort-Outbreak-Status: No, level 0, Unknown - Unknown X-MGA-submission: =?us-ascii?q?MDHaMFq4chKpksoXMtPv6G0Qwj2UPlg0CQS5UP?= =?us-ascii?q?HcJH9K39bqojIDtPvsL/362ph40xmdO0igRVHagjXU18CEjnQAcEZPXG?= =?us-ascii?q?bWqK0q8eiFJpCFdis2CipPqoTEv3GJweUY5T66rQ+EC7fDZtKr7o41e7?= =?us-ascii?q?E3sKkTeWZMkzn7Xi8WGA3xRw=3D=3D?= Received: from mx1.polytechnique.org ([129.104.30.34]) by mail2-smtp-roc.national.inria.fr with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Jun 2026 12:07:53 +0200 Received: from TM.local (unknown [82.66.240.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ssl.polytechnique.org (Postfix) with ESMTPSA id 6D9211A46A; Tue, 23 Jun 2026 12:07:48 +0200 (CEST) From: Alan Schmitt To: "lwn" , caml-list@inria.fr Date: Tue, 23 Jun 2026 12:07:47 +0200 Message-ID: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="===-=-="; micalg=pgp-sha256; protocol="application/pgp-signature" X-AV-Checked: ClamAV using ClamSMTP at svoboda.polytechnique.org (Tue Jun 23 12:07:49 2026 +0200 (CEST)) X-Spam-Flag: No, tests=bogofilter, spamicity=0.366803, queueID=AE2371A489 X-Org-Mail: alan.schmitt.1995@polytechnique.org Subject: [Caml-list] Attn: Development Editor, Latest OCaml Weekly News Reply-To: Alan Schmitt X-Loop: caml-list@inria.fr X-Sequence: 19536 Errors-To: caml-list-owner@inria.fr Precedence: list Precedence: bulk Sender: caml-list-request@inria.fr X-no-archive: yes List-Id: List-Help: , List-Subscribe: , List-Unsubscribe: , List-Post: List-Owner: List-Archive: Archived-At: --===-=-= Content-Type: multipart/mixed; boundary="=-=-=" --=-=-= Content-Type: multipart/alternative; boundary="==-=-=" --==-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: base64 SGVsbG8NCg0KSGVyZSBpcyB0aGUgbGF0ZXN0IE9DYW1sIFdlZWtseSBOZXdzLCBmb3IgdGhlIHdl ZWsgb2YgSnVuZSAxNiB0byAyMywNCjIwMjYuDQoNClRhYmxlIG9mIENvbnRlbnRzDQrilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KRG9jZmQgMTMu MC4wOiBUVUkgbXVsdGlsaW5lIGZ1enp5IGRvY3VtZW50IGZpbmRlcg0KZ29vZ2xlLWRyaXZlLW9j YW1sZnVzZSAwLjkuMA0KT0NhbWwgNS41LjAgcmVsZWFzZWQNCk9sZCBDV04NCg0KDQpEb2NmZCAx My4wLjA6IFRVSSBtdWx0aWxpbmUgZnV6enkgZG9jdW1lbnQgZmluZGVyDQrilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOg0KICA8aHR0cHM6Ly9kaXNjdXNzLm9j YW1sLm9yZy90L2Fubi1kb2NmZC0xMy0wLTAtdHVpLW11bHRpbGluZS1mdXp6eS1kb2N1bWVudC1m aW5kZXIvMTgyNTkvMT4NCg0KDQpEYXJyZW4gYW5ub3VuY2VkDQrilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICBIaSBhbGwsIEkgYW0gaGFwcHkgdG8g YW5ub3VuY2UgdGhlIHJlbGVhc2Ugb2YgRG9jZmQgMTMuMC4wLg0KDQogIFtSZXBvXSAtIFtPbmxp bmUgRGVtb10NCg0KICAoVHJ5IHR5cGluZyBgL2xpc3QgZmlsZScgdG8gZ2V0IHN0YXJ0ZWQgaW4g ZGVtbywgYHgvJyB0byBjbGVhcg0KICBzZWFyY2guIERvY3VtZW50YXRpb24gc3RpbGwgV0lQLikN Cg0KDQpbUmVwb10gPGh0dHBzOi8vZ2l0aHViLmNvbS9kYXJyZW5sZGwvZG9jZmQ+DQoNCltPbmxp bmUgRGVtb10gPGh0dHBzOi8vZGVtby5kb2NmZC5zaC8+DQoNCldoYXQgRG9jZmQgaXMNCuKVjOKV jOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjA0KDQogIFRoaW5rIGludGVyYWN0aXZl IGdyZXAgZm9yIHRleHQgZmlsZXMsIFBERnMsIERPQ1hzLCBldGMsIGJ1dA0KICB3b3JkL3Rva2Vu IGJhc2VkIGluc3RlYWQgb2YgcmVnZXggYW5kIGxpbmUgYmFzZWQsIHNvIHlvdSBjYW4gc2VhcmNo DQogIGFjcm9zcyBsaW5lcyBlYXNpbHkuDQoNCiAgRG9jZmQgYWltcyB0byBwcm92aWRlIGdvb2Qg VVggdmlhIGludGVncmF0aW9uIHdpdGggY29tbW9uIHRleHQgZWRpdG9ycw0KICBhbmQgUERGIHZp ZXdlcnMsIHNvIHlvdSBjYW4ganVtcCBkaXJlY3RseSB0byBhIHNlYXJjaCByZXN1bHQgd2l0aCBh DQogIHNpbmdsZSBrZXkgcHJlc3MuDQoNCiAgKkludGVyYWN0aXZlIHVzZSoNCg0KICA8aHR0cHM6 Ly9naXRodWIuY29tL2RhcnJlbmxkbC9kb2NmZC9yYXcvbWFpbi9kZW1vLXZocy1naWZzL3JlcG8u Z2lmPg0KDQogICpOb24taW50ZXJhY3RpdmUgdXNlKg0KDQogIDxodHRwczovL2dpdGh1Yi5jb20v ZGFycmVubGRsL2RvY2ZkL3Jhdy9tYWluL2RlbW8tdmhzLWdpZnMvcmVwby1ub24taW50ZXJhY3Rp dmUuZ2lmPg0KDQoNCkZlYXR1cmVzDQrilYzilYzilYzilYzilYzilYzilYzilYwNCg0KICDigKIg TXVsdGl0aHJlYWRlZCBpbmRleGluZyBhbmQgc2VhcmNoaW5nDQogIOKAoiBNdWx0aWxpbmUgZnV6 enkgc2VhcmNoIG9mIG11bHRpcGxlIGZpbGVzDQogIOKAoiBDb250ZW50IHZpZXcgcGFuZSB0aGF0 IHNob3dzIHRoZSBzbmlwcGV0IHN1cnJvdW5kaW5nIHRoZSBzZWFyY2gNCiAgICByZXN1bHQgc2Vs ZWN0ZWQNCiAg4oCiIFRleHQgZWRpdG9yIGFuZCBQREYgdmlld2VyIGludGVncmF0aW9uDQogIOKA oiBFZGl0YWJsZSBjb21tYW5kIGhpc3RvcnkgLSByZXdyaXRlL3BsYW4geW91ciBhY3Rpb25zIGlu IHRleHQgZWRpdG9yDQogIOKAoiBTZWFyY2ggc2NvcGUgbmFycm93aW5nIC0gbGltaXQgc2NvcGUg b2YgbmV4dCBzZWFyY2ggYmFzZWQgb24gY3VycmVudA0KICAgIHNlYXJjaCByZXN1bHRzDQogIOKA oiBDbGlwYm9hcmQgaW50ZWdyYXRpb24NCg0KDQpDaGFuZ2VzIHNpbmNlIDExLjAuMA0K4pWM4pWM 4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWMDQoN CiAgRG9jZmQgaGFzIGNvbWUgYSBsb25nIHdheSBzaW5jZSBsYXN0IGFubm91bmNlbWVudCBoZXJl LCBJIHJlY29tbWVuZA0KICBjaGVja2luZyBvdXQgdGhlIFtjaGFuZ2Vsb2ddIGlmIHlvdSdyZSBp bnRlcmVzdGVkIGluIHRoZSBpbXByb3ZlbWVudHMNCiAgYW5kIG5ldyBmZWF0dXJlcy4NCg0KDQpb Y2hhbmdlbG9nXSA8aHR0cHM6Ly9naXRodWIuY29tL2RhcnJlbmxkbC9kb2NmZC9ibG9iL21haW4v Q0hBTkdFTE9HLm1kPg0KDQoNCmdvb2dsZS1kcml2ZS1vY2FtbGZ1c2UgMC45LjANCuKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6DQogIDxodHRwczovL2Rpc2N1c3Mub2Nh bWwub3JnL3QvYW5uLWdvb2dsZS1kcml2ZS1vY2FtbGZ1c2UtMC05LTAvMTgyNjMvMT4NCg0KDQpB bGVzc2FuZHJvIFN0cmFkYSBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQog IEhpIGV2ZXJ5b25lLA0KDQogIEnigJltIGhhcHB5IHRvIGFubm91bmNlIHRoYXQgYGdvb2dsZS1k cml2ZS1vY2FtbGZ1c2UnIDAuOS4wIGlzIG5vdw0KICBhdmFpbGFibGUgb24gb3BhbS4NCg0KICBU aGlzIHJlbGVhc2UgbWlncmF0ZXMgZnJvbSBgbGliZnVzZScgMiB0byBgbGliZnVzZScgMywgYWxs b3dpbmcgdGhlDQogIHBhY2thZ2UgdG8gYmUgaW5zdGFsbGVkIG9uIG1vZGVybiBMaW51eCBkaXN0 cmlidXRpb25zIHRoYXQgbm8gbG9uZ2VyDQogIHByb3ZpZGUgYGxpYmZ1c2UnIDIuDQoNCiAg4pSM 4pSA4pSA4pSA4pSADQogIOKUgiBvcGFtIHVwZGF0ZQ0KICDilIIgb3BhbSBpbnN0YWxsIGdvb2ds ZS1kcml2ZS1vY2FtbGZ1c2UNCiAg4pSU4pSA4pSA4pSA4pSADQoNCiAgUmVwb3NpdG9yaWVzOg0K DQogIOKAoiBbYGdvb2dsZS1kcml2ZS1vY2FtbGZ1c2UnXQ0KICDigKIgW2BvY2FtbGZ1c2UnXSDi gJQgT0NhbWwgYmluZGluZ3MgZm9yIGBsaWJmdXNlJw0KDQogIEJlc3QsIEFsZXNzYW5kcm8NCg0K DQpbYGdvb2dsZS1kcml2ZS1vY2FtbGZ1c2UnXQ0KPGh0dHBzOi8vZ2l0aHViLmNvbS9hc3RyYWRh L2dvb2dsZS1kcml2ZS1vY2FtbGZ1c2U+DQoNCltgb2NhbWxmdXNlJ10gPGh0dHBzOi8vZ2l0aHVi LmNvbS9hc3RyYWRhL29jYW1sZnVzZT4NCg0KDQpPQ2FtbCA1LjUuMCByZWxlYXNlZA0K4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoN CiAgQXJjaGl2ZTogPGh0dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9vY2FtbC01LTUtMC1yZWxl YXNlZC8xODI2NS8xPg0KDQoNCm9jdGFjaHJvbiBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIFdlIGhhdmUgdGhl IHBsZWFzdXJlIG9mIGNlbGVicmF0aW5nIHRoZSBiaXJ0aGRheSBvZiBCbGFpc2UgUGFzY2FsIGJ5 DQogIGFubm91bmNpbmcgdGhlIHJlbGVhc2Ugb2YgT0NhbWwgdmVyc2lvbiA1LjUuMC4NCg0KICBT b21lIG9mIHRoZSBoaWdobGlnaHRzIGluIE9DYW1sIDUuNS4wIGFyZToNCg0KDQpNb2R1bGUtZGVw ZW5kZW50IEZ1bmN0aW9ucw0K4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM 4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWMDQoNCiAgTW9kdWxlcyBjYW4g bm93IGJlIHVzZWQgYXMgZnVuY3Rpb24gYXJndW1lbnRzIGluIGEgZm9ybSBvZiBsaWdodHdlaWdo dA0KICBmdW5jdG9ycy4NCg0KICBGb3IgaW5zdGFuY2UsIHdlIGNhbiBkZWZpbmUgYSBmdW5jdGlv biBmb3IgcHJpbnRpbmcgYSBtYXAgZ2VuZXJhdGVkIGJ5DQogIHRoZSBgTWFwLk1ha2UnIGZ1bmN0 b3I6DQoNCiAg4pSM4pSA4pSA4pSA4pSADQogIOKUgiBsZXQgcHBfbWFwIChtb2R1bGUgTTogTWFw LlMpIHBwX2tleSBwcF92IHBwZiBzZXQgPQ0KICDilIIgICBpZiBNLmlzX2VtcHR5IHNldCB0aGVu DQogIOKUgiAgICAgRm9ybWF0LmZwcmludGYgcHBmICLDuCINCiAg4pSCICAgZWxzZQ0KICDilIIg ICAgbGV0IHBwX3NlcCBwcGYgKCkgPSBGb3JtYXQuZnByaW50ZiBwcGYgIixAICIgaW4NCiAg4pSC ICAgIGxldCBwcF9iaW5kaW5nIHBwZiAoayx2KSA9DQogIOKUgiAgICAgIEZvcm1hdC5mcHJpbnRm IHBwZiAiQFslYUAgPUAgJWFAXSIgcHBfa2V5IGsgcHBfdiB2DQogIOKUgiAgICBpbg0KICDilIIg ICAgRm9ybWF0LmZwcmludGYgcHBmICJAW3tAICVhQCB9QF0iDQogIOKUgiAgICAgIChGb3JtYXQu cHBfcHJpbnRfc2VxIH5wcF9zZXAgcHBfYmluZGluZykgKE0udG9fc2VxIHNldCkNCiAg4pSU4pSA 4pSA4pSA4pSADQoNCiAgV2UgY2FuIHRoZW4gYXBwbHkgdGhpcyBmdW5jdGlvbiBvbiBhIHN0cmlu ZyBtYXANCiAg4pSM4pSA4pSA4pSA4pSADQogIOKUgiBtb2R1bGUgU3RyaW5nX21hcCA9IE1hcC5N YWtlKFN0cmluZykNCiAg4pSU4pSA4pSA4pSA4pSADQogIHdpdGgNCiAg4pSM4pSA4pSA4pSA4pSA DQogIOKUgiBsZXQgKCkgPQ0KICDilIIgICBsZXQgbSA9IFN0cmluZ19tYXAub2ZfbGlzdCBbIlpl cm8iLCAiWmVybyI7ICJPbmUiLCAiVW4iXSBpbg0KICDilIIgICBsZXQgcHBfc3RyID0gRm9ybWF0 LnBwX3ByaW50X3N0cmluZyBpbg0KICDilIIgICBGb3JtYXQucHJpbnRmICIlYUAuIg0KICDilIIg ICAocHBfbWFwIChtb2R1bGUgU3RyaW5nX21hcCkgcHBfc3RyIHBwX3N0cikgbQ0KICDilJTilIDi lIDilIDilIANCg0KICBDb21wYXJlZCB0byBmaXJzdC1jbGFzcyBtb2R1bGVzLCB0aGUgdHlwZSBv ZiB0aGUgZnVuY3Rpb24gYHBwX21hcCcNCiAg4pSM4pSA4pSA4pSA4pSADQogIOKUgiB0eXBlICdh IHByaW50ZXIgPSBGb3JtYXQuZm9ybWF0dGVyIC0+ICdhIC0+IHVuaXQNCiAg4pSCIHZhbCBwcF9t YXA6IChtb2R1bGUgTTogTWFwLlMpIC0+IE0ua2V5IHByaW50ZXIgLT4gJ2EgcHJpbnRlciAtPiAn YSBNLnQgcHJpbnRlcg0KICDilJTilIDilIDilIDilIANCiAgaXMgZGVwZW5kZW50IG92ZXIgdGhl IHZhbHVlIG9mIHRoZSBtb2R1bGUgYFMnLCBhbmQgdGh1cyB0aGUgZnVuY3Rpb24NCiAgY2FuIG9u bHkgYXBwbGllZCBvdmVyIGEgc3RhdGljYWxseSBrbm93biBtb2R1bGU6DQogIOKUjOKUgOKUgOKU gOKUgA0KICDilIIgbGV0IGYgKCk6IChtb2R1bGUgTWFwLlMpID0NCiAg4pSCICAgaWYgUmFuZG9t LmJvb2wgKCkgdGhlbg0KICDilIIgICAgIChtb2R1bGUgTWFwLk1ha2UoSW50KSkNCiAg4pSCICAg ZWxzZQ0KICDilIIgICAgIChtb2R1bGUgTWFwLk1ha2UoRmxvYXQpKQ0KICDilIIgbGV0IGZhaWwg PSBwcF9tYXAgKGYgKCkpDQogIOKUlOKUgOKUgOKUgOKUgA0KICDilIzilIDilIDilIDilIANCiAg 4pSCICBFcnJvcjogVGhpcyBleHByZXNzaW9uIGhhcyB0eXBlDQogIOKUgiAgICAgICAgICAobW9k dWxlIE0gOiBNYXAuUykgLT4NCiAg4pSCICAgICAgICAgIChGb3JtYXQuZm9ybWF0dGVyIC0+IE0u a2V5IC0+IHVuaXQpIC0+DQogIOKUgiAgICAgICAgICAoRm9ybWF0LmZvcm1hdHRlciAtPiAnYSAt PiB1bml0KSAtPiBGb3JtYXQuZm9ybWF0dGVyIC0+ICdhIE0udCAtPiB1bml0DQogIOKUgiAgICAg ICAgYnV0IGFuIGV4cHJlc3Npb24gd2FzIGV4cGVjdGVkIG9mIHR5cGUgKG1vZHVsZSBNYXAuUykg LT4gJ2INCiAg4pSCICAgICAgICBUaGUgbW9kdWxlIE0gd291bGQgZXNjYXBlIGl0cyBzY29wZQ0K ICDilIIgVGhpcyBmdW5jdGlvbiBpcyBtb2R1bGUtZGVwZW5kZW50LiBUaGUgZGVwZW5kZW5jeSBp cyBwcmVzZXJ2ZWQNCiAg4pSCIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIHBhc3NlZCBhIHN0YXRpYyBt b2R1bGUgYXJndW1lbnQgKG1vZHVsZSBNIDogUykNCiAg4pSCIG9yIChtb2R1bGUgTSkuIEl0cyBh cmd1bWVudCBoZXJlIGlzIG5vdCBzdGF0aWMsIHNvIHRoZSB0eXBlLWNoZWNrZXINCiAg4pSCIHRy aWVkIGluc3RlYWQgdG8gY2hhbmdlIHRoZSBmdW5jdGlvbiB0eXBlIHRvIGJlIG5vbi1kZXBlbmRl bnQuDQogIOKUlOKUgOKUgOKUgOKUgA0KDQoNClJlbG9jYXRhYmxlIENvbXBpbGVyDQrilYzilYzi lYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYwNCg0K ICBBIGNvbXBpbGVyIGluc3RhbGxhdGlvbiBjYW4gbm93IGJlIG1vdmVkIG9yIGNvcGllZCB3aXRo IG5vIHJpc2sgb2YNCiAgaGFyZC10by1kZWJ1ZyBlcnJvcnMgZHVlIHRvIG1peGluZyBpbmNvbXBh dGlibGUgYnl0ZWNvZGUgcnVudGltZQ0KICBpbnRlcnByZXRlcnMuDQoNCiAgSW4gcHJhY3RpY2Us IHRoaXMgbWVhbnMgdGhhdCBjcmVhdGluZyBhIGxvY2FsIHN3aXRjaCB3aGVuIHRoZXJlIGlzIGEN CiAgZ2xvYmFsIHN3aXRjaCB3aXRoIHRoZSBzYW1lIGNvbXBpbGVyIHZlcnNpb24gYW5kIGNvbmZp Z3VyYXRpb24NCiAgYXZhaWxhYmxlIGNhbiBiZSBkb25lIGJ5IGNsb25pbmcgdGhlIGdsb2JhbCBz d2l0Y2ggcmF0aGVyIHRoYW4NCiAgcmVjb21waWxpbmcgdGhlIHdob2xlIGNvbXBpbGVyLg0KDQog IFRoaXMgc2hvdWxkIGNvbnNpZGVyYWJseSByZWR1Y2UgdGhlIHRpbWUgcmVxdWlyZWQgdG8gY3Jl YXRlIG5ldyBsb2NhbA0KICBvcGFtIHN3aXRjaGVzIG91dC1vZi10aGUtYm94Lg0KDQoNClBvbHlt b3JwaGljIEZ1bmN0aW9ucyBhcyBGdW5jdGlvbiBBcmd1bWVudHMNCuKVjOKVjOKVjOKVjOKVjOKV jOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKV jOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjA0K DQogIEhpZ2hlci1yYW5rIHBvbHltb3JwaGljIGZ1bmN0aW9ucyBjYW4gbm93IGJlIGRlZmluZWQg ZGlyZWN0bHkgYnkgdXNpbmcNCiAgYW4gZXhwbGljaXQgdHlwZSBhbm5vdGF0aW9uIGluIGEgZnVu Y3Rpb24gYXJndW1lbnQNCg0KICDilIzilIDilIDilIDilIANCiAg4pSCIGxldCBhcHBseV9tYXAg KG1hcDogJ2EgJ2IuICgnYSAtPiAnYikgLT4gJ2EgbGlzdCAtPiAnYiBsaXN0KSA9DQogIOKUgiAg IG1hcCBzdHJpbmdfb2ZfaW50IFsxOzI7M10sIG1hcCBMaXN0LnNpbmdsZXRvbiBbIngiOyAieSJd DQogIOKUgiBsZXQgXyA9IGFwcGx5X21hcCBMaXN0Lm1hcA0KICDilJTilIDilIDilIDilIANCg0K ICBQcmV2aW91c2x5IGRlZmluaW5nIHN1Y2ggYSBmdW5jdGlvbiByZXF1aXJlZCBnb2luZyB0aHJv dWdoIGVpdGhlciBhDQogIHJlY29yZCBvciBhbiBvYmplY3Qgd2l0aCBhIHBvbHltb3JwaGljIGZp ZWxkIG9yIG1ldGhvZHMNCg0KICDilIzilIDilIDilIDilIANCiAg4pSCIHR5cGUgbWFwID0geyBt YXA6ICdhICdiLiAoJ2EgLT4gJ2IpIC0+ICdhIGxpc3QgLT4gJ2IgbGlzdCB9DQogIOKUgiBsZXQg YXBwbHlfbWFwIHttYXB9ID0NCiAg4pSCICAgbWFwIHN0cmluZ19vZl9pbnQgWzE7MjszXSwgbWFw IExpc3Quc2luZ2xldG9uIFsieCI7ICJ5Il0NCiAg4pSU4pSA4pSA4pSA4pSADQoNCg0KU2VhcmNo IGFuZCBSZXBsYWNlIFN1YnN0cmluZyBGdW5jdGlvbnMNCuKVjOKVjOKVjOKVjOKVjOKVjOKVjOKV jOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKV jOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjA0KDQogIFRoZSBgU3RyaW5nJyBtb2R1 bGUgaGFzIGJlZW4gZXh0ZW5kZWQgd2l0aCBtYW55IGZ1bmN0aW9ucyBmb3INCiAgc2VhcmNoaW5n IGFuZCByZXBsYWNpbmcgc3Vic3RyaW5ncyBpbnNpZGUgYSBzdHJpbmcuDQoNCiAg4pSM4pSA4pSA 4pSA4pSADQogIOKUgiBsZXQgX3RydWUgPSBTdHJpbmcuaW5jbHVkZXMgfmFmZml4OiJhYmEiICJh YmJhYmEiDQogIOKUgiBsZXQgc2VudGVuY2UgPSBTdHJpbmcucmVwbGFjZV9hbGwgfnN1Yjoi8J2E vSIgfmJ5OiJ3b3JkIiAiQSDwnYS9IGlzIHJl8J2EvWVkIg0KICDilJTilIDilIDilIDilIANCg0K ICBUaGUgc3Vic3RyaW5nIHNlYXJjaCBpcyB1c2luZyB0aGUgMi13YXkgc3RyaW5nIG1hdGNoaW5n IGFsZ29yaXRobQ0KICB3aGljaCBoYXMgdGhlIGFkdmFudGFnZSBvZiByZXF1aXJpbmcgY29uc3Rh bnQgc3BhY2UgbWVtb3J5IG92ZXJoZWFkDQogIGluZGVwZW5kZW50bHkgb2YgdGhlIG5lZWRsZSBz aXplLg0KDQoNCkdlbmVyYWxpc2VkIExvY2FsIERlZmluaXRpb25zDQrilYzilYzilYzilYzilYzi lYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzi lYzilYzilYzilYzilYwNCg0KICBJdCBpcyBub3cgYWx3YXlzIHBvc3NpYmxlIHRvIGRlZmluZSBs b2NhbGx5IGEgdHlwZSwgYSBjbGFzcywgYSBtb2R1bGUNCiAgdHlwZSBvciBhbnkga2luZCBvZiBp dGVtIHRoYXQgY2FuIGJlIGRlZmluZWQgZ2xvYmFsbHk6DQoNCiAg4pSM4pSA4pSA4pSA4pSADQog IOKUgiBsZXQgbWFuZGVsYnJvdCBuIHggPQ0KICDilIIgICBsZXQgdHlwZSB0ID0gQ29udmVyZ2Ug fCBFc2NhcGUgb2YgaW50IGluDQogIOKUgiAgIC4uLg0KICDilIIgICBtYXRjaCBvcmJpdCBuIHgg d2l0aA0KICDilIIgICB8IENvbnZlcmdlIC0+IDANCiAg4pSCICAgfCBFeGl0X2F0IG4gLT4gY29s b3JpemUgbg0KICDilJTilIDilIDilIDilIANCg0KDQpFeHRlcm5hbCBUeXBlcw0K4pWM4pWM4pWM 4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWMDQoNCiAgV2hlbiBpbnRlcmZhY2luZyB3 aXRoIGZvcmVpZ24gZnVuY3Rpb24gbGlicmFyaWVzLCBpdCBpcyBub3cgcG9zc2libGUNCiAgdG8g ZGVmaW5lIGV4dGVybmFsIHR5cGUNCg0KICDilIzilIDilIDilIDilIANCiAg4pSCIHR5cGUgaW50 X2dtcCA9IGV4dGVybmFsICJtcHpfdCINCiAg4pSCIHR5cGUgZmxvYXRfZ21wID0gZXh0ZXJuYWwg Im1wZl90Ig0KICDilJTilIDilIDilIDilIANCg0KICBDb21wYXJlZCB0byBhbiBhYnN0cmFjdCB0 eXBlIGRlZmluaXRpb24sIHRoZSBleHRlcm5hbCB0eXBlIG5hbWUNCiAgIm1wel90IiAocmVzcC4g YG1wZl90JykgbWFrZXMgdGhlIHR5cGUgZGlzdGluZ3Vpc2hhYmxlIGZyb20gYW55DQogIG5vbi1h YnN0cmFjdCB0eXBlcyBvciBleHRlcm5hbCB0eXBlcyB3aXRoIGEgZGlmZmVyZW50IG5hbWUuDQoN CiAgSW4gcGFydGljdWxhciwgdGhpcyBtYWtlcyBGRkkgdHlwZXMgYmV0dGVyIGJlaGF2ZWQgd2hl biBjb21iaW5lZCB3aXRoDQogIEdlbmVyYWxpc2VkIEFic3RyYWN0IERhdGEgVHlwZXMgKEdBRFRz KS4gRm9yIGluc3RhbmNlLCBUaGUgdHlwZWNoZWNrZXINCiAgaXMgYWJsZSB0byBwcm92ZSB0aGF0 DQoNCiAg4pSM4pSA4pSA4pSA4pSADQogIOKUgiBsZXQgb2s6IChpbnRfZ21wLFtgIEFdICkgVHlw ZS5lcSAtPiBfID0gZnVuY3Rpb24gXyAtPiAuDQogIOKUlOKUgOKUgOKUgOKUgA0KDQogIGlzIGEg dG90YWwgZnVuY3Rpb24gYmVjYXVzZSB0aGUgZXh0ZXJuYWwgdHlwZSBgaW50X2dtcCcgaXMgbm90 DQogIGNvbXBhdGlibGUgd2l0aCBhIHBvbHltb3JwaGljIHZhcmlhbnQgdHlwZS4NCg0KDQpXYXJu aW5nOiBBYnN0cmFjdCB0eXBlcyBpbiB0aGUgY3VycmVudCBtb2R1bGUNCuKVjOKVjOKVjOKVjOKV jOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKV jOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKV jOKVjOKVjA0KDQogIFRoZSBhc3R1dGUgcmVhZGVyIGhhcyBwcm9iYWJseSBub3RpY2VkIGluIHRo ZSBkZWZpbml0aW9uIGFib3ZlIHRoYXQsDQogIGluIE9DYW1sIDUuNC4wLCB0aGUgdHlwZWNoZWNr ZXIgZG9lcyBhY2NlcHQNCg0KICDilIzilIDilIDilIDilIANCiAg4pSCIHR5cGUgaW50X2dtcA0K ICDilIIgbGV0IG9rOiAoaW50X2dtcCwgW2AgQV0gKSBUeXBlLmVxIC0+IF8gPSBmdW5jdGlvbiBf IC0+IC4NCiAg4pSU4pSA4pSA4pSA4pSADQogIGFzIHRvdGFsLg0KDQogIEluZGVlZCB1bnRpbCBP Q2FtbCA1LjUuMCwgYWJzdHJhY3QgdHlwZXMgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBtb2R1bGUN CiAg4pSM4pSA4pSA4pSA4pSADQogIOKUgiB0eXBlIGENCiAg4pSCIHR5cGUgYg0KICDilJTilIDi lIDilIDilIANCg0KICB3ZXJlIGNvbnNpZGVyZWQgYXMgdW5pcXVlIGFuZCBwcm92YWJseSBkaWZm ZXJlbnQNCg0KICDilIzilIDilIDilIDilIANCiAg4pSCIGxldCBmOiAneC4gKGEsYikgVHlwZS5l cSAtPiAneCA9IGZ1bmN0aW9uIF8gLT4gLg0KICDilJTilIDilIDilIDilIANCg0KICBIb3dldmVy LCB0aGlzIHNwZWNpYWwgcnVsZSBmb3IgbG9jYWwgZGVmaW5pdGlvbiBvZiBhYnN0cmFjdCB0eXBl cyB3YXMNCiAgdmVyeSBicml0dGxlLiBBcyBzb29uIGFzIG9uZSBtb3ZlZCBvdXRzaWRlIG9mIHRo ZSBjdXJyZW50IG1vZHVsZSwgaXQNCiAgd2FzIG5vIGxvbmdlciBwb3NzaWJsZSB0byBwcm92ZSB0 aGF0IHRoZSB0eXBlcyB3ZXJlIGRpZmZlcmVudC4NCg0KICDilIzilIDilIDilIDilIANCiAg4pSC IG1vZHVsZSBNID0gc3RydWN0DQogIOKUgiAgIHR5cGUgYQ0KICDilIIgICB0eXBlIGINCiAg4pSC IGVuZA0KICDilIIgbGV0IGZhaWw6ICd4LiAoTS5hLE0uYikgVHlwZS5lcSAtPiAneCA9IGZ1bmN0 aW9uIF8gLT4gLg0KICDilJTilIDilIDilIDilIANCiAg4pSM4pSA4pSA4pSA4pSADQogIOKUgiBF cnJvcjogVGhpcyBtYXRjaCBjYXNlIGNvdWxkIG5vdCBiZSByZWZ1dGVkLg0KICDilIIgICAgICAg IEhlcmUgaXMgYW4gZXhhbXBsZSBvZiBhIHZhbHVlIHRoYXQgd291bGQgcmVhY2ggaXQ6IEVxdWFs DQogIOKUlOKUgOKUgOKUgOKUgA0KDQogIFRoaXMgc3BlY2lhbCB0eXBlY2hlY2tpbmcgcnVsZSBo YXMgYmVlbiByZW1vdmVkIGluIE9DYW1sIDUuNS4wLiBJZiB5b3UNCiAgd2VyZSByZWx5aW5nIG9u IGl0LCBmb3IgaW5zdGFuY2UsIGJlY2F1c2UgeW91IHVzZWQgYW4gYWJzdHJhY3QgdHlwZSBhcw0K ICB0eXBlLWxldmVsIGxhYmVsIGluIGEgR0FEVHMsIHlvdSBjYW4gY2hhbmdlIHlvdXIgYWJzdHJh Y3QgdHlwZQ0KICBkZWZpbml0aW9uIHRvIGEgcG9zc2libHkgcHJpdmF0ZSBhYmJyZXZpYXRpb24g b2YgYSBwb2x5bW9ycGhpYyB2YXJpYW50DQoNCiAg4pSM4pSA4pSA4pSA4pSADQogIOKUgiB0eXBl IGEgPSBwcml2YXRlIFtgQV0NCiAg4pSCIHR5cGUgYiA9IFtgQl0NCiAg4pSU4pSA4pSA4pSA4pSA DQogIG9yIGEgKHBvc3NpYmx5IHByaXZhdGUpIHN1bSB0eXBlDQoNCiAg4pSM4pSA4pSA4pSA4pSA DQogIOKUgiB0eXBlIGEgPSBBDQogIOKUgiB0eXBlIGIgPSBwcml2YXRlIEINCiAg4pSU4pSA4pSA 4pSA4pSADQoNCiAgSWYgeW91IHdlcmUgdXNpbmcgYW4gYWJzdHJhY3QgdHlwZSBhcyBib3RoIGEg dHlwZS1sZXZlbCBsYWJlbCBhbmQgYQ0KICBGRkkgdHlwZSwgeW91IGNhbiBub3cgdXNlIGFuIGV4 dGVybmFsIHR5cGUgZGVmaW5pdGlvbiB3aGljaCB3aWxsIGdpdmUNCiAgeW91IGEgcHJvdmFibHkg ZGlzdGluY3QgdHlwZSBldmVuIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgbW9kdWxlLg0KDQoNCkdD IGltcHJvdmVtZW50cw0K4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM 4pWMDQoNCiAgU29tZSBvZiB0aGUgb25nb2luZyB3b3JrIHRvIGltcHJvdmUgdGhlIHBhY2luZyBv ZiB0aGUgZ2FyYmFnZQ0KICBjb2xsZWN0b3IgaGFzIGJlZW4gaW50ZWdyYXRlZCBpbiBPQ2FtbCA1 LjUuMCwgdHdvIG9mIHRoZSBpbXBvcnRhbnQNCiAgY2hhbmdlcyBpbiBPQ2FtbCA1LjUgR0MgYXJl DQoNCiAg4oCiIHRoZSBhZGRpdGlvbiBvZiBhIHN3ZWVwLW9ubHkgcGhhc2UgYXQgdGhlIHN0YXJ0 IG9mIG1ham9yIEdDDQogIOKAoiB0aGUgYWRkaXRpb24gb2YgYW4gaWRsZSBwaGFzZSB0byBzbW9v dGggdGhlIGJlaGF2aW91ciBvZiB0aGUgR0MgYXQNCiAgICB0aGUgc3RhcnQuDQoNCg0KTWFueSBp bmNyZW1lbnRhbCBjaGFuZ2VzDQrilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzi lYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYwNCg0KICDigKIgVGhlIFdpbmRvd3Mg aW1wbGVtZW50YXRpb24gaXMgbm8gbW9yZSByZWxpYW50IG9uIFdpbnB0aHJlYWRzDQogIOKAoiBB cm91bmQgNjAgbmV3IHN0YW5kYXJkIGxpYnJhcnkgZnVuY3Rpb25zDQogIOKAoiBBcm91bmQgOTAg dmFyaW91cyBpbXByb3ZlbWVudHMNCiAg4oCiIEEgZG96ZW4gb2YgZG9jdW1lbnRhdGlvbiB1cGRh dGVzDQogIOKAoiBBcm91bmQgNDAgYnVnIGZpeGVzDQoNCiAgUGxlYXNlIHJlcG9ydCBhbnkgdW5l eHBlY3RlZCBiZWhhdmlvdXJzIG9uIHRoZSBbT0NhbWwgaXNzdWUgdHJhY2tlcl0NCiAgYW5kIHBv c3QgYW55IHF1ZXN0aW9ucyBvciBjb21tZW50cyB5b3UgbWlnaHQgaGF2ZSBvbiBvdXIgW2Rpc2N1 c3Npb24NCiAgZm9ydW1zXS4NCg0KICBUaGUgZnVsbCBsaXN0IG9mIGNoYW5nZXMgY2FuIGJlIGZv dW5kIGluIHRoZSBmdWxsIGNoYW5nZWxvZy4NCg0KICBIYXBweSBoYWNraW5nLCBGbG9yaWFuIEFu Z2VsZXR0aSBmb3IgdGhlIE9DYW1sIHRlYW0uDQoNCiAg4oCUDQoNCg0KW09DYW1sIGlzc3VlIHRy YWNrZXJdIDxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwvb2NhbWwvaXNzdWVzPg0KDQpbZGlzY3Vz c2lvbiBmb3J1bXNdIDxodHRwczovL2Rpc2N1c3Mub2NhbWwub3JnPg0KDQoNCkluc3RhbGxhdGlv biBJbnN0cnVjdGlvbnMNCuKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKV jOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjA0KDQogIFRoZSBiYXNlIGNvbXBpbGVy IGNhbiBiZSBpbnN0YWxsZWQgYXMgYW4gb3BhbSBzd2l0Y2ggd2l0aCB0aGUNCiAgZm9sbG93aW5n IGNvbW1hbmRzOg0KDQogIOKUjOKUgOKUgOKUgOKUgA0KICDilIIgb3BhbSB1cGRhdGUNCiAg4pSC IG9wYW0gc3dpdGNoIGNyZWF0ZSA1LjUuMA0KICDilJTilIDilIDilIDilIANCg0KICBUaGUgc291 cmNlIGNvZGUgZm9yIHRoZSByZWxlYXNlIGlzIGFsc28gZGlyZWN0bHkgYXZhaWxhYmxlIG9uOg0K DQogIOKAoiBbR2l0SHViXQ0KICDigKIgW09DYW1sIGFyY2hpdmVzIGF0IElucmlhXQ0KDQoNCltH aXRIdWJdDQo8aHR0cHM6Ly9naXRodWIuY29tL29jYW1sL29jYW1sL3JlbGVhc2VzL2Rvd25sb2Fk LzUuNS4wL29jYW1sLTUuNS4wLnRhci5nej4NCg0KW09DYW1sIGFyY2hpdmVzIGF0IElucmlhXQ0K PGh0dHBzOi8vY2FtbC5pbnJpYS5mci9wdWIvZGlzdHJpYi9vY2FtbC01LjUvb2NhbWwtNS41LjAu dGFyLmd6Pg0KDQril4ogRmluZS1UdW5lZCBDb21waWxlciBDb25maWd1cmF0aW9uDQoNCiAgSWYg eW91IHdhbnQgdG8gdHdlYWsgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGNvbXBpbGVyLCB5b3Ug Y2FuIHN3aXRjaA0KICB0byB0aGUgb3B0aW9uIHZhcmlhbnQgd2l0aDoNCg0KICDilIzilIDilIDi lIDilIANCiAg4pSCIG9wYW0gdXBkYXRlDQogIOKUgiBvcGFtIHN3aXRjaCBjcmVhdGUgPHN3aXRj aF9uYW1lPiBvY2FtbC12YXJpYW50cy41LjUuMCtvcHRpb25zIDxvcHRpb25fbGlzdD4NCiAg4pSU 4pSA4pSA4pSA4pSADQoNCiAgd2hlcmUgYDxvcHRpb25fbGlzdD4nIGlzIGEgc3BhY2Ugc2VwYXJh dGVkIGxpc3Qgb2YgYG9jYW1sLW9wdGlvbi0qJw0KICBwYWNrYWdlcy4gRm9yIGluc3RhbmNlLCBm b3IgYSBgZmxhbWJkYScgYW5kIGBuby1mbGF0LWZsb2F0LWFycmF5Jw0KICBzd2l0Y2g6DQoNCiAg 4pSM4pSA4pSA4pSA4pSADQogIOKUgiBvcGFtIHN3aXRjaCBjcmVhdGUgNS41LjArZmxhbWJkYStu ZmZhIG9jYW1sLXZhcmlhbnRzLjUuNS4wK29wdGlvbnMgb2NhbWwtb3B0aW9uLWZsYW1iZGEgb2Nh bWwtb3B0aW9uLW5vLWZsYXQtZmxvYXQtYXJyYXkNCiAg4pSU4pSA4pSA4pSA4pSADQoNCiAgL0Vk aXRvcuKAmXMgbm90ZTogcGxlYXNlIHJlYWQgdGhlIHBvc3QgZm9yIHRoZSBmdWxsIGNoYW5nZWxv Zy4vDQoNCg0KT2xkIENXTg0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgSWYgeW91IGhhcHBl biB0byBtaXNzIGEgQ1dOLCB5b3UgY2FuIFtzZW5kIG1lIGEgbWVzc2FnZV0gYW5kIEknbGwgbWFp bA0KICBpdCB0byB5b3UsIG9yIGdvIHRha2UgYSBsb29rIGF0IFt0aGUgYXJjaGl2ZV0gb3IgdGhl IFtSU1MgZmVlZCBvZiB0aGUNCiAgYXJjaGl2ZXNdLg0KDQogIElmIHlvdSBhbHNvIHdpc2ggdG8g cmVjZWl2ZSBpdCBldmVyeSB3ZWVrIGJ5IG1haWwsIHlvdSBtYXkgc3Vic2NyaWJlDQogIHRvIHRo ZSBbY2FtbC1saXN0XS4NCg0KICBbQWxhbiBTY2htaXR0XQ0KDQoNCltzZW5kIG1lIGEgbWVzc2Fn ZV0gPG1haWx0bzphbGFuLnNjaG1pdHRAcG9seXRlY2huaXF1ZS5vcmc+DQoNClt0aGUgYXJjaGl2 ZV0gPGh0dHBzOi8vYWxhbi5wZXRpdGVwb21tZS5uZXQvY3duLz4NCg0KW1JTUyBmZWVkIG9mIHRo ZSBhcmNoaXZlc10gPGh0dHBzOi8vYWxhbi5wZXRpdGVwb21tZS5uZXQvY3duL2N3bi5yc3M+DQoN CltjYW1sLWxpc3RdIDxodHRwczovL3N5bXBhLmlucmlhLmZyL3N5bXBhL2luZm8vY2FtbC1saXN0 Pg0KDQpbQWxhbiBTY2htaXR0XSA8aHR0cHM6Ly9hbGFuLnBldGl0ZXBvbW1lLm5ldC8+DQoNCg== --==-=-= Content-Type: text/html; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable OCaml Weekly News

OCaml Weekly News

Previous Week<= /a> Up Next Week

Hello

Here is the latest OCaml Weekly News, for the week of June 16 to 23, 2026.

Docfd 13.0.0: TUI multiline fuzzy document finder

Darren announced

Hi all, I am happy to announce the release of Docfd 13.0.0.

Repo - Online Demo

(Try typing /list file to get started in demo, x/= to clear search. Documentation still WIP.)

What Docfd is

Think interactive grep for text files, PDFs, DOCXs, etc, but word/token bas= ed instead of regex and line based, so you can search across lines easily.

Docfd aims to provide good UX via integration with common text editors and = PDF viewers, so you can jump directly to a search result with a single key = press.

Interactive use

3D"repo.gif"

Non-interactive use

3D"repo-non-interactive.gif"

Features

  • Multithreaded indexing and searching
  • Multiline fuzzy search of multiple files
  • Content view pane that shows the snippet surrounding the search result = selected
  • Text editor and PDF viewer integration
  • Editable command history - rewrite/plan your actions in text editor
  • Search scope narrowing - limit scope of next search based on current se= arch results
  • Clipboard integration

Changes since 11.0.0

Docfd has come a long way since last announcement here, I recommend checkin= g out the changelog if you're interested in the improvements and new feature= s.

google-drive-ocamlfuse 0.9.0

Alessandro Strada announced

Hi everyone,

I=E2=80=99m happy to announce that google-drive-ocamlfuse 0.9.= 0 is now available on opam.

This release migrates from libfuse 2 to libfuse 3= , allowing the package to be installed on modern Linux distributions that n= o longer provide libfuse 2.

opam update
opam install google-drive-ocamlfuse

Repositories:

Best, Alessandro

OCaml 5.5.0 released

octachron announced

We have the pleasure of celebrating the birthday of Blaise Pascal by announ= cing the release of OCaml version 5.5.0.

Some of the highlights in OCaml 5.5.0 are:

Module-dependent Functions

Modules can now be used as function arguments in a form of lightweight func= tors.

For instance, we can define a function for printing a map generated by the Map.Make functor:

let pp_map (module M: Map.S) pp_key pp_v ppf set =3D
  if M.is_empty set then
    Format.fprint=
f ppf "ø"
  else
   let pp_sep ppf () =3D Format.fprintf ppf ",@ " in
   let pp_binding ppf=
 (k,v) =3D
     Format.fprin=
tf ppf "@[%a@ =3D@ %a@]" pp_key k pp=
_v v
   in
   Format.fprintf=
 ppf "@[{@ %a@ }@]"
     (Format.pp_p=
rint_seq ~pp_sep pp_binding) (M.to_seq set)

We can then apply this function on a string map

module String_map =3D M=
ap.Make(String)

with

let () =3D
  let m =3D String_map.of_list ["Zero"=
, "Zero"; "One", "Un"] in
  let pp_str =3D Format.pp_print_string in
  Format.printf <=
span style=3D"color: #ca3400;">"%a@."
  (pp_map (module=
 String_map) pp_s=
tr pp_str) m

Compared to first-class modules, the type of the function pp_map

type '=
a printer =3D For=
mat.formatter -> 'a -> unit
val pp_map: (module M: Map.S) -> M.key pr=
inter -> 'a printer -> 'a M.t printer

is dependent over the value of the module S, and thus the func= tion can only applied over a statically known module:

let f (): (module =
Map.S) =3D
  if Random.bool () then
    (module Map.Make(Int))
  else
    (module Map.Make(Float))
let fail =3D pp_map (f ())
 Error: This expression has type
         (module =
M : Map.S) ->
         (Format.=
formatter -> M.key -> unit) ->
         (Format.=
formatter -> 'a -> unit) -> Format.formatter -> 'a M.t -> unit
       but an expression was expected of =
type (module Map.S) -> 'b
       The module M would escape its scope
This function is module-depende=
nt. The dependency is preserved
when the function is passed a static module argument (module M : S)
or (module M). Its argument her=
e is not static, so the type-checker
tried instead to =
change the function type to be non-dependent.

Relocatable Compiler

A compiler installation can now be moved or copied with no risk of hard-to-debug errors due to mixing incompatible bytecode runtime interpr= eters.

In practice, this means that creating a local switch when there is a global switch with the same compiler version and configuration available can be done by cloning the global switch rather than recompiling the whole compiler.

This should considerably reduce the time required to create new local opam switches out-of-the-box.

Polymorphic Functions as Function Arguments

Higher-rank polymorphic functions can now be defined directly by using an explicit type annotation in a function argument

let apply_map (map: 'a 'b. ('a -> 'b) -> 'a list -> 'b list) =
=3D
  map string_of_int [1;2;3], map List.singleton ["x";=
 "y"]
let _ =3D apply_map List.map

Previously defining such a function required going through either a record = or an object with a polymorphic field or methods

type m=
ap =3D { map: 'a 'b. ('a -> 'b) -> 'a list -> 'b list }
let apply_map {map<=
/span>} =3D
  map string_of_int [1;2;3], map List.singleton ["x";=
 "y"]

Search and Replace Substring Functions

The String module has been extended with many functions for searching and replacing substrings inside a string.

let _true =3D String.includes ~affix:"aba" "abbaba"
let sentence =3D String.replace_all ~sub:"𝄽"<=
/span> ~by:"word" "A =
𝄽 is re𝄽ed"

The substring search is using the 2-way string matching algorithm which has the advantage of requiring constant space memory overhead independently of the needle size.

Generalised Local Definitions

It is now always possible to define locally a type, a class, a module type or any kind of item that can be defined globally:

let mandelbrot n x =3D
  let type t =3D Converge | Escape of int in
  ...
  match orbit n x=
 with
  | Converge -> 0
  | Exit_at n -> colorize n

External Types

When interfacing with foreign function libraries, it is now possible to define external type

type i=
nt_gmp =3D extern=
al "mpz_t"
type float_gmp =3D external "mpf_t"

Compared to an abstract type definition, the external type name "mpz_t" (resp. mpf_t) makes the type distinguishable from any non-abstract types or external types with a different name.

In particular, this makes FFI types better behaved when combined with Generalised Abstract Data Types (GADTs). For instance, The typechecker is able to prove that

let ok: (int_gmp,[` A] ) Type.=
eq -> _ =3D function _ -> .

is a total function because the external type int_gmp is not c= ompatible with a polymorphic variant type.

Warning: Abstract types in the current module

The astute reader has probably noticed in the definition above that, in OCaml 5.4.0, the typechecker does accept

type i=
nt_gmp
let ok: (int_gmp, [` A] ) Type.eq -> _ =3D function _ -=
> .

as total.

Indeed until OCaml 5.5.0, abstract types defined in the current module

type a=

type b

were considered as unique and provably different

let f: 'x. (a,b) Type.eq -> 'x =3D function _ -> .

However, this special rule for local definition of abstract types was very brittle. As soon as one moved outside of the current module, it was no longer possible to prove that the types were different.

module M =3D struct
  type a
  type b
end
let fail: 'x. (M.=
a,M.b) Type.function _ -> .
Error: This match case could not be refuted.
       Here is an example of a value that would reach it: Equal

This special typechecking rule has been removed in OCaml 5.5.0. If you were= relying on it, for instance, because you used an abstract type as type-level label in a GA= DTs, you can change your abstract type definition to a possibly private abbreviation= of a polymorphic variant

type a=
 =3D private [`A]
type b =3D [`B]

or a (possibly private) sum type

type a=
 =3D A
type b =3D private B

If you were using an abstract type as both a type-level label and a FFI typ= e, you can now use an external type definition which will give you a provably dist= inct type even outside of the current module.

GC improvements

Some of the ongoing work to improve the pacing of the garbage collector has been integrated in OCaml 5.5.0, two of the important changes in OCaml 5.5 GC are

  • the addition of a sweep-only phase at the start of major GC
  • the addition of an idle phase to smooth the behaviour of the GC at the start.

Many incremental changes

  • The Windows implementation is no more reliant on Winpthreads
  • Around 60 new standard library functions
  • Around 90 various improvements
  • A dozen of documentation updates
  • Around 40 bug fixes

Please report any unexpected behaviours on the OCaml issue tracker and post any questions or comments you might have on our discus= sion forums.

The full list of changes can be found in the full changelog.

Happy hacking, Florian Angeletti for the OCaml team.

Installation Instructions

The base compiler can be installed as an opam switch with the following com= mands:

opam update
opam switch create 5.5.0

The source code for the release is also directly available on:

  • Fine-Tuned Compiler Configuration

    If you want to tweak the configuration of the compiler, you can switch to t= he option variant with:

    opam update
    opam switch create <switch_name> ocaml-variants.5.5.0+options <opt=
    ion_list>
    

    where <option_list> is a space separated list of o= caml-option-* packages. For instance, for a flambda and= no-flat-float-array switch:

    opam switch create 5.5.0+flambda+nffa ocaml-variants.5.5.0+options ocaml-op=
    tion-flambda ocaml-option-no-flat-float-array
    

    Editor=E2=80=99s note: please read the post for the full changelog.

Old CWN

If you happen to miss a CWN, you can send me a message and I'll mail it to you, or go take a loo= k at the archive or the <= a href=3D"https://alan.petitepomme.net/cwn/cwn.rss">RSS feed of the archive= s.

If you also wish to receive it every week by mail, you may subscribe to the= caml-list.

--==-=-=-- --=-=-=-- --===-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQFvBAEBCABZFiEE6lXof/BsSVW56ZmGBA0KO07S5ccFAmo6WvMbFIAAAAAABAAO bWFudTIsMi41KzEuMTIsMCwzHxxhbGFuLnNjaG1pdHRAcG9seXRlY2huaXF1ZS5v cmcACgkQBA0KO07S5cc8JQgAhS/98WcQ3j5IMXAe1gDxBSWnHCe/VE35gYUFs99d dr/t0k9jPTqsanSWQHBpZsLtg1UfZG9elU/tYOO1GMyzge3nWG90l2qgEAwjSI4K cGVIaXv2AUAKXqbQbG9mIntc0cbotiF6Q4S5qzedUTXFEs60bC2KhVEcjaDRP+HS ADekG23LX2xJdKseY7wTC/A1x4i3wTlOC6TtlLJQPkSH6igOKsJ4P6gaf9hKDuAk GlZpv3jP+E77b+MV8E7bW3iNXsjTie/isipOYkCaGqtIW1CfjAyE35VW3jDcfvIt bQPtufAwTsJdT4Y6M6BBGPTvQZ0cJui1RMaLDqb7kwAmzQ== =UOhN -----END PGP SIGNATURE----- --===-=-=--