From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: 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= Authentication-Results: plum; dmarc=fail (p=none dis=none) header.from=polytechnique.org 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=fE5pXq+f; dkim=fail reason="signature verification failed" (1024-bit key; secure) header.d=polytechnique.org header.i=@polytechnique.org header.a=rsa-sha256 header.s=svoboda header.b=ThWqhOWt; dkim-atps=neutral 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 24A70B80123 for ; Tue, 16 Apr 2024 13:00:13 +0100 (BST) 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=+V+qPDGawK0555VCrEOzgPKot33RUCEODch46xJZ8XI=; b=fE5pXq+fbnOCh75Ts7/O/uPrw1dNCB4cBHasNP9l6cUQ17x5PWjdJ5wR LsBveRRLcRkNqyM/ERJkGr5AFqL4C9DMBQo5sX0KyNBt5eApFFMEldo4A gOIEILX+wmpYixz4lMwUYcQzVKqB4HZs0nmjYJc4vyXXK7IXMb4qoYgR9 0=; Received-SPF: Pass (mail2-relais-roc.national.inria.fr: domain of caml-list-owner@inria.fr designates 128.93.162.160 as permitted sender) identity=mailfrom; client-ip=128.93.162.160; 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 include:mailout.safebrands.com a:basic-mail.safebrands.com a:basic-mail01.safebrands.com a:basic-mail02.safebrands.com ip4:128.93.142.0/24 ip4:192.134.164.0/24 ip4:128.93.162.160 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@sympa.inria.fr) identity=helo; client-ip=128.93.162.160; receiver=mail2-relais-roc.national.inria.fr; envelope-from="caml-list-owner@inria.fr"; x-sender="postmaster@sympa.inria.fr"; x-conformance=spf_only Authentication-Results: mail2-relais-roc.national.inria.fr; spf=Pass smtp.mailfrom=caml-list-owner@inria.fr; spf=None smtp.helo=postmaster@sympa.inria.fr; dkim=hardfail (signature did not verify [final]) header.i=@polytechnique.org X-IronPort-AV: E=Sophos;i="6.07,205,1708383600"; d="scan'208,217";a="161847289" Received: from prod-listesu18.inria.fr (HELO sympa.inria.fr) ([128.93.162.160]) by mail2-relais-roc.national.inria.fr with ESMTP; 16 Apr 2024 14:00:11 +0200 Received: by sympa.inria.fr (Postfix, from userid 20132) id 3582CE0D68; Tue, 16 Apr 2024 14:00:10 +0200 (CEST) Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by sympa.inria.fr (Postfix) with ESMTPS id 365C3E0035 for ; Tue, 16 Apr 2024 14:00:07 +0200 (CEST) IronPort-SDR: 661e6846_JH/THq6hF7oIzQ26pthsxaK0FMEHxFRZm+dYraScC78T3wv gpYKPmJs5UlbPu+Ib6TiMIHr9OBRLEytKaIxHMQ== X-IPAS-Result: =?us-ascii?q?A0GwAgDVZh5mjCIeaIFaHgEBCxIMggQLgUGBAxkBYlYzB?= =?us-ascii?q?whIA4RTg0+OGZFFhi6BOIMKgVYUgREDGBYjFAEDAQ0uAQ4EAQIEAQEDAQIBg?= =?us-ascii?q?guCdAIWiAQCHwYBBDAJDgECBAEBAQEDAgMBAQEBAQEIAQEFAQEBAgEBAgQGA?= =?us-ascii?q?QIQAQEBAUAQNYVtDYJKLiM2NWUJBgEBAQEBAQEBAQIBAQEiAQEBAQEBAQEBA?= =?us-ascii?q?QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQIIBAGBHAEIChMBA?= =?us-ascii?q?SsNGCMDFAEGAwIEDQE1AwETARIUBgGCZQGCGkUDBQwGlzqbOnqBMoEBggoBA?= =?us-ascii?q?QaBCD4DCwIFDy/aBIFhCYFIiBQaASRIUBkChCUJhDcnD4FVRIEVNYJEb4I/C?= =?us-ascii?q?xcCAQFcYAEBBgs8CYMlgmiCFYRESCaBbwGFXU8IFWqCaTiBUV8SgQ4vGRJhF?= =?us-ascii?q?oJPhiOBS0szMgFVEyIPDBoCGxQNJCMCKT4DCQoQAhYDHRQEMBEJCyYDKgY2A?= =?us-ascii?q?hIMBgYGWyAWCQQjAwgEA1ADIHARAwQaBAsHdYFEgXUEE0QDEIEyhz+CVoM9g?= =?us-ascii?q?iCEMkuFDYFgA0QdQAMLbT01FBsonWkEOAIBgh8VDgskCQIEBykOFhQUDQEFA?= =?us-ascii?q?RMWAiACNhghCgQRBBEIDQsDAxgBAQENAR4JAgcEAgQpA5IuFAkcAwUlA3KOJ?= =?us-ascii?q?oNPiW5IkkKBIWw0B4QWgVsGDIh9gSSHHo5OhAWBVolMgVyGeoNOjUg9ZCKYQ?= =?us-ascii?q?CCCNIcdgSUJgWxplQUQLAQEFAGFM4FkOoFHDgczGjBDgmcJRhwPjiAMFoNYg?= =?us-ascii?q?T6BJoF1O1qQJEE1AgEBDikCBwEKAQEDCYViAQGDDDKBSAEB?= IronPort-PHdr: A9a23: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 slisw== IronPort-Data: A9a23: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 IronPort-HdrOrdr: A9a23:tMKkTaPh08H5O8BcT0D155DYdb4zR+YMi2TDiHoddfUFSKalfp 6V98jzjSWE8Ar4WBkb+exoS5PwOk80kqQFqrX5XI3SFDUO11HYSL2KgbGN/9SkIVyGygc/79 YrT0EdMqyWMbESt6+TjGaF+pQbsb+6GcuT9ITjJgJWPGRXgtZbnmVE42igc3FedU1jP94UBZ Cc7s1Iq36LYnIMdPm2AXEDQqzqu8DLvIiOW29LOzcXrC21yR+44r/zFBaVmj0EVSlU/Lsk+W /Z1yTk+6SYte2hwBO07R6d030Woqqu9jJwPr3NtiEnEESutu9uXvUiZ1S2hkF1nAho0idurD CDmWZlAy050QKqQoj8m2qR5+Cn6kdi15aq8y7mvZPuzPaJOA4SGo5Pg5lUfQDe7FdltNZg0L hT12bcrJZPCwjc9R6NkOQgeisa43Zcm0BS5dI7njhaS88TebVRpYsQ8AdcF4oBBjvz7MQiHP N1BM/R6f5KeRfCBkqp91VH0ZipRDA+Dx2GSk8Ntoic1CVXhmlwyw8dyNYElnkN+ZohQ91P5v jCMK5viLZSJ/VmG55VFaMEW4+6G2bNSRXDPCabJknmDrgOPzbXp5v+8NwOlZOXkVwzvegPcb j6ISNlXDQJCjzT4OW1rex2ziw= X-Talos-CUID: =?us-ascii?q?9a23=3AxDMdimr9UwbYZ/X/TQ6TM5jmUckbUEeMnU3rGXS?= =?us-ascii?q?xJjhKU4aHUkeJ1Lwxxg=3D=3D?= X-Talos-MUID: 9a23:U85Q8ARNuYKV/9pnRXTQnGk/DOhI8Z/2FUEXl8o8neSGMzx/bmI= X-IronPort-Anti-Spam-Filtered: true X-IronPort-AV: E=Sophos;i="6.07,205,1708383600"; d="scan'208,217";a="161847213" X-URL-ContentFilter: X-MGA-submission: =?us-ascii?q?MDHumCqObetqcij8kaqG77ZPdQ5o5f+ITSE/87?= =?us-ascii?q?hQLOtwy35EcaMmy0rYsWAS1M+WfOananl+b4qgIdMZYLf1QvNm/7b4bR?= =?us-ascii?q?pjQuMnCmMj+4i/7GwmDqjoZQfiF6kYgxCHOT2nDs7oN1RXe5KpOIKl7L?= =?us-ascii?q?cxlDZy6Ru1YNVJIKOmwNut+Q=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; 16 Apr 2024 14:00:06 +0200 Received: from mac-03220211.irisa.fr (mac-03220211.irisa.fr [131.254.21.249]) (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 EE9345647D9; Tue, 16 Apr 2024 14:00:04 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=polytechnique.org; s=svoboda; t=1713268805; bh=LrJbbygNuXltKTzJAUAa5E6N5YIa0xYrvUK49XQbHRY=; h=From:To:Subject:Date:Message-ID; b=ThWqhOWtkZtZ8K59NYhQ/ZP+/6Qo8+7PiLGxO35m4arkM4jiqAN8QN+WzNRh1NCQr 5euzWTFm13aIJxR+EZoZGBYtXEPIKjF9ns0jcSTcVx00e/bJ7SSucwBj50AoAXSnC2 DORSWEB1G76oZX0Ad9k9fBlZRqwofjDcK7Lzyw8Q= From: Alan Schmitt To: "lwn" , caml-list@inria.fr Date: Tue, 16 Apr 2024 14:00:02 +0200 Message-ID: MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="=-=-=" X-AV-Checked: ClamAV using ClamSMTP at svoboda.polytechnique.org (Tue Apr 16 14:00:05 2024 +0200 (CEST)) X-Spam-Flag: Unsure, tests=bogofilter, spamicity=0.499185, queueID=373D95647DA 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: 19112 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: text/plain; charset=utf-8 Content-Transfer-Encoding: base64 SGVsbG8NCg0KSGVyZSBpcyB0aGUgbGF0ZXN0IE9DYW1sIFdlZWtseSBOZXdzLCBmb3IgdGhlIHdl ZWsgb2YgQXByaWwgMDkgdG8gMTYsDQoyMDI0Lg0KDQpUYWJsZSBvZiBDb250ZW50cw0K4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCk1lbGFuZ2Ug MjAyNCBQcm9ncmVzcyBVcGRhdGUNClBweGxpYiBtYWludGVuYW5jZSBzdW1tYXJ5DQpUaGUgT0Nh bWwgY29tbXVuaXR5IGlzIHNpZ25lZCB1cCBmb3IgT3V0cmVhY2h5IQ0Kb3BhbSAyLjIuMH5iZXRh Mg0KR29zcGVsIDAuMy4wDQpGcmVkIDAuMS4wIC0gRmVkZXJhbCBSZXNlcnZlIEVjb25vbWljIERh dGEgQVBJDQpPQ0FOTkwgMC4zLjE6IGEgZnJvbS1zY3JhdGNoIGRlZXAgbGVhcm5pbmcgKGkuZS4g ZGVuc2UgdGVuc29yIG9wdGltaXphdGlvbikgZnJhbWV3b3JrDQpPdGhlciBPQ2FtbCBOZXdzDQpP bGQgQ1dODQoNCg0KTWVsYW5nZSAyMDI0IFByb2dyZXNzIFVwZGF0ZQ0K4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZToNCiAgPGh0dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcv dC9ibG9nLW1lbGFuZ2UtMjAyNC1wcm9ncmVzcy11cGRhdGUvMTQ0NTcvMT4NCg0KDQpBbnRvbmlv IE51bm8gTW9udGVpcm8gYW5ub3VuY2VkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIANCg0KICB3ZSByZWNlbnRseSBzaGFyZWQgd2hhdCB3ZSd2ZSBiZWVuIHVwIHRvIGFyb3Vu ZCBNZWxhbmdlICYgZWNvc3lzdGVtIGluDQogIGEgYmxvZyBwb3N0IHdoaWNoIHlvdSBjYW4gZmlu ZCBoZXJlOg0KDQogIDxodHRwczovL21lbGFuZ2UucmUvYmxvZy9wb3N0cy93aGF0cy0yMDI0LWJy b3VnaHQtdG8tbWVsYW5nZS1zby1mYXI+DQoNCiAgSSBob3BlIHlvdSBmaW5kIHRoZSBhYm92ZSBp bmZvcm1hdGl2ZS4gTG9va2luZyBmb3J3YXJkIHRvIHlvdXINCiAgdGhvdWdodHMuDQoNCg0KUHB4 bGliIG1haW50ZW5hbmNlIHN1bW1hcnkNCuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEFyY2hp dmU6DQogIDxodHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3QvcHB4bGliLW1haW50ZW5hbmNlLXN1 bW1hcnkvMTQ0NTgvMT4NCg0KDQpOYXRoYW4gUmVib3VycyBhbm5vdW5jZWQNCuKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgA0KDQogIEkgcmVjZW50bHkgc3RhcnRlZCB3b3JraW5nIG9uIHBweGxpYiBhZ2FpbiB0aGFu a3MgdG8gdGhlIE9DYW1sDQogIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhbnRlZCB0byByZXBv cnQgYmFjayB0byB0aGUgY29tbXVuaXR5IGFsbCB0aGUNCiAgd29yayB0aGVpciBmdW5kaW5nIG1h ZGUgcG9zc2libGUgc28gZmFyIGFsb25nIHdpdGggdGhlIHBsYW4gZm9yIHRoZQ0KICBuZXh0IHN0 ZXBzLg0KDQogIEtub3cgdGhhdCBPQ1NGIGlzIG9ubHkgZnVuZGluZyBtZSBwYXJ0IHRpbWUgb24g dGhpcyBhbmQgdGhhdCBJJ20gb3Blbg0KICB0byBtb3JlIE9DYW1sIGZyZWVsYW5jZSB3b3JrIQ0K DQoNClN1bW1hcnkgb2YgdGhlIHdvcmsNCuKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKV jOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjA0KDQril4ogSW1wcm92ZWQgZXJyb3IgcmVwb3J0aW5n DQoNCiAgUHB4bGliIGhhcyBhbiBgLWVtYmVkLWVycm9yJyBmbGFnIHRoYXQgaXMgbW9zdCB1c2Vm dWwgdG8gbWVybGluIGFzIGl0DQogIGFsbG93cyBpdCB0byBhbHdheXMgZ2V0IGFuIEFTVCBvdXQg b2YgdGhlIGRyaXZlciBhbmQgYWxsb3dzIGl0IHRvIGtlZXANCiAgb3BlcmF0aW5nIG5vcm1hbGx5 IHdoZW4gYSBwcHggcmFpc2VzIGEgbG9jYXRlZCBleGNlcHRpb24gKGFzIGluIHJhaXNlZA0KICB3 aXRoIGBMb2NhdGlvbi5yYWlzZV9lcnJvcmYnKSBhcyBpdCB3b3VsZCBhbHdheXMgZ2V0IGFuIEFT VCBvdXQgb2YgdGhlDQogIGRyaXZlciBydW4uDQoNCiAgVGhlIHByb2JsZW0gd2l0aCB0aGlzIG1v ZGUgd2FzIHRoYXQgaXQgZGlkbid0IHRyeSB0byByZWNvdmVyIGZyb20gc3VjaA0KICBleGNlcHRp b25zIGFuZCB3b3VsZCBzdG9wIGFwcGx5aW5nIHRyYW5zZm9ybWF0aW9ucy4gVGhlIGVycm9yIHdh cw0KICBwcm9wZXJseSByZXBvcnRlZCBieSBtZXJsaW4gYW5kIGl0IHN0aWxsIGhhZCBhIHZhbGlk IEFTVCB0byB3b3JrIHdpdGgNCiAgYnV0IG5vbmUgb2YgdGhlIHBvdGVudGlhbCBlcnJvcnMgZnJv bSBzdWJzZXF1ZW50IHJld3JpdGluZyBvciBjb2RlIGdlbg0KICB3b3VsZCBiZSByZXBvcnRlZC4g IFRoaXMgbGVhZCB0byBhIHRlZGlvdXMgd29ya2Zsb3cgd2hlcmUgdGhlIHVzZXINCiAgd291bGQg Zml4IG9uZSBlcnJvciwgc2F2ZSB0aGUgZmlsZSwgc2VlIGEgbmV3IGVycm9yIHJlcG9ydGVkIGJ5 DQogIG1lcmxpbiwgZml4IGl0LCBzYXZlLCBhbmQgc28gb24uDQoNCiAgVGhlcmUgd2FzIGEgc2Vy aWVzIG9mIFBScyBieSBAQnVybmxleWRldjEgbG9uZyBwZW5kaW5nIHJldmlldyB0aGF0DQogIHdl cmUgZml4aW5nIHRoaXMgYnkgY29sbGVjdGluZyBhbGwgc3VjaCBleGNlcHRpb25zIHdoaWxlIGtl ZXBpbmcgb24NCiAgdGhlIHJld3JpdGluZyBwaGFzZXMgdXNpbmcgdGhlIGxhc3QgdmFsaWQgQVNU IG9yIG5vZGUuDQoNCiAgSSByZXZpZXdlZCBhbmQgZml4ZWQgdGhvc2UgUFJzIChbIzQ0N10sIFsj NDUzXSBhbmQgWyM0NTddKSBhbmQgd29ya2VkDQogIG9uIGEgY291cGxlIGZpeGVzIGFuZCBpbXBy b3ZlbWVudHMgdG8gZXJyb3IgcmVwb3J0aW5nIHJlbGF0ZWQgdG8gdGhpcw0KICB3b3JrLg0KDQoN CiAgWyM0NDddIDxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwtcHB4L3BweGxpYi9wdWxsLzQ0Nz4N Cg0KICBbIzQ1M10gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC1wcHgvcHB4bGliL3B1bGwvNDYz Pg0KDQogIFsjNDU3XSA8aHR0cHM6Ly9naXRodWIuY29tL29jYW1sLXBweC9wcHhsaWIvcHVsbC80 NTc+DQoNCg0K4peKIERyaXZlciBtb2RlIGZvciBkdW5lDQoNCiAgRHVuZSBoYXMgb25nb2luZyBp bnRlcm5hbCB3b3JrIHRvIGJlIGFibGUgdG8gdXNlIHBweCBpbg0KICBkZXZlbG9wbWVudC4gU2lu Y2UgaXQgY2Fubm90IGRlcGVuZCBvbiBwcHhsaWIgb3IgYW55IHBweCBhdCBidWlsZA0KICB0aW1l LCB0aGVpciBzb2x1dGlvbiByZWxpZXMgb24gdXNpbmcgcHB4bGliIGFuZCBwcHggbm9ybWFsbHkg aW4NCiAgZGV2ZWxvcG1lbnQgYnV0IHVzaW5nIGFscmVhZHkgcHJlcHJvY2Vzc2VkIGNvcGllcyBv ZiBzb3VyY2UgZmlsZXMgdGhhdA0KICByZXF1aXJlIHJld3JpdGluZyBmb3IgYm9vdHN0cmFwcGlu ZywgbWFraW5nIHRoZWlyIG9wYW0gYnVpbGQgcHB4LWZyZWUuDQoNCiAgVGhleSByZXF1aXJlIGEg c3BlY2lhbCBkcml2ZXIgbW9kZSB0aGF0IHdyaXRlcyB0byB0aGUgb3V0cHV0IGZpbGUgb25seQ0K ICBpZiBhbnkgYWN0dWFsIHJld3JpdGluZyBoYXBwZW5lZC4NCg0KICBJIHdvcmtlZCBvbiBhIGZp cnN0IHByb3RvdHlwZSBvZiB0aGlzIHVzaW5nIGEgcHJlLWV4aXN0aW5nIGhvb2sgY2FsbGVkDQog IGZvciBlYWNoIGdlbmVyYXRlZCBBU1Qgbm9kZS4NCg0KDQril4ogNS4yIGNvbXBhdCBvbiB0cnVu ay1zdXBwb3J0DQoNCiAgVGhlIG1haW4gdGFzayBzaW5jZSBJIHN0YXJ0ZWQgd29ya2luZyBvbiBw cHhsaWIgd2FzIHRoZSA1LjINCiAgc3VwcG9ydC4gQXMgT0NhbWwgNS4yIGlzIGNvbWluZyBvdXQg c29vbiBhbmQgcHB4bGliIGlzIGEgY2VudHJhbCBwaWVjZQ0KICBpbiB0aGUgT0NhbWwgZWNvc3lz dGVtLCBpdCdzIGltcG9ydGFudCB0aGF0IHBweGxpYiBoYXMgYSBjb21wYXRpYmxlDQogIHZlcnNp b24gYXZhaWxhYmxlIGZvciB0ZXN0aW5nIG91dCB0aGUgbmV3IGNvbXBpbGVyLiBXaXRob3V0IGl0 LCBhIGxvdA0KICBvZiBvcGFtIHBhY2thZ2VzIGNhbid0IGJlIGJ1aWx0IHdpdGggdGhlIGFscGhh IGFuZCBiZXRhIHJlbGVhc2VzIG9mDQogIHRoZSBjb21waWxlciBiZWNhdXNlIG9mIHRoZWlyIHBw eCBkZXBlbmRlbmNpZXMuDQoNCiAgcHB4bGliIGhhcyBhIGB0cnVuay1zdXBwb3J0JyBicmFuY2gg dGhhdCBpcyBtZWFudCB0byBiZSBrZXB0IHVwIHRvDQogIGRhdGUgZm9yIHN1Y2ggb2NjYXNpb25z LiBXaGlsZSBpdCBhbHJlYWR5IGNvbnRhaW5lZCB0aGUgQVNUIG1pZ3JhdGlvbg0KICBmcm9tL3Rv IHRoZSA1LjIgdmVyc2lvbiwgaXQgd2FzIG91dCBvZiBzeW5jIHdpdGggdGhlIG1haW4gYnJhbmNo IG9mDQogIHBweGxpYi4NCg0KICBJIHJlYmFzZWQgdGhlIDUuMiByZWxldmFudCBwYXJ0cyBvZiB0 aGUgYnJhbmNoIG9uIHRvcCBvZiBvdXIgbWFpbg0KICBicmFuY2ggdG8gYmUgYWJsZSB0byBjdXQg YSBmaXJzdCBwcmV2aWV3IHZlcnNpb24gd2l0aCA1LjIgY29tcGF0IGFuZA0KICBmaXhlZCBhIGNv dXBsZSBvZiBidWdzIGFuZCBxdWlya3MgaW4gdGhlIGNvZGUgYmFzZSB0aGF0IHByZXZlbnRlZCB0 aGUNCiAgdGVzdCBzdWl0ZSBmcm9tIHJ1bm5pbmcgcHJvcGVybHkgd2l0aCB0aGUgNS4yIHN1cHBv cnQuDQoNCiAgQWZ0ZXIgdGhlIGZpcnN0IHJlbGVhc2Ugb2YgdGhlIHByZXZpZXcgdmVyc2lvbiB3 ZSBkaXNjb3ZlcmVkIGEgc2VyaWVzDQogIG9mIGJ1Z3Mgd2l0aCB0aGUgaGVscCBvZiBAa2l0LXR5 LWthdGUsIEBvY3RhY2hyb24gYW5kIEBhbm1vbnRlaXJvLiBUaGUNCiAgbW9zdCBpbXBvcnRhbnQg YW1vbmcgdGhvc2UgYmVpbmc6DQogIOKAoiBBIGJ1ZyBpbiB0aGUgcm91bmQgdHJpcCBtaWdyYXRp b24gb2YgdGhlIG5ldyBgUGV4cF9mdW5jdGlvbicgbm9kZQ0KICAgIGZyb20gNS4yIHRoYXQgd2Fz IGNhdXNpbmcgY29tcGlsYXRpb24gZXJyb3JzIHdoZW4gdGhlIGZ1bmN0aW9uJ3MNCiAgcmV0dXJu IHR5cGUgd2FzIGNvZXJjZWQuDQogIOKAoiBUaGUgbmV3IHN5bnRheCBmb3IgYG9jYW1sLnBweC5j b250ZXh0JyB3YXMgY2F1c2luZyBkcml2ZXIgY3Jhc2hlcw0KICAgIHdoZW4gcmVhZGluZyBzb21l IGJpbmFyeSBBU1RzLiBJIHdyb3RlIGEgbWlncmF0aW9uIGZvciB0aG9zZQ0KICBhdHRyaWJ1dGVz IHRoYXQgZml4ZWQgdGhlIGlzc3VlLg0KICDigKIgVGhlIGRyaXZlciB3YXMgc2lsZW50bHkgcmVs eWluZyBvbiB0aGUgY29tcGlsZXIgdG8gcmUtb3BlbiBmaWxlcyB0bw0KICAgIGRpc3BsYXkgc291 cmNlIHF1b3RhdGlvbiB3aGVuIHJlcG9ydGluZyBsb2NhdGVkIGV4Y2VwdGlvbnMuDQogIFNpbmNl IHRoaXMgd2FzIHJlbW92ZWQgZnJvbSB0aGUgY29tcGlsZXIgaW4gNS4yLCBJIGZpeGVkIHRoZSBk cml2ZXIgdG8NCiAgcHJvcGVybHkgc2V0IGBMb2NhdGlvbi5pbnB1dF9sZXhidWYnIGFuZCByZS1l bmFibGUgc291cmNlLXF1b3RhdGlvbi4NCg0KDQril4ogcHB4X2Rlcml2aW5nIG1haW50ZW5hbmNl DQoNCiAgYHBweF9kZXJpdmluZycgaXMgcXVpdGUgYSBjZW50cmFsIHBpZWNlIG9mIHRoZSBwcHgg ZWNvc3lzdGVtLA0KICBlc3BlY2lhbGx5IGZvciB0aGUgc2V0IG9mIHN0YW5kYXJkIGRlcml2ZXJz IGl0IHByb3ZpZGVzDQogIChwcmV0dHktcHJpbnRlcnMsIGVxdWFsaXR5IGFuZCBjb21wYXJpc29u IGZ1bmN0aW9ucywgZXRjLikuDQoNCiAgVGhlIHByb2plY3Qgd2FzIGxhY2tpbmcgbWFpbnRhaW5l cnMgd2l0aCBlbm91Z2ggdGltZSB0byByZXZpZXcgYW4NCiAgaW1wb3J0YW50IFBSIG1pZ3JhdGlu ZyB0aG9zZSBzdGFuZGFyZCBkZXJpdmVycyB0byBwcHhsaWIuIFRoaXMgaXMNCiAgaW1wb3J0YW50 IGJlY2F1c2UgaXQgbWFrZXMgdGhvc2UgcXVpdGUgYnJvYWRseSB1c2VkIGRlcml2ZXJzIGJldHRl cg0KICBpbnRlZ3JhdGVkIHdpdGggcHB4bGliIGZlYXR1cmVzIGFuZCBpbXByb3ZlcyBib3RoIHBl cmZvcm1hbmNlcyBhbmQNCiAgZXJyb3IgcmVwb3J0aW5nIGZvciB0aGVpciB1c2VycyBhcyB0aGV5 IGFyZSBub3cgYXBwbGllZCBhcyBwYXJ0IG9mIHRoZQ0KICBtYWluIHBweGxpYiBkcml2ZXIgQVNU IHRyYXZlcnNhbC4NCg0KICBJIHJldmlld2VkIHRoZSBQUiBhbmQgY2xlYW5lZCB1cCB0aGUgcmVw byBhIGJpdCB0byBhdHRlbXB0IGEgcmVsZWFzZSwNCiAgc29tZXRoaW5nIHRoYXQgaGFzIG5vdCBo YXBwZW5lZCBmb3IgMyB5ZWFycyBmb3IgdGhpcyBwYWNrYWdlLg0KDQogIFRoZSBpbml0aWFsIHJl bGVhc2UgZmFpbGVkIGZvciB0d28gcmVhc29uczoNCiAg4oCiIGBwcHhfZGVyaXZpbmcuc2hvdycn cyBkZXJpdmVyIGFjY2VwdHMgYW4gYXJndW1lbnQgdGhhdCBzcGVjaWZpZXMgaG93DQogICAgdGhl IGltcGxlbWVudGF0aW9uIHNob3VsZCBiZWhhdmUgd2l0aG91dCBpbXBhY3RpbmcgdGhlDQogIGZ1 bmN0aW9uIHNpZ25hdHVyZS4gSW4gdGhlIHBweGxpYiBwb3J0IHdlIGRpZCBub3QgcmVnaXN0ZXIg dGhpcw0KICBhcmd1bWVudCBmb3IgdGhlIHNpZ25hdHVyZSBkZXJpdmVyIHNpbmNlIGl0IGhhZCBu byBpbXBhY3Qgb24gdGhlDQogIGdlbmVyYXRlZCBjb2RlIHRoZXJlLiBJdCB0dXJucyBvdXQgYXQg bGVhc3Qgb25lIG9wYW0gcGFja2FnZSB1c2VkIHRoZQ0KICBhcmd1bWVudCBpbiBhbiBgLm1saScg ZmlsZSBzbyB3ZSBhZGRlZCBpdCBmb3IgY29tcGF0aWJpbGl0eSBhcw0KICBgcHB4X2Rlcml2aW5n JyBkdXBsaWNhdGVkIHRoZSBzZXQgb2YgYXJndW1lbnRzIGZvciBpbXBsZW1lbnRhdGlvbiBhbmQN CiAgaW50ZXJmYWNlcw0KICDigKIgYHBweF9kZXJpdmluZycgdXNlZCB0byBhdXRvbWF0aWNhbGx5 IHJlZ2lzdGVyIGV4dGVuc2lvbnMgZm9yIGVhY2gNCiAgICBkZXJpdmVycyB0aGF0IGNhbiBiZSB1 c2VkIHRvIGlubGluZSB0aGUgZGVyaXZlZCBmdW5jdGlvbiBmb3IgYQ0KICBnaXZlbiB0eXBlIGlu IGFuIGV4cHJlc3Npb24uIFdlIHByZXNlcnZlZCB0aGlzIGluIHRoZSBwcHhsaWIgcG9ydCBidXQN CiAgaXQgY2F1c2VkIGEgY29uZmxpY3Qgd2l0aCBgcHB4X2xldCcuIFRoaXMgY29uZmxpY3Qgc2hv dWxkIGJlIHJlc29sdmVkDQogIG9uIGBwcHhfbGV0JydzIHNpZGUgYXMgdGhleSB3ZXJlIGRlY2xh cmluZyBhbiBleHRlbnNpb24gbmFtZWQgYG1hcCcNCiAgd2l0aG91dCBhbnkgcG9zc2libGUgcHJl Zml4IHN1Y2ggYXMgYHBweF9sZXQubWFwJyB3aGljaCBpcyB0aGUNCiAgcmVjb21tZW5kZWQgd2F5 LiBVc2luZyBhIHByZWZpeCBhbGxvd3MgdGhlIHVzZXIgdG8gZGlzYW1iaWd1YXRlIGlmDQogIHNl dmVyYWwgcHB4IGRlY2xhcmUgYW4gZXh0ZW5zaW9uIHdpdGggdGhlIHNhbWUgYmFzZSBuYW1lLg0K DQogIFdlIGhhZCB0byBjYW5jZWwgdGhlIHJlbGVhc2UgdG8gZml4IHRob3NlIGlzc3VlcyBiZWZv cmUgYXR0ZW1wdGluZw0KICBhZ2Fpbi4NCg0KDQril4ogR2VuZXJhbCBtYWludGVuYW5jZQ0KDQog IFRoZXJlIHdhcyBhbHNvIHNvbWUgcmVndWxhciBtYWludGVuYW5jZSBzdWNoIGFzIGltcHJvdmlu ZyBvdXIgaG9tZW1hZGUNCiAgZXhwZWN0IHRlc3QgcnVubmVyIHRvIGJlIGFibGUgdG8gYmV0dGVy IHJ1biBvdXIgdGVzdHMgYWNyb3NzIGFsbA0KICBzdXBwb3J0ZWQgY29tcGlsZXIgdmVyc2lvbnMs IHJldmlld2luZyBhbGwgcGVuZGluZyBQUnMsIHVwZ3JhZGluZw0KICBvY2FtbGZvcm1hdCBhbmQg Y3V0dGluZyBhIHJlbGVhc2Ugb2YgcHB4bGliIHdpdGggdGhlIGxhdGVzdCBmZWF0dXJlcy4NCg0K DQpOZXh0IHN0ZXBzDQrilYzilYzilYzilYzilYzilYzilYzilYzilYzilYwNCg0KICBBbG9uZyB3 aXRoIHRoZSBnZW5lcmFsIG1haW50ZW5hbmNlIG9mIHRoZSBwcm9qZWN0IHRoZXJlIGFyZSB0d28g dGhpbmdzDQogIHRoYXQgd291bGQgZ3JlYXRseSByZWR1Y2UgdGhlIG1haW50ZW5hbmNlIGJ1cmRl biBvbiBwcHhsaWIgYW5kIHdvdWxkDQogIGltcHJvdmUgdGhlIHN0YXRlIG9mIHRoZSBlY29zeXN0 ZW0gZm9yIHRoZSBjb21tdW5pdHkgdGhhdCB3ZSB3b3VsZA0KICBsaWtlIHRvIHdvcmsgb24uDQoN Cg0K4peKIFVwc3RyZWFtaW5nIEFzdGxpYiB0byB0aGUgY29tcGlsZXINCg0KICBUaGlzIGhhcyBi ZWVuIGluIHRoZSB3b3JrcyBmb3IgcXVpdGUgYSBsb25nIHRpbWUgYnV0IHRoZSBwcmV2aW91cw0K ICBtYWludGFpbmVycyBoYXZlbid0IGhhZCB0aGUgY2hhbmNlIHRvIHNlZSBpdCB0aHJvdWdoLg0K DQogIFRoZSBwbGFuIGlzIHRvIHVwc3RyZWFtIGEgc21hbGwgcGFydCBvZiBwcHhsaWIgaW50byB0 aGUgY29tcGlsZXIgdG8NCiAgZWFzZSB0aGUgcmVsZWFzZSBwcm9jZXNzIGZvciBuZXcgY29tcGls ZXJzLg0KDQogIFRoaXMgc21hbGwgbGlicmFyeSBzaG91bGQgY29udGFpbiB0aGUgbWluaW1hbCBz dWJzZXQgb2Ygc3RhYmxlIEFQSQ0KICBwcHhsaWIgbmVlZHMgdG8gcHJvcGVybHkgZnVuY3Rpb24g YW5kLCBtb3N0IGltcG9ydGFudGx5LCB0aGUgQVNUDQogIG1pZ3JhdGlvbnMgZnJvbSB0aGUgY3Vy cmVudCB2ZXJzaW9uIG9mIHRoZSBjb21waWxlciB0byB0aGUgcHJldmlvdXMNCiAgdmVyc2lvbiBh bmQgYmFjay4gVGhlIGlkZWEgaXMgdGhhdCB0cnVuayB3b3VsZCB0aGVuIHByb3ZpZGUgdGhlDQog IG1pZ3JhdGlvbiB0byB0aGUgbGF0ZXN0IHJlbGVhc2VkIHZlcnNpb24gYXQgYWxsIHRpbWUgYW5k IHBweGxpYiB3b3VsZA0KICBiZSBhYmxlIHRvIHVzZSB0aG9zZSBpZiBpdCBkb2VzIG5vdCBuYXRp dmVseSBzdXBwb3J0cyB0aGVtIHlldC4gIFRoYXQNCiAgd291bGQgbWFrZSB0ZXN0aW5nIHRoZSBj b21waWxlciBvbiBvcGFtIHdvcmsgd2l0aG91dCByZXF1aXJpbmcgYQ0KICBzcGVjaWFsIHJlbGVh c2Ugb2YgcHB4bGliIGFuZCB3b3VsZCBhbHNvIGVhc2UgdGhlIG1pZ3JhdGlvbiB3cml0aW5nDQog IHByb2Nlc3MgYXMgdGhleSB3b3VsZCBiZSB3cml0dGVuIGF0IHRoZSB0aW1lIG9mIHRoZSBBU1Qg Y2hhbmdlIGJ5IHRoZQ0KICBwZXJzb24gd2hvIG1vZGlmaWVkIGl0IGFuZCB0aGVyZWZvcmUgdGhh dCBpcyBtb3N0IHF1YWxpZmllZCB0byBkbyBzby4NCg0KICBJbmRlZWQgdGhlIG1pZ3JhdGlvbiB3 cml0aW5nIHByb2Nlc3MgaXMgdGltZSBjb25zdW1pbmcgYXQgdGhlIG1vbWVudA0KICBiZWNhdXNl IGl0IGlzIGRvbmUgYnkgcHB4bGliIG1haW50YWluZXJzIHdoZW4gdGhlIG5leHQgb2NhbWwgcmVs ZWFzaW5nDQogIGlzIGNsb3NpbmcgaW4gYW5kIHJlcXVpcmVzIHVzIHRvIGRpdmUgaW50byBjaGFu Z2VzIHdlIGFyZSBub3QNCiAgbmVjZXNzYXJpbHkgZmFtaWxpYXIgd2l0aC4NCg0KICBEdXJpbmcg dGhlIGNvbXBpbGVyIHJlbGVhc2UgcHJvY2VzcywgcHB4bGliIHdvdWxkIGluY29ycG9yYXRlIHRo b3NlDQogIG5ldyBtaWdyYXRpb24gdG8gdGhlIGVudGlyZSBzZXQgb2YgbWlncmF0aW9ucyBpdCBz dXBwb3J0cywgYWxsb3dpbmcgaXQNCiAgdG8gYmUgY29tcGF0aWJsZSB3aXRoIHRoZSAibmV3IiB0 cnVuayB1bnRpbCB0aGUgbmV4dCByZWxlYXNlLg0KDQogIFRoZSBjb3JlIG9mIHRoaXMgd29yayBp cyB0byBmb3JtYWxseSB3cml0ZSBkb3duIHRoaXMgcHJvY2VzcyBhbmQgc3RhcnQNCiAgdGhlIGRp c2N1c3Npb24gd2l0aCB0aGUgY29tcGlsZXIgdGVhbS4gT25jZSB3ZSBhZ3JlZSBvbiBhIHBsYW4s IEkNCiAgZG9uJ3QgZXhwZWN0IHRoZXJlIGlzIGEgbG90IG9mIGNvZGUgdG8gd3JpdGUgZm9yIHRo aXMgYXMgYWxsIG9mIGl0DQogIGFscmVhZHkgbGl2ZXMgaW5zaWRlIHBweGxpYi4NCg0KDQril4og UmVmaW5pbmcgdGhlIHJlbGVhc2UgcHJvY2VzcyBmb3IgcHB4bGliIHdpdGggYW4gQVNUIGJ1bXAN Cg0KICBQYXJ0IG9mIHRoZSBwcHhsaWIgY29udHJhY3QgaXMgdGhhdCBhbGwgcHB4LWVzIHdyaXR0 ZW4gd2l0aCBwcHhsaWINCiAgbXVzdCB1c2UgdGhlIHNhbWUgdmVyc2lvbiBvZiB0aGUgQVNUIGNo b3NlbiBieSBwcHhsaWIuIFRoaXMgYWxsb3dzIGZvcg0KICBiZXR0ZXIgcGVyZm9ybWFuY2VzIGFu ZCBzZW1hbnRpY3Mgb2YgcmV3cml0aW5nLiBUaGlzIHZlcnNpb24gaXMNCiAgdXN1YWxseSB0aGUg bGF0ZXN0IHN1cHBvcnRlZCB2ZXJzaW9uIGFzIGl0IGlzIHJlcXVpcmVkIGZvciBwcHgtZXMgdG8N CiAgc3VwcG9ydCBhbGwgdGhlIG5ldyBsYW5ndWFnZSBmZWF0dXJlcy4gSXQgc29tZXRpbWVzIGhh cHBlbiB0aGF0IHRoZQ0KICBpbnRlcm5hbCBBU1QgdmVyc2lvbiBsYWdzIGJlaGluZCBpZiBubyBu ZXcgZmVhdHVyZXMgd291bGQgYmUNCiAgInVubG9ja2VkIiBieSB1cGdyYWRpbmcgdGhlIEFTVCwg YXMgaXQgaGFzIGJlZW4gdGhlIGNhc2Ugc2luY2UgNC4xNC4NCg0KICBFdmVyeSBub3cgYW5kIHRo ZW4gcHB4bGliIGhhcyB0byBidW1wIGl0cyBpbnRlcm5hbCBBU1QgdGhvdWdoLA0KICBwb3RlbnRp YWxseSBicmVha2luZyBpdHMgQVBJIGFuZCB0aGVyZWZvcmUgYSBmZXcgb2YgaXRzIHJldmVyc2UN CiAgZGVwZW5kZW5jaWVzLg0KDQogIEluIHRoZSBwYXN0IGZldyB5ZWFycywgd2UgZGVjaWRlZCB0 byBidWlsZCB0aGUgZW50aXJlIHNldCBvZiByZXZlcnNlDQogIGRlcGVuZGVuY2llcyBldmVyeSB0 aW1lIHdlcmUgcmVsZWFzaW5nIHN1Y2ggYSBjaGFuZ2UgYW5kIHRvIHNlbmQgUFJzDQogIHRvIGZp eCByZXZkZXBzIHRvIGhlbHAga2VlcCB0aGUgcHB4IGVjb3N5c3RlbSBzYW5lIGFuZCBhdm9pZCBw dXR0aW5nDQogIHRvIG11Y2ggcHJlc3N1cmUgb24gaW5kaXZpZHVhbCBwcHgtZXMgbWFpbnRhaW5l cnMuDQoNCiAgV2Uga25vdyB0aGF0IHdlIHdpbGwgaGF2ZSB0byBkbyB0aGlzIGZvciB0aGUgNS4z IHJlbGVhc2UgYXMgaXQgd2lsbCBiZQ0KICBhZGRpbmcgZWZmZWN0cyBzeW50YXguDQoNCiAgVGhl IGN1cnJlbnQgd29ya2Zsb3cgcmVsaWVzIG9uIGJ1aWxkaW5nIGEgImR1bml2ZXJzZSIgaS5lLiBz b21lIHNvcnQNCiAgb2YgbGFyZ2UgZHVuZS1wcm9qZWN0IGNvbnRhaW5pbmcgcHB4bGliIGFuZCBh IGNsb25lIG9mIGFsbCBpdHMgcmV2ZXJzZQ0KICBkZXBlbmRlbmNpZXMuIFRoaXMgcHJvdmVzIHF1 aXRlIGEgY2hhbGxlbmdlIGFzIGl0IGlzIG9mdGVuIGhhcmQgdG8gZ2V0DQogIGV2ZXJ5dGhpbmcg dG8gYnVpbGQgdG9nZXRoZXIuICBBbiBpZGVhbCBzb2x1dGlvbiB3b3VsZCBiZSB0byByZWx5IG1v cmUNCiAgb24gYG9wYW0tY2knIGZvciB0aGlzIGJ1dCBpbiBpdHMgY3VycmVudCBzdGF0ZSBpdCBp cyBub3QgdmVyeQ0KICByZWxpYWJsZS4NCg0KICBJJ2QgbGlrZSB0byBzcGVuZCBzb21lIHRpbWUg b24gaW1wcm92aW5nIHRoZSBwcm9jZXNzIG9mIGJ1aWxkaW5nDQogIHJldmRlcHMgb2YgcHB4bGli IGFuZCBzdWJtaXR0aW5nIFBScyBhbmQgZXhwZXJpbWVudCB0byBwcmVwYXJlIGZvciB0aGUNCiAg bmV4dCBidW1wIHdoaWNoIHdpbGwgaW5jbHVkZSB0aGUgNS4yIGNoYW5nZXMgdG8gYFBleHBfZnVu Y3Rpb24nIHRoYXQNCiAgd2UgZXhwZWN0IHRvIHBvdGVudGlhbGx5IGJyZWFrIHF1aXRlIGEgbG90 IG9mIHJldmVyc2UgZGVwZW5kZW5jaWVzLg0KDQoNClRoZSBPQ2FtbCBjb21tdW5pdHkgaXMgc2ln bmVkIHVwIGZvciBPdXRyZWFjaHkhDQrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZANCg0KICBB cmNoaXZlOg0KICA8aHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90L3RoZS1vY2FtbC1jb21tdW5p dHktaXMtc2lnbmVkLXVwLWZvci1vdXRyZWFjaHkvMTM4OTIvMTg+DQoNCg0KTmF0aGFuIFJlYm91 cnMgYW5ub3VuY2VkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICBJJ20gYSBiaXQgbGF0ZSB0byB0aGUg cGFydHkgYnV0IHN0aWxsIHdhbnRlZCB0byBsZXQgeW91IGtub3cgYWJvdXQgdGhlDQogIHByb2pl Y3Qgd2Ugc3VibWl0dGVkIHdpdGggQHNob25mZWRlciBhbmQgQGRpbmFrYWpveS4NCg0KICBbb2Nh bWwtYXBpLXdhdGNoXSBpcyBhIGZyZXNoIHByb2plY3QgdGhhdCBhaW1zIGF0IHByb3ZpZGluZyBh IHN1aXRlIG9mDQogIHRvb2xzIHRvIGhlbHAgT0NhbWwgbGlicmFyeSBtYWludGFpbmVycyBhbmQg dXNlcnMgZGVhbCB3aXRoIGNoYW5nZXMgaW4NCiAgdGhlIHB1YmxpYyBBUEkgb2YgdGhlaXIgbGli cmFyaWVzIG9yIHRoZSBvbmVzIHRoZXkgdXNlLiBUaGlzIGluY2x1ZGVzDQogIGxpYnJhcmllcyBh bmQgQ0xJIHRvb2xzIHRvIGRldGVjdCBwb3RlbnRpYWxseSB1bndhbnRlZCBicmVha2luZw0KICBj aGFuZ2VzIGJlZm9yZSByZWxlYXNpbmcgYSBuZXcgdmVyc2lvbiBvciB0byBkZXRlcm1pbmUgdGhl IHZlcnNpb24gb2YNCiAgYSBsaWJyYXJ5IHRoYXQgaW50cm9kdWNlZCBhIG5ldyBmdW5jdGlvbi4N Cg0KICBUaGUgZ29hbCBvZiB0aGUgaW50ZXJuc2hpcCBpcyB0byBkZXZlbG9wIGEgbGlicmFyeSBh bmQgdG9vbCBwYWlyIHRoYXQNCiAgZGV0ZWN0cyBjaGFuZ2VzIGluIHRoZSBwdWJsaWMgQVBJIG9m IGEgbGlicmFyeSwgYnVpbGQgYW4gaW50ZXJuYWwNCiAgcmVwcmVzZW50YXRpb24gb2YgdGhlbSBh bmQgZGlzcGxheXMgdGhlbSBpbiBhIGh1bWFuIHJlYWRhYmxlLCBnaXQNCiAgZGlmZi1saWtlIGZv cm1hdC4NCg0KICBUaGUgYXBwbGljYXRpb24gcGVyaW9kIHdlbnQgcmVhbGx5IHdlbGwgYW5kIHdl IGhhdmUgc2V2ZXJhbCBzdHJvbmcNCiAgY2FuZGlkYXRlcy4gV2UndmUgYmVlbiBleHRyZW1lbHkg aGFwcHkgdG8gd29yayB3aXRoIGFsbCBvZiB0aGVtIGFuZA0KICBhcmUgbG9va2luZyBmb3J3YXJk IHRvIHRoZSBpbnRlcm5zaGlwLg0KDQoNCltvY2FtbC1hcGktd2F0Y2hdIDxodHRwczovL2dpdGh1 Yi5jb20vTmF0aGFuUmViL29jYW1sLWFwaS13YXRjaD4NCg0KDQpvcGFtIDIuMi4wfmJldGEyDQri lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZANCg0KICBBcmNo aXZlOiA8aHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90L2Fubi1vcGFtLTItMi0wLWJldGEyLzE0 NDYxLzE+DQoNCg0KS2F0ZSBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgA0KDQogIFdlJ3JlIHZlcnkgZXhjaXRlZCB0byBhbm5vdW5jZSB0aGlzIHNl Y29uZCBiZXRhIGZvciBvcGFtIDIuMi4wLg0KDQoNCldoYXTigJlzIG5ldyBpbiB0aGlzIGJldGE/ DQrilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzi lYzilYzilYzilYzilYzilYwNCg0KICDigKIgKldpbmRvd3Mgc3VwcG9ydCo6IHRoaXMgYmV0YSBp bnRyb2R1Y2VzIGEgYnVuY2ggb2YgY2hhbmdlcyBuZWNlc3NhcnkNCiAgICAgdG8gYmUgYWJsZSB0 byBtYWtlIHRoZSBkZWZhdWx0IG9wYW0tcmVwb3NpdG9yeSBzdXBwb3J0IFdpbmRvd3Mgb3V0DQog ICAgIG9mIHRoZSBib3guIFdlIHdpbGwgd3JpdGUgYSBkZWRpY2F0ZWQgYmxvZyBwb3N0IHZlcnkg c29vbiBvbiB0aGlzLA0KICAgICBvbmNlIHdlIGhhdmUgZmluYWxpc2VkIHRoZSBQUi9icmFuY2gg dGhhdCB5b3UgY2FuIHRlc3QuDQogIOKAoiAqb3BhbS1yZXBvc2l0b3J5IHNjYWxhYmlsaXR5Kjog VGhlIGN1cnJlbnQgZHJhZnQgcmVzb2x1dGlvbg0KICAgICByZXN1bHRpbmcgZnJvbSB0aGUgZGlz Y3Vzc2lvbiBpbiBbb2NhbWwvb3BhbS1yZXBvc2l0b3J5IzIzNzg5XQ0KICAgICBpbmNsdWRlcyB0 aGUgcmVtb3ZhbCBvZiBwYWNrYWdlcyBmcm9tIG9wYW0tcmVwb3NpdG9yeS4gQ3VycmVudGx5DQog ICAgIG9wYW0gY2FuIG1pc2JlaGF2ZSAoaW4gcGFydGljdWxhciBvbiBtYWNPUykgd2hlbiBleHBv c2VkIHRvIGZpbGUNCiAgICAgZGVsZXRpb25zIGluIHJlcG9zaXRvcmllcyBkdWUgdG8gdGhlIHVz ZSBvZiB0aGUgc3lzdGVtIGBwYXRjaGANCiAgICAgY29tbWFuZC4gVG8gZml4IHRoaXMsIGFzIGEg c3RvcCBnYXAsIGFmdGVyIG1hbnkgdHJpYWxzIGFuZCBlcnJvcnMsDQogICAgIG9wYW0gbm93IHdh cm5zIHdoZW4gR05VIHBhdGNoIGlzIG5vdCBkZXRlY3RlZCBvbiB5b3VyIHN5c3RlbS4gVGhlc2UN CiAgICAgY2hhbmdlcyB3aWxsIG1ha2UgdGhlaXIgd2F5IHRvIHRoZSB1cGNvbWluZyBvcGFtIDIu MS42LCBpbiBhIGZldw0KICAgICB3ZWVrcy4NCiAg4oCiIE1hbnkgKnJlZ3Jlc3Npb24gZml4ZXMq LCAqcGVyZm9ybWFuY2UqIGFuZCBnZW5lcmFsICppbXByb3ZlbWVudHMqDQoNCiAgOm9wZW5fYm9v azogWW91IGNhbiByZWFkIG91ciBbYmxvZyBwb3N0XSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91 dA0KICB0aGVzZSBjaGFuZ2VzIGFuZCBtb3JlLCBhbmQgZm9yIGV2ZW4gbW9yZSBkZXRhaWxzIHlv dSBjYW4gdGFrZSBhIGxvb2sNCiAgYXQgdGhlIFtyZWxlYXNlIG5vdGVdIG9yIHRoZSBbY2hhbmdl bG9nXS4NCg0KDQpbb2NhbWwvb3BhbS1yZXBvc2l0b3J5IzIzNzg5XQ0KPGh0dHBzOi8vZ2l0aHVi LmNvbS9vY2FtbC9vcGFtLXJlcG9zaXRvcnkvaXNzdWVzLzIzNzg5Pg0KDQpbYmxvZyBwb3N0XSA8 aHR0cHM6Ly9vcGFtLm9jYW1sLm9yZy9ibG9nL29wYW0tMi0yLTAtYmV0YTIvPg0KDQpbcmVsZWFz ZSBub3RlXSA8aHR0cHM6Ly9naXRodWIuY29tL29jYW1sL29wYW0vcmVsZWFzZXMvdGFnLzIuMi4w LWJldGEyPg0KDQpbY2hhbmdlbG9nXSA8aHR0cHM6Ly9naXRodWIuY29tL29jYW1sL29wYW0vYmxv Yi8yLjIuMC1iZXRhMi9DSEFOR0VTPg0KDQoNCkhvdyB0byB1cGdyYWRlDQrilYzilYzilYzilYzi lYzilYzilYzilYzilYzilYzilYzilYzilYzilYwNCg0KICDigKIgRm9yIFdpbmRvd3Mgd2Ugd2ls bCB3cml0ZSBhIGRlZGljYXRlZCBibG9nIHBvc3QgdG8gc2hvdyBob3cgdG8NCiAgICBpbnN0YWxs IGFuZCB1c2Ugb3BhbSBvbiBXaW5kb3dzIHZlcnkgc29vbi4gU3RheSB0dW5lZCENCiAg4oCiIE9u IFVuaXgtbGlrZSBzeXN0ZW1zLCB0byB1cGdyYWRlLCBzaW1wbHkgcnVuOg0KICAgIOKUjOKUgOKU gOKUgOKUgA0KICAgIOKUgiBiYXNoIC1jICJzaCA8KGN1cmwgLWZzU0wgaHR0cHM6Ly9yYXcuZ2l0 aHVidXNlcmNvbnRlbnQuY29tL29jYW1sL29wYW0vbWFzdGVyL3NoZWxsL2luc3RhbGwuc2gpIC0t dmVyc2lvbiAyLjIuMH5iZXRhMiINCiAgICDilJTilIDilIDilIDilIANCg0KICBXZSdyZSBvbiB0 aGUgaG9tZSBzdHJldGNoIGZvciB0aGUgZmluYWwgcmVsZWFzZSBvZiBvcGFtIDIuMi4wLCBzbyBm ZWVsDQogIGZyZWUgdG8gcmVwb3J0IGFueSBpc3N1ZSB5b3UgZW5jb3VudGVyIG9uIG91ciBbYnVn LXRyYWNrZXJdLg0KDQogIEhhcHB5IGhhY2tpbmcsICo8PiA8PiBUaGUgb3BhbSB0ZWFtIDw+IDw+ KiA6Y2FtZWw6DQoNCg0KW2J1Zy10cmFja2VyXSA8aHR0cHM6Ly9naXRodWIuY29tL29jYW1sL29w YW0vaXNzdWVzPg0KDQoNCkdvc3BlbCAwLjMuMA0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZTogPGh0dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9hbm4t Z29zcGVsLTAtMy0wLzE0NDgwLzE+DQoNCg0KTmljb2xhcyBPc2Jvcm5lIGFubm91bmNlZA0K4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSADQoNCiAgSGkhIFdlIGFyZSB2ZXJ5IGhhcHB5IHRvIGFubm91bmNlIHRo ZSByZWxlYXNlIG9mIGBnb3NwZWwuMC4zLjAnDQoNCiAgR29zcGVsIGlzIGEgdG9vbC1hZ25vc3Rp YyBiZWhhdmlvdXJhbCBzcGVjaWZpY2F0aW9uIGxhbmd1YWdlIGZvcg0KICBPQ2FtbC4gSXQgYWxs b3dzIHlvdSB0byB3cml0ZSBzdHJvbmdseSB0eXBlZCBjb250cmFjdC1iYXNlZA0KICBzcGVjaWZp Y2F0aW9ucyBmb3IgeW91ciBPQ2FtbCBsaWJyYXJpZXMgKGZvciBhIHJlYXNvbmFibGUgc3Vic2V0 IG9mDQogIE9DYW1sKS4gR29zcGVs4oCZcyBzeW50YXggaGFzIGJlZW4gZGVzaWduZWQgdG8gYmUg ZWFzeSB0byBsZWFybiBmb3IgYW4NCiAgT0NhbWwgcHJvZ3JhbW1lci4gWW91IGNhbiBhY2Nlc3Mg dGhlIGRvY3VtZW50YXRpb24gW2hlcmVdDQoNCiAgQXBhcnQgZnJvbSBzb21lIGJ1ZyBmaXhlcywg dGhpcyByZWxlYXNlIGJyaW5ncyB0d28gbWFpbiBpbXByb3ZlbWVudHM6DQoNCiAg4oCiIE1ha2Ug dGhlIHR5cGUtY2hlY2tlciBzYXZlIHR5cGUgaW5mb3JtYXRpb24gaW4gYSBgLmdvc3BlbCcgZmls ZQ0KICDigKIgTWFrZSB0aGUgYHdpdGgnIGtleXdvcmQgbmVjZXNzYXJ5IHdoZW4gZGVjbGFyaW5n IHR5cGUgaW52YXJpYW50cw0KDQogIEJld2FyZSB0aGF0IGBvcnRhYy4wLjEuMCcgaXMgbm90IGNv bXBhdGlibGUgd2l0aCB0aGlzIHZlcnNpb24sIHBsZWFzZQ0KICB1c2UgT3J0YWMgZGV2ZWxvcG1l bnQgdmVyc2lvbiBmcm9tIHRoZSBnaXQgcmVwb3NpdG9yeSB1bnRpbCB0aGUgbmV4dA0KICBPcnRh YyByZWxlYXNlLg0KDQoNCltoZXJlXSA8aHR0cHM6Ly9vY2FtbC1nb3NwZWwuZ2l0aHViLmlvL2dv c3BlbC8+DQoNCg0KRnJlZCAwLjEuMCAtIEZlZGVyYWwgUmVzZXJ2ZSBFY29ub21pYyBEYXRhIEFQ SQ0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZToNCiAgPGh0dHBzOi8vZGlz Y3Vzcy5vY2FtbC5vcmcvdC9hbm4tZnJlZC0wLTEtMC1mZWRlcmFsLXJlc2VydmUtZWNvbm9taWMt ZGF0YS1hcGkvMTQ0ODkvMT4NCg0KDQpHZW9mZnJleSBCb3JvdWdoIGFubm91bmNlZA0K4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSADQoNCiAgSGkgZm9sa3MgaG93ZHkhIEkganVzdCByZWxlYXNlIHRoZSBm aXJzdCB2ZXJzaW9uIG9mIEZyZWQsIGEgbGlicmFyeQ0KICBmb3IgdGhlIEZlZGVyYWwgUmVzZXJ2 ZSBFY29ub21pYyBEYXRhIEFQSSBiaW5kaW5nLiBJIG1hZGUgdGhpcyB0bw0KICBmYWNpbGl0YXRl IG9uZSBvZiBteSBwZXJzb25hbCBwcm9qZWN0IGJ1dCBJIGhvcGUgb3RoZXJzIHdvdWxkIGZpbmQN CiAgdGhpcyBsaWJyYXJ5IHVzZWZ1bCBpbiBzb21lIHdheS4NCg0KICBTb3VyY2UgY29kZTogPGh0 dHBzOi8vZ2l0aHViLmNvbS9nYm9yb3VnaC9mcmVkPg0KDQogIERvY3VtZW50YXRpb246IDxodHRw czovL2dib3JvdWdoLmdpdGh1Yi5pby9mcmVkL2ZyZWQvZnJlZC9pbmRleC5odG1sPg0KDQogIE9w YW0gcmVwbyBwdWJsaXNoIG9uIHRoZSB3YXkNCg0KDQpPQ0FOTkwgMC4zLjE6IGEgZnJvbS1zY3Jh dGNoIGRlZXAgbGVhcm5pbmcgKGkuZS4gZGVuc2UgdGVuc29yIG9wdGltaXphdGlvbikgZnJhbWV3 b3JrDQrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOg0KICA8aHR0cHM6 Ly9kaXNjdXNzLm9jYW1sLm9yZy90L2Fubi1vY2FubmwtMC0zLTEtYS1mcm9tLXNjcmF0Y2gtZGVl cC1sZWFybmluZy1pLWUtZGVuc2UtdGVuc29yLW9wdGltaXphdGlvbi1mcmFtZXdvcmsvMTQ0OTIv MT4NCg0KDQpMdWthc3ogU3RhZmluaWFrIGFubm91bmNlZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA DQoNCiAgSGkhIEknbSBoYXBweSB0byBhbm5vdW5jZSByZWxlYXNlIDAuMy4xIG9mIE9DQU5OTCwg YSB0ZW5zb3INCiAgb3B0aW1pemF0aW9uIGZyYW1ld29yayB3aXRoOg0KDQogIOKAoiBjb25jaXNl IG5vdGF0aW9uIHZpYSBQUFhzLA0KICDigKIgcG93ZXJmdWwgc2hhcGUgaW5mZXJlbmNlLA0KICDi gKIgYmFja3Byb3BhZ2F0aW9uIChmaXJzdC1vcmRlciBhdXRvbWF0aWMgZGlmZmVyZW50aWF0aW9u KSwNCiAg4oCiIGxvdy1sZXZlbCBiYWNrZW5kcyDigJMgY3VycmVudGx5IG9ubHkgb25lLCBDUFUg dmlhIGBnY2NqaXRgLCBidXQgQ3VkYQ0KICAgIGlzIG9uIHRoZSBob3Jpem9uLg0KDQogIE9DQU5O TCBpcyBzcG9uc29yZWQgYnkgW0FocmVmc10uIChbQWhyZWZzIHdlYnNpdGVdLikNCg0KICBbYWhy ZWZzL29jYW5ubDogT0NBTk5MOiBPQ2FtbCBDb21waWxlcyBBbGdvcml0aG1zIGZvciBOZXVyYWwg TmV0d29ya3MNCiAgTGVhcm5pbmcgKGdpdGh1Yi5jb20pXQ0KDQogIEkgYW0gbm90IHN1Ym1pdHRp bmcgaXQgdG8gT3BhbSB5ZXQgYXMgT0NBTk5MIGlzIGluc3VmZmljaWVudGx5DQogIGRvY3VtZW50 ZWQgYXQgdGhlIG1vbWVudC4gSSB3ZWxjb21lIHlvdXIgZmVlZGJhY2sgaWYgeW91IGRlY2lkZSB0 bw0KICB0YWtlIGEgbG9vayENCg0KDQpbQWhyZWZzXSA8aHR0cHM6Ly9vY2FtbC5vcmcvc3VjY2Vz cy1zdG9yaWVzL3BldGEtYnl0ZS1zY2FsZS13ZWItY3Jhd2xlcj4NCg0KW0FocmVmcyB3ZWJzaXRl XSA8aHR0cHM6Ly9haHJlZnMuY29tLz4NCg0KW2FocmVmcy9vY2Fubmw6IE9DQU5OTDogT0NhbWwg Q29tcGlsZXMgQWxnb3JpdGhtcyBmb3IgTmV1cmFsIE5ldHdvcmtzDQpMZWFybmluZyAoZ2l0aHVi LmNvbSldIDxodHRwczovL2dpdGh1Yi5jb20vYWhyZWZzL29jYW5ubD4NCg0KDQpPdGhlciBPQ2Ft bCBOZXdzDQrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAN Cg0KRnJvbSB0aGUgb2NhbWwub3JnIGJsb2cNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIEhlcmUgYXJlIGxp bmtzIGZyb20gbWFueSBPQ2FtbCBibG9ncyBhZ2dyZWdhdGVkIGF0IFt0aGUgb2NhbWwub3JnDQog IGJsb2ddLg0KDQogIOKAoiBbTXVsdGljb3JlIFRlc3RpbmcgVG9vbHM6IERTQ2hlY2sgUHQgMl0N Cg0KDQpbdGhlIG9jYW1sLm9yZyBibG9nXSA8aHR0cHM6Ly9vY2FtbC5vcmcvYmxvZy8+DQoNCltN dWx0aWNvcmUgVGVzdGluZyBUb29sczogRFNDaGVjayBQdCAyXQ0KPGh0dHBzOi8vdGFyaWRlcy5j b20vYmxvZy8yMDI0LTA0LTEwLW11bHRpY29yZS10ZXN0aW5nLXRvb2xzLWRzY2hlY2stcHQtMj4N Cg0KDQpPbGQgQ1dODQrilZDilZDilZDilZDilZDilZDilZANCg0KICBJZiB5b3UgaGFwcGVuIHRv IG1pc3MgYSBDV04sIHlvdSBjYW4gW3NlbmQgbWUgYSBtZXNzYWdlXSBhbmQgSSdsbCBtYWlsDQog IGl0IHRvIHlvdSwgb3IgZ28gdGFrZSBhIGxvb2sgYXQgW3RoZSBhcmNoaXZlXSBvciB0aGUgW1JT UyBmZWVkIG9mIHRoZQ0KICBhcmNoaXZlc10uDQoNCiAgSWYgeW91IGFsc28gd2lzaCB0byByZWNl aXZlIGl0IGV2ZXJ5IHdlZWsgYnkgbWFpbCwgeW91IG1heSBzdWJzY3JpYmUNCiAgdG8gdGhlIFtj YW1sLWxpc3RdLg0KDQogIFtBbGFuIFNjaG1pdHRdDQoNCg0KW3NlbmQgbWUgYSBtZXNzYWdlXSA8 bWFpbHRvOmFsYW4uc2NobWl0dEBwb2x5dGVjaG5pcXVlLm9yZz4NCg0KW3RoZSBhcmNoaXZlXSA8 aHR0cHM6Ly9hbGFuLnBldGl0ZXBvbW1lLm5ldC9jd24vPg0KDQpbUlNTIGZlZWQgb2YgdGhlIGFy Y2hpdmVzXSA8aHR0cHM6Ly9hbGFuLnBldGl0ZXBvbW1lLm5ldC9jd24vY3duLnJzcz4NCg0KW2Nh bWwtbGlzdF0gPGh0dHBzOi8vc3ltcGEuaW5yaWEuZnIvc3ltcGEvaW5mby9jYW1sLWxpc3Q+DQoN CltBbGFuIFNjaG1pdHRdIDxodHRwczovL2FsYW4ucGV0aXRlcG9tbWUubmV0Lz4NCg0K --=-=-= 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 April 09 to 16, 2024.

Melange 2024 Progress Update

Antonio Nuno Monteiro announced

we recently shared what we've been up to around Melange & ecosystem in = a blog post which you can find here:

https://melange.re/blog/posts/whats-2024-brought-to-melange-so-far

I hope you find the above informative. Looking forward to your thoughts.

Ppxlib maintenance summary

Nathan Rebours announced

I recently started working on ppxlib again thanks to the OCaml Software Fou= ndation and wanted to report back to the community all the work their funding made possible so far along with the plan for the next st= eps.

Know that OCSF is only funding me part time on this and that I'm open to mo= re OCaml freelance work!

Summary of the work

  • Improved error reporting

    Ppxlib has an -embed-error flag that is most useful to merlin = as it allows it to always get an AST out of the driver and allows it to keep operating normally when a ppx raises a located exception (as in rai= sed with Location.raise_errorf) as it would always get an AST out of the driver run.

    The problem with this mode was that it didn't try to recover from such exce= ptions and would stop applying transformations. The error was properly reported by merlin and it still had a valid AST to work with b= ut none of the potential errors from subsequent rewriting or code gen would be reported. This lead to a tedious workflow where the user would fix one error, save th= e file, see a new error reported by merlin, fix it, save, and so on.

    There was a series of PRs by @Burnleydev1 long pending review that were fix= ing this by collecting all such exceptions while keeping on the rewriting phases using the last valid AST or node.

    I reviewed and fixed those PRs (#447, #453 and #457) and worked on= a couple fixes and improvements to error reporting related to this work.

  • Driver mode for dune

    Dune has ongoing internal work to be able to use ppx in development. Since = it cannot depend on ppxlib or any ppx at build time, their solution relies on using ppxlib and ppx normally in development but using a= lready preprocessed copies of source files that require rewriting for bootstrapping, making their opam build ppx-free.

    They require a special driver mode that writes to the output file only if a= ny actual rewriting happened.

    I worked on a first prototype of this using a pre-existing hook called for = each generated AST node.

  • 5.2 compat on trunk-support

    The main task since I started working on ppxlib was the 5.2 support. As OCa= ml 5.2 is coming out soon and ppxlib is a central piece in the OCaml ecosystem, it's important that ppxlib has a compatible version av= ailable for testing out the new compiler. Without it, a lot of opam packages can't be built with the alpha and beta releases of the= compiler because of their ppx dependencies.

    ppxlib has a trunk-support branch that is meant to be kept up = to date for such occasions. While it already contained the AST migration from/to the 5.2 version, it was out of sync with the main branch = of ppxlib.

    I rebased the 5.2 relevant parts of the branch on top of our main branch to= be able to cut a first preview version with 5.2 compat and fixed a couple of bugs and quirks in the code base that prevented the t= est suite from running properly with the 5.2 support.

    After the first release of the preview version we discovered a series of bu= gs with the help of @kit-ty-kate, @octachron and @anmonteiro. The most important among those being:

    • A bug in the round trip migration of the new Pexp_function= node from 5.2 that was causing compilation errors when the function's

    return type was coerced.

    • The new syntax for ocaml.ppx.context was causing driver cr= ashes when reading some binary ASTs. I wrote a migration for those

    attributes that fixed the issue.

    • The driver was silently relying on the compiler to re-open files to dis= play source quotation when reporting located exceptions.

    Since this was removed from the compiler in 5.2, I fixed the driver to prop= erly set Location.input_lexbuf and re-enable source-quotation.

  • ppx_deriving maintenance

    ppx_deriving is quite a central piece of the ppx ecosystem, es= pecially for the set of standard derivers it provides (pretty-printers, equality and comparison functions, etc.).

    The project was lacking maintainers with enough time to review an important= PR migrating those standard derivers to ppxlib. This is important because it makes those quite broadly used derivers better integra= ted with ppxlib features and improves both performances and error reporting for their users as they are now applied as part of the = main ppxlib driver AST traversal.

    I reviewed the PR and cleaned up the repo a bit to attempt a release, somet= hing that has not happened for 3 years for this package.

    The initial release failed for two reasons:

    • ppx_deriving.show's deriver accepts an argument that speci= fies how the implementation should behave without impacting the

    function signature. In the ppxlib port we did not register this argument fo= r the signature deriver since it had no impact on the generated code there. It turns out at least one opam package used the argum= ent in an .mli file so we added it for compatibility as ppx_deriving duplicated the set of arguments for implementatio= n and interfaces

    • ppx_deriving used to automatically register extensions for= each derivers that can be used to inline the derived function for a

    given type in an expression. We preserved this in the ppxlib port but it ca= used a conflict with ppx_let. This conflict should be resolved on ppx_let's side as they were declaring an extension= named map without any possible prefix such as ppx_let.m= ap which is the recommended way. Using a prefix allows the user to disambiguate if s= everal ppx declare an extension with the same base name.

    We had to cancel the release to fix those issues before attempting again.

  • General maintenance

    There was also some regular maintenance such as improving our homemade expe= ct test runner to be able to better run our tests across all supported compiler versions, reviewing all pending PRs, upgrading ocaml= format and cutting a release of ppxlib with the latest features.

Next steps

Along with the general maintenance of the project there are two things that= would greatly reduce the maintenance burden on ppxlib and would improve the state of the ecosystem for the community that we would li= ke to work on.

  • Upstreaming Astlib to the compiler

    This has been in the works for quite a long time but the previous maintaine= rs haven't had the chance to see it through.

    The plan is to upstream a small part of ppxlib into the compiler to ease th= e release process for new compilers.

    This small library should contain the minimal subset of stable API ppxlib n= eeds to properly function and, most importantly, the AST migrations from the current version of the compiler to the previous version= and back. The idea is that trunk would then provide the migration to the latest released version at all time and ppxlib would be ab= le to use those if it does not natively supports them yet. That would make testing the compiler on opam work without requiring a speci= al release of ppxlib and would also ease the migration writing process as they would be written at the time of the AST change by t= he person who modified it and therefore that is most qualified to do so.

    Indeed the migration writing process is time consuming at the moment becaus= e it is done by ppxlib maintainers when the next ocaml releasing is closing in and requires us to dive into changes we are not nec= essarily familiar with.

    During the compiler release process, ppxlib would incorporate those new mig= ration to the entire set of migrations it supports, allowing it to be compatible with the "new" trunk until the next release.

    The core of this work is to formally write down this process and start the = discussion with the compiler team. Once we agree on a plan, I don't expect there is a lot of code to write for this as all of it = already lives inside ppxlib.

  • Refining the release process for ppxlib with a= n AST bump

    Part of the ppxlib contract is that all ppx-es written with ppxlib must use= the same version of the AST chosen by ppxlib. This allows for better performances and semantics of rewriting. This version is usually= the latest supported version as it is required for ppx-es to support all the new language features. It sometimes happen that the inte= rnal AST version lags behind if no new features would be "unlocked" by upgrading the AST, as it has been the case since 4.1= 4.

    Every now and then ppxlib has to bump its internal AST though, potentially = breaking its API and therefore a few of its reverse dependencies.

    In the past few years, we decided to build the entire set of reverse depend= encies every time were releasing such a change and to send PRs to fix revdeps to help keep the ppx ecosystem sane and avoid putting to= much pressure on individual ppx-es maintainers.

    We know that we will have to do this for the 5.3 release as it will be addi= ng effects syntax.

    The current workflow relies on building a "duniverse" i.e. some sort of lar= ge dune-project containing ppxlib and a clone of all its reverse dependencies. This proves quite a challenge as it is often hard to = get everything to build together. An ideal solution would be to rely more on opam-ci for this bu= t in its current state it is not very reliable.

    I'd like to spend some time on improving the process of building revdeps of= ppxlib and submitting PRs and experiment to prepare for the next bump which will include the 5.2 changes to Pexp_function that we expect to potentially break quite a lot of reverse dependencies.

opam 2.2.0~beta2

Kate announced

We're very excited to announce this second beta for opam 2.2.0.

What=E2=80=99s new in this beta?

  • Windows support: this beta introduces a bunch of changes necessa= ry to be able to make the default opam-repository support Windows out of th= e box. We will write a dedicated blog post very soon on this, once we have = finalised the PR/branch that you can test.
  • opam-repository scalability: The current draft resolution result= ing from the discussion in ocaml/opam-repository#23789 includes the removal of p= ackages from opam-repository. Currently opam can misbehave (in particular o= n macOS) when exposed to file deletions in repositories due to the use of t= he system `patch` command. To fix this, as a stop gap, after many trials an= d errors, opam now warns when GNU patch is not detected on your system. The= se changes will make their way to the upcoming opam 2.1.6, in a few weeks.<= /li>
  • Many regression fixes, performance and general improve= ments

:open_book: You can read our blog post for more information about these changes and more, and for even more details you can take a look at the release note or the chan= gelog.

How to upgrade

  • For Windows we will write a dedicated blog post to show how to install = and use opam on Windows very soon. Stay tuned!
  • On Unix-like systems, to upgrade, simply run:

    bash -c "sh <(curl -fsSL https://raw.githubusercontent.com/ocaml/opam/ma=
    ster/shell/install.sh) --version 2.2.0~beta2"
    

We're on the home stretch for the final release of opam 2.2.0, so feel free= to report any issue you encounter on our bug-tracker.

Happy hacking, <> <> The opam team <> <> :camel:

Gospel 0.3.0

Nicolas Osborne announced

Hi! We are very happy to announce the release of gospel.0.3.0

Gospel is a tool-agnostic behavioural specification language for OCaml. It = allows you to write strongly typed contract-based specifications for your OCaml libraries (for a reasonable subset of OCaml).= Gospel=E2=80=99s syntax has been designed to be easy to learn for an OCaml programmer. You can access the documentation here

Apart from some bug fixes, this release brings two main improvements:

  • Make the type-checker save type information in a .gospel f= ile
  • Make the with keyword necessary when declaring type invari= ants

Beware that ortac.0.1.0 is not compatible with this version, p= lease use Ortac development version from the git repository until the next Ortac release.

Fred 0.1.0 - Federal Reserve Economic Data API

Geoffrey Borough announced

Hi folks howdy! I just release the first version of Fred, a library for the= Federal Reserve Economic Data API binding. I made this to facilitate one of my personal project but I hope others would find this lib= rary useful in some way.

Source code: https://github.co= m/gborough/fred

Documentation: https://gborough.github.io/fred/fred/fred/index.html

Opam repo publish on the way

OCANNL 0.3.1: a from-scratch deep learning (i.e. dense tensor = optimization) framework

Lukasz Stafiniak announced

Hi! I'm happy to announce release 0.3.1 of OCANNL, a tensor optimization fr= amework with:

  • concise notation via PPXs,
  • powerful shape inference,
  • backpropagation (first-order automatic differentiation),
  • low-level backends – currently only one, CPU via `gccjit`, but C= uda is on the horizon.

OCANNL is sponsored by Ahrefs. (Ahrefs website.)

ahrefs/ocannl: OCANNL: OCaml C= ompiles Algorithms for Neural Networks Learning (github.com)

I am not submitting it to Opam yet as OCANNL is insufficiently documented a= t the moment. I welcome your feedback if you decide to take a look!

Other OCaml News

From the ocaml.org blog

Here are links from many OCaml blogs aggregated at the ocaml.org blog.

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.

--=-=-=--