From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by c5ff346549e7 (Postfix) with ESMTPS id 5EB655D5 for ; Tue, 9 Nov 2021 10:08:54 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.87,219,1631570400"; d="scan'208,217";a="2772152" Received: from prod-listesu18.inria.fr (HELO sympa.inria.fr) ([128.93.162.160]) by mail2-relais-roc.national.inria.fr with ESMTP; 09 Nov 2021 11:08:53 +0100 Received: by sympa.inria.fr (Postfix, from userid 20132) id D5033E7914; Tue, 9 Nov 2021 11:08:52 +0100 (CET) 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 32661E03AE for ; Tue, 9 Nov 2021 11:08:44 +0100 (CET) Authentication-Results: mail2-smtp-roc.national.inria.fr; spf=Pass smtp.pra=alan.schmitt@polytechnique.org; spf=Pass smtp.mailfrom=SRS0=edY8=P4=polytechnique.org=alan.schmitt@bounces.m4x.org; spf=Pass smtp.helo=postmaster@mx1.polytechnique.org IronPort-PHdr: =?us-ascii?q?A9a23=3ALxTrTRVaBF943l8UL0ZXn+u6jLTV8KxyUDF92vM?= =?us-ascii?q?cY1JmTK2v8tzYMVDF4r011RmVB9ydsq4P07Ce8/i5HzBaudDZ6DFKWacPfidNs?= =?us-ascii?q?d8RkQ0kDZzNImzAB9muURYHGt9fXkRu5XCxPBsdMs//Y1rPvi/6tmZKSV3wOgV?= =?us-ascii?q?vO+v6BJPZgdip2OCu4Z3TZBhDiCagbb9oIxi6sxjdutMLjYZtJao91gXFqWZMd?= =?us-ascii?q?+hK2G9kP12ekwjg6suq4JJv7yFcsO89+sBdVqn3Y742RqFCAjQ8NGA16szrtR3?= =?us-ascii?q?dQgaK+3ARTGYYnAdWDgbc9B31UYv/vSX8tupmxSmVJtb2QqwuWTSj9KhkVhnlg?= =?us-ascii?q?zoaOjEj8WHXjstwjL9HoB+kuhdyzZLYbJ2TOfFjfq/TftUaRXRAXsZKVixOGYe?= =?us-ascii?q?8YJUSBOsPOuZYtZTyp0ATphe6CwSgGObjxzlVjXH0wKI6yfwsHwHY0gI9EdwAs?= =?us-ascii?q?3vbo8nuOagITey41rPFwSnfY/5U3zr29YjGcgomofGJRb99bc7RxlMpFwjYk1u?= =?us-ascii?q?ftYzlPzaU1uQRr2iQ8u1tWviri2E9rQF9uCOvydssionMh4IV1kzE+D5hwIYyI?= =?us-ascii?q?d25SFJ7bsC4H5tQsSGaNpJ2Qt48TG1yvyY60LIGtIe9cSMXx5sp2wTRZOabc4i?= =?us-ascii?q?U/B3jTuCRLC93inxler+zmgu+/VWhx+DhVcS50FZEoypbn9XQqHwD2QLe59aFR?= =?us-ascii?q?/dj4Eqs1zaB2Q/d5O9EIk04iLTXJZ49z7MtkJcYrErNHijzmErsja+WcF0p+vC?= =?us-ascii?q?25OT7Y7XmuoGTN5dzigH7N6QhhNazAeImPQgSR2Sb/viz26fm/U39WrlKiec2k?= =?us-ascii?q?qbBvJDCP8Qbp6i5AxNL3YY58Rq/EzCm3MwXnXkGMFJFeA+HgJPzN17SJ/D4CO+?= =?us-ascii?q?zg1a2nzdt2f/GJaHhAo/TIXfdjLftZ6py60lZyAYr1tBf5p1UCrcbL/L3QU/+r?= =?us-ascii?q?trYAQIlMwy02eboFs9y2Z4FWW6VHqCZN6bSvUeN5u0xPeaMeJIVuC7nJ/c54P7?= =?us-ascii?q?uiGc1mV4Hfamo2ZsXbGq0HvN8I0WWeXbshc8BHnkMvgolUOzqkkONXiBPZ3a3R?= =?us-ascii?q?a08/is3CIW8DYfMXoysgaGB3CO6Hp1Oem9GCkqDEWvye4qYXPcMbTqeIsF7kjM?= =?us-ascii?q?eULiuUYAh1RCytAPgzLpnNOXU9jUctZLiz9d6+ffTmgso+TNoD8SSyX2NQ3lxn?= =?us-ascii?q?mwSWz82xqF/oENnxlef1qh0m+RYFcdX5/9TTAg6KIbQwPJ8C9DpQA7BcM2JRE6?= =?us-ascii?q?7Qtm/GTE+VMgxw94VY0pnFdWilAjP3yuwA78UmbyHHpI08rjE03j3IMZ9zmzJ2?= =?us-ascii?q?7Qgj1Y6W8dPMXepibVk9wTJG4HJlECZm763daQa3S7N6nmMzXCVvEFZTA5/T7z?= =?us-ascii?q?JXWgFaUvMrNT5/VrOT6S0Brs7NgtO086DJrFEat3zlVlJWPHjOM7FY26rlWewH?= =?us-ascii?q?w6ExrSQY4XwfmUd2D3dCFIDkwwJ4XmGMg0+Cj+6o2LZFjxhDlXvY0Xq8eZgsX+?= =?us-ascii?q?7U0k0zwCUb0J/zbq14R8VheCCRP8J0LIEoj8tqzF1HFal3t/aEdSApxB5cKVdf?= =?us-ascii?q?Nw84FNH1WbDuwx6JJygIKZvjUMdfQRvp07iygt7B4FancQ3sH8nwxB+JKyE3F9?= =?us-ascii?q?beT6V0oj8NqDZJ2Xv5hyjda7b117E3NqI+qoD9u40plrjsQyvC0Es6W9o08NP3?= =?us-ascii?q?HuZ/pjKDBQdUZb2Uksv8hh7qKzWbjMl54PT0X1tMbW0vSHe1NIpAuslyw+gf8p?= =?us-ascii?q?BP6+eEw/yCcIaC9CvKOwshVepcgoJMP1M+KMwJc+qaueK1aGxMOtugD6ql2pK7?= =?us-ascii?q?Y9l3kKJ7SV8S+rI35gfw/Gf2wuKTyrygku8vMzrgY1LeywdEWi8xCX8HoBcabV?= =?us-ascii?q?/fZ4MCWeqI8y32stxiILtW35e9V6jHk4G19GzdRqVdVz90hVd2l4ToXO9nyu01?= =?us-ascii?q?Sd0nC0prqqa3SzO3/jieQEcNW5MWWlii0vjLpavj9wAWUilYAcomAGi5UbgyKh?= =?us-ascii?q?XvL5/IHXLQUdUYyj2KHlvXbequbqHZ85D8ZcosSRMUOSgel2aUb78ox4C0yz5B?= =?us-ascii?q?WdexTY7dyuruprjhRB6hnidfz5Pqy+Tfd52j1+L4MPabfpO2HwASTUuzXGdDUe?= =?us-ascii?q?6dZHhqd6Lkb/Hs/uiTCSgWoxXdW/s14zW8GOw7GhuRBm+hOybm9v9EAF83zWo+?= =?us-ascii?q?cNtUHDhqB/6KrLg16G7Lf4vKkBsDVm68MF6H4BijqMog5UBxXURhpOU5GcK12D?= =?us-ascii?q?pPoMIiurFcHMRSGtTkJbu6w//1Rg4dhphKKrzUWibycZ6IdzmciURwC1vtqii7?= =?us-ascii?q?Y+M67hVgSZ+oly5tB/cJ/9nkWVEoRPPwHsK2qcRvw480iiWArYTBFRVeyv2mEb?= =?us-ascii?q?Rh+0=3D?= IronPort-Data: =?us-ascii?q?A9a23=3AI0JGm6jNPDnSOPvaSeU/KPixX161fxEKZh0ujC4?= =?us-ascii?q?5NGQNrF6WrkUGn2EaXD/TP/3cNGT2Kt9xO4ri8R9T65SDyoQ1SgNuqFhgHilAw?= =?us-ascii?q?SbnLYTAfx2oZ0t+DeWaERk5t51GAjX4wXFdokb0/n9BCZC86ykjvU20buCkUre?= =?us-ascii?q?dY3ggHVYMpBoJ0HqPpcZp2uaEvvDiW2thifuqyyHuEAfNNwxcagr42IrfwP9bh?= =?us-ascii?q?8kejRtD1rAIiV+ni3eF/5UdJMp3yahctBIUSKEMdgKxb76rIL1UYgrkExkR5tO?= =?us-ascii?q?Nyt4Xc2UPUueUJQ+Km2ZbUKikgwFfq2o1yKlT2Pg0MB0GzWzRw5YqkJMW6fRcS?= =?us-ascii?q?i9xVkHIsN8naEENHi1Pbfh+pOrfJnyurcGYz0vHambhhfJ0AxQ/OYQevP18AWR?= =?us-ascii?q?P6eAwIjcQaBuOnKSznKL9TfNj7igmBJO0Y9lH5CgIITbxV698HsCSGc0m/+Rw1?= =?us-ascii?q?z41goVKHO3CT9EIbCJmKhXGeRxGfFkNYK/SNs+83iylNWBM8QfN4/IjuT2Lilc?= =?us-ascii?q?rieb5a4+NPIGeGpB8gGC0pkbn9kLtW0lPbJjH3VJp6VqplraJhST/SZ4fH72+9?= =?us-ascii?q?+d3jRuU3GN7NfHfbnPjydHRt6J0c4s3x40oFisSQWwa8VzyCMH6WwykrXWEuB8?= =?us-ascii?q?FRtcWFPc1gO1I4rSB+B6XXwDoURYYAOHKdudvLdDp6rNNt9nuGDpkvabTTC6Ns?= =?us-ascii?q?LCOolte/AAONWFYI3dsoRQturHeTUJasv4LZs5kFL+pg9b1HzDp3j3MqzIx71n?= =?us-ascii?q?WpdUT2f/9pTgrnBr1zqX0osUJCsk7k45rAs6VpGJoWmBw1WXm0A=3D=3D?= IronPort-HdrOrdr: =?us-ascii?q?A9a23=3AX41St6/VTG+F15sUpB9uk+AyI+orL9Y04lQ7?= =?us-ascii?q?vn2ZHyYlC/Bw8Pre/8jztCWVtN9/YhodcLy7UpVoa0mskqKdg7N/AV7SZmjbUQ?= =?us-ascii?q?KTRelfBO3ZrgEIcBeRygcy78tdmoFFeaXNJGk/o8bmxQGyV/493diA68mT9IHj?= =?us-ascii?q?5kYoYwF2Tqlqqz5jDAWWGFAefnglObMJULSd++9OrH6YYnIVYs6nQlkJNtKzwu?= =?us-ascii?q?HjpdbJYQMiDxVi0RKJjj+j9frCGwWYty1uNw9y/Q=3D=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0A+AgAqSIphfSIeaIE+EgqEA1pBAWRXO?= =?us-ascii?q?jGER45vgiWBFoIVhhKUGwFREAEDAQ0qAQ4FAQIEAQGFG4I/Ah4GAQUzEwECBBU?= =?us-ascii?q?BAQUBAQECAQMDBAETAQEPGQhehTsIJQ2CNQwZg3ABDBUEBjgtIwMUAQYDAgQNA?= =?us-ascii?q?RcBFAoXARIUBoJYgwcFCkSPE5wMfzKBAYNOAYRGgWMNAhSBABeGBVRKAYJ/CYN?= =?us-ascii?q?7AicQgVVEgRWCKUoHboIESBcBAQEBAReBGQsBAYM4F4JOBI5aDgszEVMmBQEHD?= =?us-ascii?q?AgPASAPIQg4AQo/BQkdCiMWAi0DkWUlApclk2VxMweDO4EzBguHdYEVjFqICIN?= =?us-ascii?q?sgUmFD4UZhkqRASGVbx+JBoEMCQaCNIkQinaFMoFOKoFMAR0MBzMaMEMNAYInA?= =?us-ascii?q?TMJClcPjC6BexmBBAEJgh4kgQE9gxs7gkGDCkAzAgEBNAIGAQoBAQMJhWMBAQU?= =?us-ascii?q?TCwGKbAEB?= X-IPAS-Result: =?us-ascii?q?A0A+AgAqSIphfSIeaIE+EgqEA1pBAWRXOjGER45vgiWBFoI?= =?us-ascii?q?VhhKUGwFREAEDAQ0qAQ4FAQIEAQGFG4I/Ah4GAQUzEwECBBUBAQUBAQECAQMDB?= =?us-ascii?q?AETAQEPGQhehTsIJQ2CNQwZg3ABDBUEBjgtIwMUAQYDAgQNARcBFAoXARIUBoJ?= =?us-ascii?q?YgwcFCkSPE5wMfzKBAYNOAYRGgWMNAhSBABeGBVRKAYJ/CYN7AicQgVVEgRWCK?= =?us-ascii?q?UoHboIESBcBAQEBAReBGQsBAYM4F4JOBI5aDgszEVMmBQEHDAgPASAPIQg4AQo?= =?us-ascii?q?/BQkdCiMWAi0DkWUlApclk2VxMweDO4EzBguHdYEVjFqICINsgUmFD4UZhkqRA?= =?us-ascii?q?SGVbx+JBoEMCQaCNIkQinaFMoFOKoFMAR0MBzMaMEMNAYInATMJClcPjC6Bexm?= =?us-ascii?q?BBAEJgh4kgQE9gxs7gkGDCkAzAgEBNAIGAQoBAQMJhWMBAQUTCwGKbAEB?= X-IronPort-AV: E=Sophos;i="5.87,219,1631570400"; d="scan'208,217";a="2772061" X-MGA-submission: =?us-ascii?q?MDGMfnwt4J+Psi5cG+2WH0N/UqfHNUTNbwFxCz?= =?us-ascii?q?eAn05BunrfC7gjQSH+3spVvgBy3v3Nqgl/vsu3fhdR6HSj+CQzzfsdWs?= =?us-ascii?q?47aBg8VN3+yRfJTMNlTSXPJaQI42GcYfCdeSzLnaUFA14oOrGH0nxWee?= =?us-ascii?q?o3hs69pFYA5ZvYOIeSBxNP9Q=3D=3D?= Received: from mx1.polytechnique.org ([129.104.30.34]) by mail2-smtp-roc.national.inria.fr with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 09 Nov 2021 11:08:43 +0100 Received: from set (unknown [131.254.252.45]) (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 541A0564F02; Tue, 9 Nov 2021 11:08:42 +0100 (CET) From: Alan Schmitt To: "lwn" , "cwn" , caml-list@inria.fr Date: Tue, 09 Nov 2021 11:08:24 +0100 Message-ID: <871r3ppron.fsf@m4x.org> MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="=-=-=" X-AV-Checked: ClamAV using ClamSMTP at svoboda.polytechnique.org (Tue Nov 9 11:08:42 2021 +0100 (CET)) X-Spam-Flag: No, tests=bogofilter, spamicity=0.017296, queueID=C135A564F04 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: 18612 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 ZWsgb2YgTm92ZW1iZXIgMDIgdG8gMDksDQoyMDIxLg0KDQpUYWJsZSBvZiBDb250ZW50cw0K4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCk9UT01M IDAuOS4wIOKAlCBhIGNvbXBsaWFudCBhbmQgZmxleGlibGUgVE9NTCBwYXJzaW5nLCBtYW5pcHVs YXRpb24sIGFuZCBwcmV0dHktcHJpbnRpbmcgbGlicmFyeQ0KQnVpbGQgU3lzdGVtIEVuZ2luZWVy IGF0IEphbmUgU3RyZWV0DQpSZWFsLXdvcmxkIHVzZSBleGFtcGxlIG9mIHRzMm9jYW1sDQpGaXJz dCByZWxlYXNlIG9mIGB0czJvY2FtbCcgLSBnZW5lcmF0ZXMgT0NhbWwgYmluZGluZ3MgZnJvbSAu ZC50cyBmaWxlcyENCk9VUFMgbWVldHVwcyBhcmUgYmFjayENCk9sZCBDV04NCg0KDQpPVE9NTCAw LjkuMCDigJQgYSBjb21wbGlhbnQgYW5kIGZsZXhpYmxlIFRPTUwgcGFyc2luZywgbWFuaXB1bGF0 aW9uLCBhbmQgcHJldHR5LXByaW50aW5nIGxpYnJhcnkNCuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6DQogIDxodHRwczov L2Rpc2N1c3Mub2NhbWwub3JnL3QvYW5uLW90b21sLTAtOS0wLWEtY29tcGxpYW50LWFuZC1mbGV4 aWJsZS10b21sLXBhcnNpbmctbWFuaXB1bGF0aW9uLWFuZC1wcmV0dHktcHJpbnRpbmctbGlicmFy eS84MTUyLzk+DQoNCg0KRGFuaWlsIEJhdHVyaW4gYW5ub3VuY2VkDQrilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAN Cg0KICBPVE9NTCAwLjkuMiBpcyBub3cgYXZhaWxhYmxlIGZyb20gdGhlIE9QQU0gcmVwb3NpdG9y eS4NCg0KDQpCcmVha2luZyBjaGFuZ2VzDQrilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzi lYzilYzilYzilYzilYzilYwNCg0KICBJdCBtYWtlcyBhIGJyZWFraW5nIGNoYW5nZSB0byB0aGUg YGdldF9hcnJheScgYWNjZXNzb3I6IGl0IG5vdyBoYXMNCiAgdHlwZSBgT3RvbWwuZ2V0X2FycmF5 JyBub3cgaGFzIHR5cGUgYD9zdHJpY3Q6Ym9vbCAtPiAodCAtPiAnYSkgLT4gdCAtPg0KICAnYSBs aXN0JyAsIHRoYXQgaXMsIGl0IHJlcXVpcmVzIGFuIGFjY2Vzc29yIGZ1bmN0aW9uIHRoYXQgd2ls bCBiZQ0KICBhcHBsaWVkIHRvIGV2ZXJ5IGl0ZW0gb2YgdGhlIGFycmF5Lg0KDQogIEZvciBleGFt cGxlLCB5b3UgY2FuIHVzZSBgT3RvbWwuZmluZCB0IChPdG9tbC5nZXRfYXJyYXkNCiAgT3RvbWwu Z2V0X3N0cmluZykgWyJmb28iXScgdG8gcmV0cmlldmUgYW4gYXJyYXkgb2Ygc3RyaW5ncyBmcm9t IGEgVE9NTA0KICBkb2N1bWVudCdzIGtleSBgZm9vJyAuDQoNCiAgVGhlIG1vdGl2YXRpb24gZm9y IHRoZSBjaGFuZ2UgaXMgdGhhdCBpdCBhbGxvd3MgcmV0cmlldmluZyBhcnJheXMgb2YNCiAgdW53 cmFwcGVkIE9DYW1sIHZhbHVlcyBpbiBvbmUgc3RlcC4gVGhlIG9sZCBiZWhhdmlvdXIgY2FuIHN0 aWxsIGJlDQogIGVtdWxhdGVkIHVzaW5nIGFuIGlkZW50aWZ5IGZ1bmN0aW9uIGZvciB0aGUgYWNj ZXNzb3IsIGZvciBleGFtcGxlIHRoZQ0KICBidWlsdC1pbiBgT3RvbWwuZ2V0X3ZhbHVlIDogJ2Eg LT4gJ2EnIC4NCg0KDQpOZXcgZmVhdHVyZXMNCuKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKV jOKVjOKVjA0KDQogIE5ldyBgT3RvbWwucGF0aF9leGlzdHMgdCBbInNvbWUiOyAidGFibGUiOyAi a2V5Il0nIGFsbG93cyBjaGVja2luZyBpZg0KICBhIGtleSBwYXRoIGV4aXN0cyBpbiBhIFRPTUwg ZG9jdW1lbnQuDQoNCiAgYE90b21sLlByaW50ZXIudG9fc3RyaW5nL3RvX2NoYW5uZWwnIGZ1bmN0 aW9ucyBub3cgcHJvdmlkZQ0KICBgfmZvcmNlX3RhYmxlX2FycmF5JyBvcHRpb24uIFdoZW4gc2V0 IHRvIHRydWUsIGl0IGZvcmNlcyBldmVyeSBhcnJheQ0KICB0aGF0IGNvbnRhaW5zIG5vdGhpbmcg YnV0IHRhYmxlcyB0byBiZSByZW5kZXJlZCB1c2luZyB0aGUgYFtbLi4uXV1+Jw0KICB0YWJsZSBh cnJheSBzeW50YXguDQoNCg0KQnVnIGZpeGVzDQrilYzilYzilYzilYzilYzilYzilYzilYzilYwN Cg0KICBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZXMgYXJlIG5vdyBwcmludGVkIGNvcnJlY3RseS4N Cg0KICBJZiBhIHRhYmxlIGhhcyBzdWJ0YWJsZXMgYW5kIG5vbi10YWJsZSBpdGVtcywgdGhlIG5v bi10YWJsZSBpdGVtcyBhcmUNCiAgZm9yY2libHkgbW92ZWQgYmVmb3JlIHRoZSBmaXJzdCBzdWJ0 YWJsZSBmb3IgcHJpbnRpbmcuIFRoaXMgd2F5IHRoZQ0KICBvdXRwdXQgcGFyc2VzIGNvcnJlY3Rs eSwgb3RoZXJ3aXNlIHRoZSBub24tdGFibGUgaXRlbXMgd291bGQgYmUNCiAgbWlzdGFrZW5seSB0 cmVhdGVkIGFzIHN1YnRhYmxlIG1lbWJlcnMuIFRoaXMgd2F5IGhhbmQtY29uc3RydWN0ZWQgVE9N TA0KICB0YWJsZXMgYXJlIGFsd2F5cyBmb3JtYXR0ZWQgY29ycmVjdGx5IGV2ZW4gaWYgdGhlIHVz ZXIgaW5zZXJ0cw0KICBub24tdGFibGUgaXRlbXMgYWZ0ZXIgYSBzdWJ0YWJsZS4NCg0KDQpUZXN0 aW5nDQrilYzilYzilYzilYzilYzilYzilYwNCg0KICBJIGFkZGVkIGEgbWluaW1hbCB0ZXN0IHN1 aXRlIGZvciB0aGUgcmVhZC13cml0ZSBpbnRlcmZhY2UuIElmIGFueW9uZQ0KICB3YW50cyB0byBj b250cmlidXRlIHRvIGl0LCB0aGF0IHdpbGwgYmUgbXVjaCBhcHByZWNpYXRlZC4gSWRlYWxseSwg YWxsDQogIGxvb2t1cCBmdW5jdGlvbnMgYW5kIGFsbCBhY2Nlc3NvcnMvY29uc3RydWN0b3JzIHNo b3VsZCBiZSB0ZXN0ZWQgdG8NCiAgd29yayBhcyBleHBlY3RlZC4NCg0KICBCb3RoIHBhcnNlciBh bmQgZm9ybWF0dGVyIGFyZSBub3cgdGVzdGVkIHdpdGggdGhlDQogIFtnaXRodWIuY29tL0J1cm50 U3VzaGkvdG9tbC10ZXN0XSBhbmQgYXJlIGZ1bGx5IGNvbXBsaWFudCAob25lDQogIGZvcm1hdHRl ciB0ZXN0IGlzIHNraXBwZWQgYmVjYXVzZSB0aGUgdGVzdCBpdHNlbGYgaXMgbWFsZm9ybWVkKS4N Cg0KDQpbZ2l0aHViLmNvbS9CdXJudFN1c2hpL3RvbWwtdGVzdF0NCjxodHRwczovL2dpdGh1Yi5j b20vQnVybnRTdXNoaS90b21sLXRlc3Q+DQoNCg0KRnV0dXJlIHBsYW4NCuKVjOKVjOKVjOKVjOKV jOKVjOKVjOKVjOKVjOKVjOKVjA0KDQogIE15IGlkZWEgd2FzIHRvIGNhbGwgaXQgMS4wLjAgd2hl biBpdCBwYXNzZXMgYm90aCBwYXJzaW5nIGFuZCBmb3JtYXR0ZXINCiAgdGVzdHMuIFRoYXQgZ29h bCBpcyByZWFjaGVkIG5vdywgYnV0IEknZCBsaWtlIHRvIHNlZSBpZiBhbnlvbmUgaGFzIGFueQ0K ICBtb3JlIGlkZWFzIGZvciB0aGUgQVBJIHRoYXQgY2Fubm90IGJlIGltcGxlbWVudGVkIHdpdGhv dXQgYnJlYWtpbmcNCiAgY2hhbmdlcy4gSWYgbm90LCBJJ2xsIGNhbGwgaXQgMS4wLjAgaW4gdGhl IG5leHQgcmVsZWFzZS4NCg0KDQpCdWlsZCBTeXN0ZW0gRW5naW5lZXIgYXQgSmFuZSBTdHJlZXQN CuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQog IEFyY2hpdmU6DQogIDxodHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3Qvam9iLWJ1aWxkLXN5c3Rl bS1lbmdpbmVlci1hdC1qYW5lLXN0cmVldC84NzM3LzE+DQoNCg0KQW5kcmV5IE1va2hvdiBhbm5v dW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIEphbmUgU3RyZWV0IGlzIGxvb2tpbmcgZm9yIG5ldyBi dWlsZCBzeXN0ZW0gZW5naW5lZXJzISBJJ3ZlIHdvcmtlZCBpbg0KICB0aGlzIHRlYW0gZm9yIHR3 byB5ZWFycyBhbmQgSSBsb3ZlIHRoZSBqb2IuICBIZXJlIGlzIHdoeToNCg0KICDigKIgWW91IGZy ZXF1ZW50bHkgY2hhbmdlIGZvY3VzIGZyb20gbG93LWxldmVsIHdvcmssIGxpa2UgZGVidWdnaW5n IGENCiAgICB3ZWlyZCBmaWxlLXN5c3RlbSBpc3N1ZSwgdG8gaGlnaC1sZXZlbCB3b3JrLCBsaWtl IGRlc2lnbmluZyBhIGNsb3VkDQogICAgYnVpbGQgY2FjaGUuDQoNCiAg4oCiIFlvdXIgY29sbGVh Z3VlcyBhcmUgYW1hemluZy4gSWYgeW91J3JlIGxpa2UgbWUsIHlvdSdsbCBmZWVsIGxpa2UgYW4N CiAgICBpbXBvc3RlciBpbiBtb3N0IGNvbnZlcnNhdGlvbnMgYnV0IGl0J3MgT0sgc2luY2UgZXZl cnlvbmUgaXMga2luZA0KICAgIGFuZCBoZWxwZnVsLCBzbyB5b3UnbGwgbGVhcm4gc29tZXRoaW5n IG5ldyBldmVyeSBkYXkuDQoNCiAg4oCiIE1vc3Qgb2YgeW91ciB3b3JrIGlzIG9wZW4tc291cmNl IGFuZCBiZW5lZml0cyB0aGUgd2lkZXIgT0NhbWwNCiAgICBjb21tdW5pdHkuDQoNCiAgRm9yIGJh bGFuY2UsIGxldCBtZSBhbHNvIHNheSBhIGZldyB3b3JkcyBhYm91dCBjaGFsbGVuZ2VzLg0KDQog IOKAoiBCdWlsZCBzeXN0ZW1zIGFjY3VtdWxhdGUgeWVhcnMgb2Yga25vd2xlZGdlIG9mIG1hbnkg cGVvcGxlIG9uIGhvdyB0bw0KICAgIGdldCB0aGluZ3MgZG9uZS4gV2hlbiB0aGlzIGtub3dsZWRn ZSBnb2VzIG91dCBvZiBkYXRlLCB5b3UgYXJlIG9mdGVuDQogICAgdGhlIG9ubHkgcGVyc29uIHRv IGZpeCBpdC4gRm9yIHRoaXMgcmVhc29uLCBidWlsZCBzeXN0ZW1zIHdvcmsgY2FuDQogICAgYmUg ZGF1bnRpbmcuDQoNCiAg4oCiIEl0J3MgZmFyIGZyb20gb3VyIGNvcmUgYnVzaW5lc3MsIHNvIHlv dSBkb24ndCBnZXQgdG8gd29yayBvbiBhbnkgb2YNCiAgICBvdXIgY29vbCB0cmFkaW5nIHN5c3Rl bXMuIFlvdXIgcm9sZSBpcyB0byBlbXBvd2VyIG90aGVycy4NCg0KICDigKIgT3VyIHRlYW0gaXMg c21hbGwsIHNvIHdlIG1heSBoYXZlIHRvIHR1cm4gZG93biBzb21lIGdvb2QNCiAgICBjYW5kaWRh dGVzLiBIb3dldmVyLCBwbGVhc2UgZG9uJ3QgZ2V0IGRpc2NvdXJhZ2VkIGJ5IHRoaXMhIElmIGlu DQogICAgZG91YnQsIHNlbmQgbWUgYSBtZXNzYWdlIGFuZCB3ZSdsbCBjaGF0Lg0KDQogIOKAoiBU aGVyZSBpcyBubyByZW1vdGUgd29yayBmb3Igbm93Lg0KDQogIFRvIGFwcGx5LCBmb2xsb3cgW3Ro aXMgbGlua10gYW5kIG1lbnRpb24gdGhlIGJ1aWxkIHN5c3RlbXMgcm9sZSBpbg0KICB5b3VyIGFw cGxpY2F0aW9uLg0KDQogIE91ciBwbGFucyBmb3IgMjAyMiBpbmNsdWRlOiBpbXBsZW1lbnRpbmcg Y2xvdWQgYnVpbGRzIGluIER1bmUsIGJldHRlcg0KICBpbnRlZ3JhdGlvbiB3aXRoIG90aGVyIHRv b2xzIGxpa2UgSURFcyBhbmQgdGhlIE9DYW1sIGNvbXBpbGVyLCBhbmQNCiAgbWFraW5nIER1bmUg ZXZlbiBmYXN0ZXIgdGhhbiBpdCBpcyB0b2RheS4gVG8gbGVhcm4gbW9yZSBhYm91dCBvdXINCiAg d29yaywgbGlzdGVuIHRvIFt0aGlzIHBvZGNhc3RdLg0KDQogIEFuZCBmZWVsIGZyZWUgdG8gbWVz c2FnZSBtZSBvciBAamVyZW1pZWRpbWlubyBpZiB5b3UgaGF2ZSBhbnkNCiAgcXVlc3Rpb25zIQ0K DQoNClt0aGlzIGxpbmtdDQo8aHR0cHM6Ly9qYW5lc3RyZWV0LmNvbS9qb2luLWphbmUtc3RyZWV0 L3Bvc2l0aW9uLzQyNzQ4MTQwMDIvPg0KDQpbdGhpcyBwb2RjYXN0XSA8aHR0cHM6Ly9zaWduYWxz YW5kdGhyZWFkcy5jb20vYnVpbGQtc3lzdGVtcy8+DQoNCg0KUmVhbC13b3JsZCB1c2UgZXhhbXBs ZSBvZiB0czJvY2FtbA0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQDQoNCiAgQXJjaGl2ZToNCiAgPGh0dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9yZWFsLXdv cmxkLXVzZS1leGFtcGxlLW9mLXRzMm9jYW1sLzg3NDUvMT4NCg0KDQpTb3JhIE1vcmltb3RvIGFu bm91bmNlZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgU29tZSBPQ2FtbC9KYXZhU2NyaXB0IGVudGh1c2lh c3RzIG1heSBrbm93IHRoYXQgd2Ugc3BlbnQgYWxtb3N0IHR3bw0KICB5ZWFycyB3b3JraW5nIG9u IGEgdG9vbCBhdXRvbWF0aWNhbGx5IGdlbmVyYXRpbmcgT0NhbWwgYmluZGluZ3MgZnJvbQ0KICBU eXBlU2NyaXB0J3MgdHlwZSBkZWZpbml0aW9uIGZpbGVzLiBUbyBwcmVwYXJlIGZvciBpdHMgcmVs ZWFzZSwgd2UNCiAganVzdCBwdWJsaXNoZWQgYSByZXBvc2l0b3J5IHRvIHNob3cgYW4gZXhhbXBs ZSB1c2Ugb2YgaXQuDQoNCiAgPGh0dHBzOi8vYXdzMS5kaXNjb3Vyc2UtY2RuLmNvbS9zdGFuZGFy ZDExL3VwbG9hZHMvb2NhbWwvb3B0aW1pemVkLzJYLzMvMzQ3M2ZjMTFkYTBjNTYzMzVlOGRlMmI5 MWJkN2Q5MTcyNDQ0OTEzYV8yXzEzODB4Mzc0LnBuZz4NCg0KICA8aHR0cHM6Ly9naXRodWIuY29t L29jc2lnZW4vdHMyb2NhbWwtZXhhbXBsZT4NCg0KICBUaGlzIGV4YW1wbGUgZ2VuZXJhdGVzIGFu ZCBhY3R1YWxseSB1c2VzIGEgYmluZGluZyB0byBhIHNtYWxsDQogIEphdmFTY3JpcHQgbGlicmFy eSBjYWxsZWQgW3ByZXR0eS1ieXRlc10sIGFuZCBpdCBkb2Vzbid0IG9ubHkgZ2VuZXJhdGUNCiAg dGhlIGJpbmRpbmcsIGJ1dCBhbHNvIGNvbnZlcnRzIEpTRG9jIGNvbW1lbnRzIHRvIG9kb2Mgb25l cy4NCg0KICBXZSBiZWxpZXZlIHdlIGNhbiByZWxlYXNlIHRzMm9jYW1sIGFzIGVhcmx5IGFzIHRo aXMgbW9udGgsIHBsZWFzZSBsb29rDQogIGZvcndhcmQgdG8gdGhlIG5ldyBhbm5vdW5jZW1lbnQh DQoNCg0KW3ByZXR0eS1ieXRlc10gPGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvcHJl dHR5LWJ5dGVzPg0KDQoNCkZpcnN0IHJlbGVhc2Ugb2YgYHRzMm9jYW1sJyAtIGdlbmVyYXRlcyBP Q2FtbCBiaW5kaW5ncyBmcm9tIC5kLnRzIGZpbGVzIQ0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZToNCiAgPGh0dHBzOi8vZGlzY3Vzcy5v Y2FtbC5vcmcvdC9hbm4tZmlyc3QtcmVsZWFzZS1vZi10czJvY2FtbC1nZW5lcmF0ZXMtb2NhbWwt YmluZGluZ3MtZnJvbS1kLXRzLWZpbGVzLzg3NzIvMT4NCg0KDQpDYW5ub3JpbiBhbm5vdW5jZWQN CuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0K DQogIFdlJ3JlIHBsZWFzZWQgdG8gYW5ub3VuY2UgdGhhdCB0czJvY2FtbCBpcyBub3cgcHVibGlj IQ0KDQogIDxodHRwczovL2dpdGh1Yi5jb20vb2NzaWdlbi90czJvY2FtbD4NCg0KICBUaGlzIGlz IGEgdG9vbCB3aGljaCBwYXJzZXMgVHlwZVNjcmlwdCBkZWZpbml0aW9uIGZpbGVzIChgLmQudHMn KSBvZiBhDQogIEpTIHBhY2thZ2UgYW5kIHRoZW4gZ2VuZXJhdGVzIGFuIE9DYW1sIGJpbmRpbmcg Zm9yIHRoZSBwYWNrYWdlLg0KDQogIHRzMm9jYW1sIGN1cnJlbnRseSBzdXBwb3J0cyBqc19vZl9v Y2FtbCBhcyBhIHRhcmdldCB2aWENCiAgW0xleGlGaS9nZW5fanNfYXBpXSwgYW5kIFJlU2NyaXB0 IGlzIGFsc28gZ29pbmcgdG8gYmUgc3VwcG9ydGVkIHRvbyENCg0KICBZb3UgY2FuIGluc3RhbGwg dHMyb2NhbWwgZnJvbSBOUE06IGBucG0gaW5zdGFsbCAtZyBAb2NzaWdlbi90czJvY2FtbCcuDQog IFBsZWFzZSB0YWtlIGEgbG9vayBhdCB0aGUgZG9jdW1lbnRhdGlvbiBvbiBvdXIgR2l0SHViIHJl cG9zaXRvcnkNCiAgYmVmb3JlIHVzaW5nIGl0Lg0KDQogIEFsc28sIHdlIGFwcHJlY2lhdGUgYW55 IGZlZWRiYWNrIG9yIGJ1ZyByZXBvcnRzLCBlc3BlY2lhbGx5IHNpbmNlIHRoaXMNCiAgaXMgdGhl IGZpcnN0IHJlbGVhc2Ugb2YgdHMyb2NhbWwhDQoNCiAgVGhpcyB0b29sIGlzIGhlYXZpbHkgaW5z cGlyZWQgYnkgdHMyZmFibGUsIHdoaWNoIGdlbmVyYXRlcyBGYWJsZSAoRiMNCiAgQWx0SlMpIGJp bmRpbmdzIGZyb20gYC5kLnRzJyBmaWxlcy4gVGhpcyB0b29sIGlzIGFsc28gd3JpdHRlbiBpbg0K ICBGYWJsZS4gVGhhbmsgeW91IHZlcnkgbXVjaCBmb3IgdGhlIGdyZWF0IGxhbmd1YWdlIGFuZCBh biBhd2Vzb21lDQogIGVjb3N5c3RlbSwgRmFibGUgdGVhbSENCg0KDQpbTGV4aUZpL2dlbl9qc19h cGldIDxodHRwczovL2dpdGh1Yi5jb20vTGV4aUZpL2dlbl9qc19hcGk+DQoNCg0KT1VQUyBtZWV0 dXBzIGFyZSBiYWNrIQ0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZTogPGh0dHBzOi8vZGlzY3Vzcy5v Y2FtbC5vcmcvdC9vdXBzLW1lZXR1cHMtYXJlLWJhY2svODc3Ni8xPg0KDQoNCnphcGFzaGNhbm9u IGFubm91bmNlZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgV2UgKEBWZXJ0bW8sIEBsc3lsdmVzdHJlLCBDb2xpbiBH b256w6FsZXogYW5kIG15c2VsZikgYXJlIGhhcHB5IHRvDQogIGFubm91bmNlIHRoYXQgdGhlIFtP VVBTIChPQ2FtbCBVc2VycyBpbiBQYXJpUykgbWVldHVwc10gYXJlIGJhY2suDQoNCiAgSWYgeW91 J3JlIG5vdCBmYW1pbGlhciB3aXRoIE9VUFMsIHRoZSBpZGVhIGlzIHRvIGhhdmUgcGVvcGxlIHVz aW5nDQogIE9DYW1sIChkZXZlbG9wZXJzLCBhcHBsaWNhdGlvbnMnIHVzZXJzLCByZXNlYXJjaGVy cywg4oCmKSB0byBtZWV0IGluDQogIFBhcmlzIHdoZXJlIGEgdGFsayBpcyBnaXZlbiwgZm9sbG93 ZWQgYnkgc29tZSBkaXNjdXNzaW9ucyB3aGlsZSBlYXRpbmcNCiAgcGl6emEgYW5kIGRyaW5raW5n IGJlZXIuDQoNCiAgV2UncmUgcGxhbm5pbmcgdG8gaGF2ZSB0aGUgZmlyc3QgbWVldHVwIGhhcHBl bmluZyB0aGlzIHllYXIgaW4NCiAgRGVjZW1iZXIuDQoNCiAgVGh1cyB3ZSdyZSBsb29raW5nIGZv ciBzcGVha2VycyB3aWxsaW5nIHRvIGdpdmUgYSB0YWxrIGZvciB0aGUgZmlyc3QNCiAgbWVldHVw cyBvciB0aGUgZm9sbG93aW5nIG9uZXMuDQoNCiAgVGhlIHRhbGtzIHVzdWFsbHkgaGFwcGVuIGF0 IFtJUklMTF0ncyBvZmZpY2VzLCBbNCBQbGFjZSBKdXNzaWV1LCA3NTAwNQ0KICBQYXJpc10uIFdl J2xsIHByZWZlciB0YWxrcyBpbiBmcmVuY2ggYW5kIHdpdGggc29tZW9uZSBhYmxlIHRvIGJlDQog IHBoeXNpY2FsbHkgcHJlc2VudCwgYnV0IHdlJ3JlIG9wZW4gYWJvdXQgZW5nbGlzaCBhbmQgcmVt b3RlIHRhbGtzLg0KDQogIElmIHlvdSB3YW50IHRvIGdpdmUgYSB0YWxrIGluIERlY2VtYmVyIG9y IGluIHRoZSBmdXR1cmUsIHlvdSBjYW4gbGV0DQogIHVzIGtub3cgaGVyZSBvciBbb24genVsaXBd IHdoZXJlIHdlIHBsYW4gdG8gaGF2ZSBvdXIgbWFpbiBkaXNjdXNzaW9ucy4NCiAgV2UgYWxzbyBo YXZlIFthIGdyb3VwIG9uIEZyYW1hZ2l0XSB3aGVyZSB3ZSdsbCBzdG9yZSBzb21lIHN0dWZmLiBJ Zg0KICB5b3UgZG9uJ3QgbGlrZSBadWxpcCwgSSdtIGFsc28gb24gSVJDICgjb3VwcyBpbiBbbGli ZXJhLmNoYXRdKSBhbmQNCiAgW21hdHJpeF0gYnV0IG5vdCBldmVyeW9uZSBpcy4NCg0KICBUaGUg Zm91ciBvZiB1cyBhcmUgZG9pbmcgYSBQaEQgaW4gdGhlIGZvbGxvd2luZyBwbGFjZXM6IFtFTlNd IChbUGFya2FzDQogIHRlYW1dKSwgW1VuaXZlcnNpdMOpIGRlIFBhcmlzXSAoW0lyaWZdKSArIFtO b21hZGljIExhYnNdLCBbVW5pdmVyc2l0w6kNCiAgUGFyaXMtU2FjbGF5XSAoW0xNRl0pICsgW09D YW1sUHJvXSwgW1NvcmJvbm5lIFVuaXZlcnNpdMOpXSAoW0FQUiB0ZWFtIC0NCiAgTElQNl0pIDsg c28gd2UgaGF2ZSBhIGdvb2QgY292ZXJhZ2Ugb2YgdGhlIE9DYW1sIHVzZXJzIGluIFBhcmlzIGJ1 dCB3ZQ0KICBkb24ndCBrbm93IGV2ZXJ5b25lLiBFdmVuIGlmIHlvdSBkb24ndCB3YW50IHRvIGdp dmUgYSB0YWxrLCBpZiB5b3UNCiAga25vdyBzb21lb25lIHRoYXQgbWF5IGJlIGludGVyZXN0ZWQs IHBsZWFzZSB0YWxrIHRvIGhpbSBhYm91dCBPVVBTICENCiAgOikNCg0KICBBbHNvLCBpZiB0aGVy ZSdzIGEgc3ViamVjdCB5b3UnZCBsaWtlIHRvIGhlYXIgYWJvdXQgYXQgT1VQUywgeW91IGNhbg0K ICB0ZWxsIHVzIGFuZCB3ZSdsbCB0cnkgdG8gZmluZCBhIHNwZWFrZXIgdG8gZ2l2ZSBhIHRhbGsg YWJvdXQgaXQuDQoNCiAgV2UnbGwgY29tZSBiYWNrIHRvIHlvdSB2ZXJ5IHF1aWNrbHkgYWJvdXQg dGhlIERlY2VtYmVyIG1lZXR1cC4NCg0KDQpbT1VQUyAoT0NhbWwgVXNlcnMgaW4gUGFyaVMpIG1l ZXR1cHNdDQo8aHR0cHM6Ly93d3cubWVldHVwLmNvbS9mci1GUi9vY2FtbC1wYXJpcy8+DQoNCltJ UklMTF0gPGh0dHBzOi8vd3d3LmlyaWxsLm9yZy8+DQoNCls0IFBsYWNlIEp1c3NpZXUsIDc1MDA1 IFBhcmlzXQ0KPGh0dHBzOi8vd3d3Lm9wZW5zdHJlZXRtYXAub3JnLyNtYXA9MTkvNDguODQ2NTAv Mi4zNTQ1Nz4NCg0KW29uIHp1bGlwXSA8aHR0cHM6Ly9vdXBzLnp1bGlwY2hhdC5jb20+DQoNClth IGdyb3VwIG9uIEZyYW1hZ2l0XSA8aHR0cHM6Ly9mcmFtYWdpdC5vcmcvb3Vwcz4NCg0KW2xpYmVy YS5jaGF0XSA8aHR0cHM6Ly9saWJlcmEuY2hhdC8+DQoNClttYXRyaXhdIDxodHRwczovL21hdHJp eC50by8jLyNvdXBzOm1hdHJpeC5vcmc+DQoNCltFTlNdIDxodHRwczovL3d3dy5lbnMucHNsLmV1 Lz4NCg0KW1BhcmthcyB0ZWFtXSA8aHR0cHM6Ly9wYXJrYXMuZGkuZW5zLmZyLz4NCg0KW1VuaXZl cnNpdMOpIGRlIFBhcmlzXSA8aHR0cHM6Ly91LXBhcmlzLmZyLz4NCg0KW0lyaWZdIDxodHRwczov L3d3dy5pcmlmLmZyLz4NCg0KW05vbWFkaWMgTGFic10gPGh0dHBzOi8vd3d3Lm5vbWFkaWMtbGFi cy5jb20vPg0KDQpbVW5pdmVyc2l0w6kgUGFyaXMtU2FjbGF5XSA8aHR0cHM6Ly93d3cudW5pdmVy c2l0ZS1wYXJpcy1zYWNsYXkuZnIvPg0KDQpbTE1GXSA8aHR0cHM6Ly9sbWYuY25ycy5mci8+DQoN CltPQ2FtbFByb10gPGh0dHBzOi8vd3d3Lm9jYW1scHJvLmNvbS8+DQoNCltTb3Jib25uZSBVbml2 ZXJzaXTDqV0gPGh0dHBzOi8vd3d3LnNvcmJvbm5lLXVuaXZlcnNpdGUuZnIvPg0KDQpbQVBSIHRl YW0gLSBMSVA2XSA8aHR0cHM6Ly93d3cubGlwNi5mci9yZWNoZXJjaGUvdGVhbS5waHA/YWNyb255 bWU9QVBSPg0KDQoNCk9sZCBDV04NCuKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIElmIHlvdSBo YXBwZW4gdG8gbWlzcyBhIENXTiwgeW91IGNhbiBbc2VuZCBtZSBhIG1lc3NhZ2VdIGFuZCBJJ2xs IG1haWwNCiAgaXQgdG8geW91LCBvciBnbyB0YWtlIGEgbG9vayBhdCBbdGhlIGFyY2hpdmVdIG9y IHRoZSBbUlNTIGZlZWQgb2YgdGhlDQogIGFyY2hpdmVzXS4NCg0KICBJZiB5b3UgYWxzbyB3aXNo IHRvIHJlY2VpdmUgaXQgZXZlcnkgd2VlayBieSBtYWlsLCB5b3UgbWF5IHN1YnNjcmliZQ0KICBb b25saW5lXS4NCg0KICBbQWxhbiBTY2htaXR0XQ0KDQoNCltzZW5kIG1lIGEgbWVzc2FnZV0gPG1h aWx0bzphbGFuLnNjaG1pdHRAcG9seXRlY2huaXF1ZS5vcmc+DQoNClt0aGUgYXJjaGl2ZV0gPGh0 dHBzOi8vYWxhbi5wZXRpdGVwb21tZS5uZXQvY3duLz4NCg0KW1JTUyBmZWVkIG9mIHRoZSBhcmNo aXZlc10gPGh0dHBzOi8vYWxhbi5wZXRpdGVwb21tZS5uZXQvY3duL2N3bi5yc3M+DQoNCltvbmxp bmVdIDxodHRwOi8vbGlzdHMuaWR5bGwub3JnL2xpc3RpbmZvL2NhbWwtbmV3cy13ZWVrbHkvPg0K DQpbQWxhbiBTY2htaXR0XSA8aHR0cHM6Ly9hbGFuLnBldGl0ZXBvbW1lLm5ldC8+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 November 02 to 09, 20= 21.

OTOML 0.9.0 =E2=80=94 a compliant and flexible TOML parsing, m= anipulation, and pretty-printing library

Daniil Baturin announced

OTOML 0.9.2 is now available from the OPAM repository.

Breaking changes

It makes a breaking change to the get_array accessor: it now h= as type Otoml.get_array now has type ?strict:bool -> (t -> 'a) -> t -> 'a list , that is, it requires an a= ccessor function that will be applied to every item of the array.

For example, you can use Otoml.find t (Otoml.get_array Otoml.get_stri= ng) ["foo"] to retrieve an array of strings from a TOML document's key foo .

The motivation for the change is that it allows retrieving arrays of unwrap= ped OCaml values in one step. The old behaviour can still be emulated using an identify function for the accessor= , for example the built-in Otoml.get_value : 'a -> 'a .

New features

New Otoml.path_exists t ["some"; "table"; "key"] allows checki= ng if a key path exists in a TOML document.

Otoml.Printer.to_string/to_channel functions now provide ~force_table_array option. When set to true, it forces every array that contains nothing but tables to be rendered using the [[...]]~ table array syntax.

Bug fixes

Unicode escape sequences are now printed correctly.

If a table has subtables and non-table items, the non-table items are forci= bly moved before the first subtable for printing. This way the output parses correctly, otherwise the non-table ite= ms would be mistakenly treated as subtable members. This way hand-constructed TOML tables are always formatted correct= ly even if the user inserts non-table items after a subtable.

Testing

I added a minimal test suite for the read-write interface. If anyone wants = to contribute to it, that will be much appreciated. Ideally, all lookup functions and all accessors/constructors s= hould be tested to work as expected.

Both parser and formatter are now tested with the github.com/BurntSushi/t= oml-test and are fully compliant (one formatter test is skipped because the test itself is malformed).

Future plan

My idea was to call it 1.0.0 when it passes both parsing and formatter test= s. That goal is reached now, but I'd like to see if anyone has any more ideas for the API that cannot be implemented = without breaking changes. If not, I'll call it 1.0.0 in the next release.

Build System Engineer at Jane Street

Andrey Mokhov announced

Jane Street is looking for new build system engineers! I've worked in this = team for two years and I love the job. Here is why:

  • You frequently change focus from low-level work, like debugging a weird= file-system issue, to high-level work, like designing a cloud build cache.=
  • Your colleagues are amazing. If you're like me, you'll feel like an imp= oster in most conversations but it's OK since everyone is kind and helpful,= so you'll learn something new every day.
  • Most of your work is open-source and benefits the wider OCaml community= .

For balance, let me also say a few words about challenges.

  • Build systems accumulate years of knowledge of many people on how to ge= t things done. When this knowledge goes out of date, you are often the only= person to fix it. For this reason, build systems work can be daunting.
  • It's far from our core business, so you don't get to work on any of our= cool trading systems. Your role is to empower others.
  • Our team is small, so we may have to turn down some good candidates. Ho= wever, please don't get discouraged by this! If in doubt, send me a message= and we'll chat.
  • There is no remote work for now.

To apply, follow this link and mention the build systems role in your application.

Our plans for 2022 include: implementing cloud builds in Dune, better integ= ration with other tools like IDEs and the OCaml compiler, and making Dune even faster than it is today. To learn more= about our work, listen to this podcast.

And feel free to message me or @jeremiedimino if you have any questions!

Real-world use example of ts2ocaml

Sora Morimoto announced

Some OCaml/JavaScript enthusiasts may know that we spent almost two years w= orking on a tool automatically generating OCaml bindings from TypeScript's type definition files. To prepare for its = release, we just published a repository to show an example use of it.

3D"=

https://github.com/= ocsigen/ts2ocaml-example

This example generates and actually uses a binding to a small JavaScript li= brary called pretty-bytes, = and it doesn't only generate the binding, but also converts JSDoc comments to odoc ones.

We believe we can release ts2ocaml as early as this month, please look forw= ard to the new announcement!

First release of ts2ocaml - generates OCaml bindi= ngs from .d.ts files!

Cannorin announced

We're pleased to announce that ts2ocaml is now public!

https://github.com/ocsigen/= ts2ocaml

This is a tool which parses TypeScript definition files (.d.ts= ) of a JS package and then generates an OCaml binding for the package.

ts2ocaml currently supports js_of_ocaml as a target via LexiFi/gen_js_api, and ReScript is also going to be supported too!

You can install ts2ocaml from NPM: npm install -g @ocsigen/ts2ocaml. Please take a look at the documentation on our GitHub repository before usi= ng it.

Also, we appreciate any feedback or bug reports, especially since this is t= he first release of ts2ocaml!

This tool is heavily inspired by ts2fable, which generates Fable (F# AltJS)= bindings from .d.ts files. This tool is also written in Fable. Thank you very much for the great language and an aw= esome ecosystem, Fable team!

OUPS meetups are back!

zapashcanon announced

We (@Vertmo, @lsylvestre, Colin Gonz=C3=A1lez and myself) are happy to anno= unce that the OUPS (O= Caml Users in PariS) meetups are back.

If you're not familiar with OUPS, the idea is to have people using OCaml (d= evelopers, applications' users, researchers, …) to meet in Paris where a talk is given, followed by = some discussions while eating pizza and drinking beer.

We're planning to have the first meetup happening this year in December.

Thus we're looking for speakers willing to give a talk for the first meetup= s or the following ones.

The talks usually happen at IRILL's = offices, 4 Place Jussieu, 75005 Paris. We'll prefer talks in french and with someone able to be physically present, but we're open about english and remote talks.

If you want to give a talk in December or in the future, you can let us kno= w here or on zulip where we plan to have our main discussions. We also have a group on Framagit where we'll store some stuff. If you don't like Zulip, I'm als= o on IRC (#oups in libera.chat) and matrix but not everyone is.

The four of us are doing a PhD in the following places: ENS (Parkas team), Universit=C3=A9 de Paris (Irif) + Nomadic Labs, Universit=C3=A9 Paris-Saclay (LMF) + OCamlPro, Sorbo= nne Universit=C3=A9 (APR team - LIP6) ; so we have a good coverage of the OCaml users in Paris but we don't know everyone. Even if you don't want to give a talk, if you k= now someone that may be interested, please talk to him about OUPS ! :)

Also, if there's a subject you'd like to hear about at OUPS, you can tell u= s and we'll try to find a speaker to give a talk about it.

We'll come back to you very quickly about the December meetup.

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 online.

--=-=-=--