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 C730F5D4 for ; Tue, 5 May 2020 07:45:54 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.73,354,1583190000"; d="scan'208,217";a="448208349" Received: from sympa.inria.fr ([193.51.193.213]) by mail2-relais-roc.national.inria.fr with ESMTP; 05 May 2020 09:45:51 +0200 Received: by sympa.inria.fr (Postfix, from userid 20132) id C67777F492; Tue, 5 May 2020 09:45:51 +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 017457EC77 for ; Tue, 5 May 2020 09:45:47 +0200 (CEST) Authentication-Results: mail2-smtp-roc.national.inria.fr; spf=Pass smtp.pra=alan.schmitt@polytechnique.org; spf=Pass smtp.mailfrom=SRS0=X8I6=6T=polytechnique.org=alan.schmitt@bounces.m4x.org; spf=Pass smtp.helo=postmaster@mx1.polytechnique.org IronPort-PHdr: =?us-ascii?q?9a23=3AY+pYVhxBQaseadzXCy+O+j09IxM/srCxBDY+r6Qd?= =?us-ascii?q?0ukQKvad9pjvdHbS+e9qxAeQG9mCtrQb1qGP6vGocFdDyK7JiGoFfp1IWk1Nou?= =?us-ascii?q?QttCtkPvS4D1bmJuXhdS0wEZcKflZk+3amLRodQ56mNBXdrXKo8DEdBAj0OxZr?= =?us-ascii?q?KeTpAI7SiNm82/yv95HJbAhEmTqwbalwIRi2ogndq9QajI9/Iast1xXFpWdFdf?= =?us-ascii?q?5Lzm1yP1KTmBj85sa0/JF99ilbpuws+c1dX6jkZqo0VbNXAigoPGAz/83rqALM?= =?us-ascii?q?TRCT6XsGU2UZiQRHDg7Y5xznRJjxsy/6tu1g2CmGOMD9UL45VSi+46ptVRTnjz?= =?us-ascii?q?oJNyMi8GHPlMN/kL5brhympxx62YHUYYeVP+d6cq7Sed4WQGxMUsZSWSxHHIO8?= =?us-ascii?q?bpAPD+saMuZcsYb2ulUPrRykBQaxH+Pk1ztEi3Hq0aE/1ekqDAPI0xE6H98WsH?= =?us-ascii?q?rassj7OqkRX++60KbF1i/MY+9M1Drn9ITEbhIsrPeRVrxwa8rRzkwvGhvZg1WU?= =?us-ascii?q?s4PlOS6e2PkRvGib6upgVP6vi3I6oAx2uDevwt0jio/TioIO1l/E9SB5wIcpJd?= =?us-ascii?q?2kU0N7edmkEJ9QtiGGKYR5XsMiQ2dpuCYj170Jp4S3fC8QyJQo3hPSbeGMfIeU?= =?us-ascii?q?7Bz5TumRPSt4i2x/eLK5nxu8/0ytxOLzWMS231tHrS5In8TDu30TyRDe98aKRP?= =?us-ascii?q?R+80qv1zuC2Rze5+NELE03kafVK54vz78+mJcRsUrNHiD7lUPrh6GYcUUk//Kn?= =?us-ascii?q?6+XhYrj+vp+TKZN0igDiMqswgsy/BuE4Mg0QUGSB/+SzyqHj8VX+QLpWlPI2l6?= =?us-ascii?q?3ZvIrdJcQBqa61GwBV0oc/6xa/Ejepy84UkmUALFJAYB6HgInpO03OIPDlFviz?= =?us-ascii?q?mVWskDBzy/DBIrLuGJDNLnzanLj6erZ97E1cxBAvwtBY4pJYErABIPTpWk/wrt?= =?us-ascii?q?PUFBE5Mxasz+bmDtV9zIIeVniVDqODPqPSq0eE6f4oI+mWYo8apjL9K/w/6/Hw?= =?us-ascii?q?kHA5hEcRcrKo3ZsLc3+4A+hpI0aHbnrwmNsBFn0KvgUmQOP0kl2CSyRcZ2qzX6?= =?us-ascii?q?Il+zE0FpiqApvDRoy1gbyOwSe6HplSZmxcDVCMC3joeoOZUPkPcCKfOtJtniIA?= =?us-ascii?q?WLS7VoMtyR6juBX0xrZ7NObZ9CIVuYrh2dV2/eHfix4/+SJuA8iA3GyBVXx4k2?= =?us-ascii?q?wUSzIwwatxu1Zyyk2Z3qh9m/FYFcJc5/dOUgoiMJ7dwPF2B8rqWgLGeteISEqm?= =?us-ascii?q?Tcu6DjExSNIxwsYOY1tjFNm4iRDDxSWqD6cUl7yNGpM07rrR02XvK8t50XrKyb?= =?us-ascii?q?UtglY8TsZBKWGqnKBy+gfLC47MiUqZlqKqdaoG3C7K8WeO1XeAsl1FXgJsSajK?= =?us-ascii?q?XHMSaEjXoNnh507MUaejCawgMgtFyc+CNrVFZcHpjVVARffjIcnebHyrl2e3Hx?= =?us-ascii?q?aIyauBY5Due2oH2iXRElMEnBwT/XaDNAg+GjuhrnnFAzxpCFLvZV/j/vdlqH+h?= =?us-ascii?q?S085wA6LY1dm17qv9R4ZneacRO8L3rIYpCchrC15E0qn0NLTD9qMvg5hfKRHYd?= =?us-ascii?q?Mh+1pHzmLYtwllPpO6Naxih1gecx52v0z0zRl3BJ9AwoAWqyZgyBV0Y+rM1ExH?= =?us-ascii?q?XzeH29b2N6GBbiG49w+pIeaejlrB1v6S+7wT87I5p0TnuEeuDEV0tz1s2txRln?= =?us-ascii?q?+d/YniDQwIUJu3XFxzvxN9oqnyZigm+5iS0mdmMLW9tjHFy5QkGbgL0BGlKv5b?= =?us-ascii?q?OaXMLwTyFswGG4D6IegjnR6yZRIBPfxO3LYzO9K6evCG3q+yIesmmyip2zcUqL?= =?us-ascii?q?th216BonIvAtXD2IwIlq7Jh1fVZ3LHlF6k9/vPt8VcfzhLTzinziz1GINaZqtz?= =?us-ascii?q?ZJsGT2C0LJ/un4Qst9vWQ3ddsWWbKRYD0c6tdwCVagWijwdXyEIcrGfhnHeoiT?= =?us-ascii?q?tunGNw9/fN7Gn12+3nMSE/FCtLSW1l1wy+JJjtycgdWFm0YgMpkhq8+Eu8wLJU?= =?us-ascii?q?9v1y?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0CeAgCqGLFehyIeaIFmg3VYPgFcVTIqh?= =?us-ascii?q?COBXYckhX6FHwKFL5E4gRADAk4PAQMBDBgBBQ4BAgQBAYFQgT5xQQICAheCHx0?= =?us-ascii?q?GAQUzEwIQAQEFAQEBAgECAwQBEwEBAQoLCQgphTEGJgyCOwwMAwODHQMBIQQGQ?= =?us-ascii?q?CUjAxQBBgMCBA0BFwEUChcBEhQGglY2AYJ8BAEKlxebeX8zhDkBAwQPAQ4JhFi?= =?us-ascii?q?BQA0CE38XhSyDHYNVJg+BTD+BEYISUGyBQYENDgsBAQEBAYEoGAEBVoJcF4JJB?= =?us-ascii?q?I5IgQ2QZ4IPkAYHgkt/BIYgdYl+U4VKglszWYdVhHuMaSGPdocqdAmBLYVUiXi?= =?us-ascii?q?EJIE/KlhvHgwHMxowQ4I1AQEyCV8NVo0yg2ABCIIbKGpUgSaBdTuFFDA/MwIBA?= =?us-ascii?q?QcsAgYBBwEBAwl1AQEFEwsBkE9cAQE?= X-IPAS-Result: =?us-ascii?q?A0CeAgCqGLFehyIeaIFmg3VYPgFcVTIqhCOBXYckhX6FHwK?= =?us-ascii?q?FL5E4gRADAk4PAQMBDBgBBQ4BAgQBAYFQgT5xQQICAheCHx0GAQUzEwIQAQEFA?= =?us-ascii?q?QEBAgECAwQBEwEBAQoLCQgphTEGJgyCOwwMAwODHQMBIQQGQCUjAxQBBgMCBA0?= =?us-ascii?q?BFwEUChcBEhQGglY2AYJ8BAEKlxebeX8zhDkBAwQPAQ4JhFiBQA0CE38XhSyDH?= =?us-ascii?q?YNVJg+BTD+BEYISUGyBQYENDgsBAQEBAYEoGAEBVoJcF4JJBI5IgQ2QZ4IPkAY?= =?us-ascii?q?Hgkt/BIYgdYl+U4VKglszWYdVhHuMaSGPdocqdAmBLYVUiXiEJIE/KlhvHgwHM?= =?us-ascii?q?xowQ4I1AQEyCV8NVo0yg2ABCIIbKGpUgSaBdTuFFDA/MwIBAQcsAgYBBwEBAwl?= =?us-ascii?q?1AQEFEwsBkE9cAQE?= X-IronPort-AV: E=Sophos;i="5.73,354,1583190000"; d="scan'208,217";a="448208304" X-MGA-submission: =?us-ascii?q?MDFUpPpTFQULVlcMogY/N7jIn/rlEJmcK8qzAb?= =?us-ascii?q?e1dGYC3MK7k14Ut5QdVK6adw6RiX0Fi1vSH22ILwr7PhDUcS0buQCWSJ?= =?us-ascii?q?xFle0Tu+9vzCXFQ2XxxiGSDUdcvodeVFV7Wwpio39wLv+wx9x9nQ9s98?= =?us-ascii?q?SK8dZSlKIiZaqBHw3uQt9Z8w=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; 05 May 2020 09:45:46 +0200 Received: from set (cbg35-2-78-242-14-140.fbx.proxad.net [78.242.14.140]) (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 16BA6561292; Tue, 5 May 2020 09:45:42 +0200 (CEST) From: Alan Schmitt To: "lwn" , "cwn" , caml-list@inria.fr, comp@lists.orbitalfox.eu Date: Tue, 05 May 2020 09:45:41 +0200 Message-ID: <87368eddui.fsf@m4x.org> MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="=-=-=" X-AV-Checked: ClamAV using ClamSMTP at svoboda.polytechnique.org (Tue May 5 09:45:42 2020 +0200 (CEST)) X-Spam-Flag: No, tests=bogofilter, spamicity=0.030086, queueID=CF38D561296 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: 18128 Errors-to: caml-list-owner@inria.fr Precedence: list Precedence: bulk Sender: caml-list-request@inria.fr X-no-archive: yes List-Id: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: base64 SGVsbG8NCg0KSGVyZSBpcyB0aGUgbGF0ZXN0IE9DYW1sIFdlZWtseSBOZXdzLCBmb3IgdGhlIHdl ZWsgb2YgQXByaWwgMjggdG8gTWF5DQowNSwgMjAyMC4NCg0KVGFibGUgb2YgQ29udGVudHMNCuKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQpMd3Qg bm93IGhhcyBsZXQqIHN5bnRheA0KSk9TRSAwLjMuMCAtIE5vdyB3aXRoIDEwMCUgbW9yZSBlbmNy eXB0aW9uDQpBcmUgdGhlcmUgbGVhcm5pbmcgbWF0ZXJpYWxzIGZvciBPQ2FtbCBmb3IgdGhvc2Ug d2l0aCBubyBwcm9ncmFtbWluZyBleHBlcmllbmNlPw0KVGhlIHJlY2VudCBldm9sdXRpb24gb2Yg dXRvcCwgbGFtYmRhLXRlcm0sIHplZCBhbmQgdW5kZXJuZWF0aCBwcm9qZWN0cw0KTG9va2luZyBm b3IgImxvdmVseSwgaWRpb21hdGljIiBleGFtcGxlcyBvZiBPY2FtbCB1c2VkIGZvciBzaGVsbC1z Y3JpcHRpbmcgaW4gdGhlIG1hbm5lciBvZiBQZXJsL1B5dGhvbiAoYnV0IGVzcC4gUGVybCkNCk9s ZCBDV04NCg0KDQpMd3Qgbm93IGhhcyBsZXQqIHN5bnRheA0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJj aGl2ZTogW2h0dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9sd3Qtbm93LWhhcy1sZXQtc3ludGF4 LzU2NTEvMV0NCg0KDQpBbnRvbiBCYWNoaW4gYW5ub3VuY2VkDQrilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICBbTHd0 XSBub3cgaGFzIGBsZXQqJyBhbmQgYGxldCsnIHN5bnRheCwgd2hpY2ggY2FuIGJlIHVzZWQgbGlr ZSB0aGlzOg0KDQogIOKUjOKUgOKUgOKUgOKUgA0KICDilIIgb3BlbiBMd3QuU3ludGF4DQogIOKU giANCiAg4pSCIGxldCAoKSA9DQogIOKUgiAgIGxldCByZXF1ZXN0ID0NCiAg4pSCICAgICBsZXQq IGFkZHJlc3NlcyA9IEx3dF91bml4LmdldGFkZHJpbmZvICJnb29nbGUuY29tIiAiODAiIFtdIGlu DQogIOKUgiAgICAgbGV0IGdvb2dsZSA9IEx3dF91bml4LigoTGlzdC5oZCBhZGRyZXNzZXMpLmFp X2FkZHIpIGluDQogIOKUgiANCiAg4pSCICAgICBMd3RfaW8uKHdpdGhfY29ubmVjdGlvbiBnb29n bGUgKGZ1biAoaW5jb21pbmcsIG91dGdvaW5nKSAtPg0KICDilIIgICAgICAgbGV0KiAoKSA9IHdy aXRlIG91dGdvaW5nICJHRVQgLyBIVFRQLzEuMVxyXG4iIGluDQogIOKUgiAgICAgICBsZXQqICgp ID0gd3JpdGUgb3V0Z29pbmcgIkNvbm5lY3Rpb246IGNsb3NlXHJcblxyXG4iIGluDQogIOKUgiAg ICAgICBsZXQqIHJlc3BvbnNlID0gcmVhZCBpbmNvbWluZyBpbg0KICDilIIgICAgICAgTHd0LnJl dHVybiAoU29tZSByZXNwb25zZSkpKQ0KICDilIIgICBpbg0KICDilIIgDQogIOKUgiAgIGxldCB0 aW1lb3V0ID0NCiAg4pSCICAgICBsZXQqICgpID0gTHd0X3VuaXguc2xlZXAgNS4gaW4NCiAg4pSC ICAgICBMd3QucmV0dXJuIE5vbmUNCiAg4pSCICAgaW4NCiAg4pSCIA0KICDilIIgICBtYXRjaCBM d3RfbWFpbi5ydW4gKEx3dC5waWNrIFtyZXF1ZXN0OyB0aW1lb3V0XSkgd2l0aA0KICDilIIgICB8 IFNvbWUgcmVzcG9uc2UgLT4gcHJpbnRfc3RyaW5nIHJlc3BvbnNlDQogIOKUgiAgIHwgTm9uZSAt PiBwcmVycl9lbmRsaW5lICJSZXF1ZXN0IHRpbWVkIG91dCI7IGV4aXQgMQ0KICDilJTilIDilIDi lIDilIANCg0KICBUaGlzIGlzIG5vdyByZWxlYXNlZCBpbiBMd3QgWzUuMy4wXS4gVGhhbmtzIHRv IFJhaHVsIEt1bWFyIGZvciBhZGRpbmcNCiAgYGxldConLCBhbmQgQENyYWlnRmUgZm9yIGFkZGlu ZyBgbGV0KychDQoNCg0KW0x3dF0gaHR0cHM6Ly9naXRodWIuY29tL29jc2lnZW4vbHd0DQoNCls1 LjMuMF0gaHR0cHM6Ly9naXRodWIuY29tL29jc2lnZW4vbHd0L3JlbGVhc2VzL3RhZy81LjMuMA0K DQoNClRob21hcyBDb29wbWFuIGFza2VkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICBBd2Vzb21lIHRoaXMgbG9va3MgZ3Jl YXQuDQoNCiAgMiBxdWljayBxdWVzdGlvbnM6DQoNCiAgMS4gSSBkb24ndCBzZWUgdGhpcyBuZXcg dmVyc2lvbiBkb2N1bWVudGVkIG9uIG9jc2lnZW4geWV0PyBJcyB0aGF0IGENCiAgICAgYnVpbGQg dGhhdCBuZWVkcyB0byBiZSBkb25lIG1hbnVhbGx5Pw0KICAyLiBJcyBgcHB4X2x3dCcgc3RpbGwg cmVjb21tZW5kIGZvciBzb21lIHVzZWNhc2VzIGxpa2UgYHRyeSUnPyBGb3INCiAgICAgd2hhdCBj YXNlcyBpcyBvbmUgcHJlZmVycmVkIG92ZXIgdGhlIG90aGVyPw0KDQoNCkFudG9uIEJhY2hpbiBy ZXBsaWVkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIANCg0KICBHb29kIHF1ZXN0aW9ucyA6c2xpZ2h0X3NtaWxlOg0KDQogIDEuIFRo ZSBkb2NzIGdlbmVyYXRpb24gaXMgYmxvY2tlZCBvbiBhbiBPY3NpZ2VuICJpbnRlcm5hbCIgcGFj a2FnZQ0KICAgICBgd2lraWRvYycsIHdoaWNoIGhhcyBub3QgYmVlbiB1cGRhdGVkIHRvIHN1cHBv cnQgNC4wOC4gU28sDQogICAgIGVmZmVjdGl2ZWx5LCBgbGV0KicgaXMgZXhhY3RseSB3aGF0IGlz IHByZXZlbnRpbmcgZG9jcyBnZW5lcmF0aW9uDQogICAgIGZvciB0aGUgdGltZSBiZWluZy4gSSds bCBwb3N0IHRoZSBkb2NzIGFzIHNvb24gYXMgdGhhdCBpcyBmaXhlZC4NCiAgMi4gYHBweF9sd3Qn IGlzIHByb2JhYmx5IHN0aWxsIHRoZSByZWNvbW1lbmRlZCB3YXksIGJlY2F1c2Ugb2YgYmV0dGVy DQogICAgIGJhY2t0cmFjZXMsIGFuZCB0aGluZ3MgbGlrZSBgdHJ5JWx3dCcuIGBsZXQqJyBpcyBu aWNlIGZvciBwZW9wbGUNCiAgICAgdGhhdCBkb24ndCB3YW50IHRvIHVzZSB0aGUgUFBYLiBUaGV5 IGNhbiBzdGlsbCBiZW5lZml0IGZyb20gYQ0KICAgICBtb25hZGljIHN5bnRheC4NCg0KDQpKT1NF IDAuMy4wIC0gTm93IHdpdGggMTAwJSBtb3JlIGVuY3J5cHRpb24NCuKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQog IEFyY2hpdmU6DQogIFtodHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3QvYW5uLWpvc2UtMC0zLTAt bm93LXdpdGgtMTAwLW1vcmUtZW5jcnlwdGlvbi81NjY3LzFdDQoNCg0KVWxyaWsgU3RyaWQgYW5u b3VuY2VkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIANCg0KICBJIHJlY2VudGx5IHJlbGVhc2VkIGEgdmVyc2lvbiAwLjMuMCBv ZiBKT1NFLg0KDQogIFtodHRwczovL2dpdGh1Yi5jb20vdWxyaWtzdHJpZC9yZWFzb24tam9zZV0N CiAgW2h0dHBzOi8vdWxyaWtzdHJpZC5naXRodWIuaW8vcmVhc29uLWpvc2VdDQoNCiAgSXQgbm93 IGluY2x1ZGVzIHNvbWUgb2YgdGhlIEpXRSAoSlNPTiBXZWIgRW5jcnlwdGlvbikgc3BlYy4gQSBo dWdlDQogIHRoYW5rIHlvdSBnb2VzIG91dCB0byBAaGFubmVzIGZvciBoZWxwaW5nIG1lIGltcGxl bWVudGluZyBvbmUgb2YgdGhlDQogIGduYXJsaWVyIGNvbWJpbmF0aW9ucyBvZiBkZWNyeXB0aW9u IHRoYXQgSSBjb3VsZCB0aGVuIHVzZSBhcyBhIGJhc2UNCiAgZm9yIGVuY3J5cHRpb24gYW5kIG1v cmUgYGFsZycgYW5kIGBlbmMnLg0KDQogIEkgYWxzbyByZWZhY3RvcmVkIHRoZSBKV0sgKEpTT04g V2ViIEtleXMpIGltcGxlbWVudGF0aW9uIHRvIHVuaWZ5IGFuZA0KICBzaW1wbGlmeSB0aGUgcmVw cmVzZW50YXRpb24uIEl0IGlzIG5vdyBwb3NzaWJsZSB0byB1c2UgYSBwcml2YXRlIGtleQ0KICBm b3IgYW55dGhpbmcgYSBwdWJsaWMga2V5IGNhbiBkbyBzaW5jZSBpdCdzIGEgc3VwZXJzZXQuDQoN CiAgQSBzcGVjaWFsIHRoYW5rcyB0byBAYW5tb250ZWlybyBmb3IgaGVscGluZyBtZSB3aXRoIHRo ZSBkZXNpZ24gYW5kDQogIHJldmlld2luZyBteSBjb2RlLg0KDQoNCkFyZSB0aGVyZSBsZWFybmlu ZyBtYXRlcmlhbHMgZm9yIE9DYW1sIGZvciB0aG9zZSB3aXRoIG5vIHByb2dyYW1taW5nIGV4cGVy aWVuY2U/DQrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOg0KICBbaHR0cHM6Ly9kaXNjdXNzLm9j YW1sLm9yZy90L2FyZS10aGVyZS1sZWFybmluZy1tYXRlcmlhbHMtZm9yLW9jYW1sLWZvci10aG9z ZS13aXRoLW5vLXByb2dyYW1taW5nLWV4cGVyaWVuY2UvNTY4NC8xXQ0KDQoNCkFhcm9uIENocmlz dGlhbnNvbiBhc2tlZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgT0NhbWwgaXMgYSBsYW5ndWFnZSB3 aXRoIHNvbWUgYWR2YW5jZWQgZmVhdHVyZXMsIGJ1dCBhIHZlcnkgZ2VudGxlDQogIGxlYXJuaW5n IGN1cnZlLiBJdCBzZWVtcyBsaWtlIGl0IHdvdWxkIGJlIHdlbGwtc3VpdGVkIHRvIHRlYWNoaW5n DQogIGJlZ2lubmVycyB0byBwcm9ncmFtIChhIGZldyB0cmlja3kgZXJyb3IgbWVzc2FnZXMgbm90 d2l0aHN0YW5kaW5nKSwNCiAgYnV0IEkgaGF2ZW4ndCBzZWVuIG1hbnkgcmVzb3VyY2VzIHRhcmdl dGVkIGF0IHRlYWNoaW5nIHByb2dyYW1taW5nDQogIGZyb20gc2NyYXRjaC4gRG9lcyBhbnlvbmUg aGVyZSBrbm93IGFueT8NCg0KDQpEYW5pZWwgQsO8bnpsaSByZXBsaWVkDQrilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICBU aGVyZSBpcyBbKk9DYW1sIGZyb20gdGhlIFZlcnkgQmVnaW5uaW5nKl0gd3JpdHRlbiBieSBASm9o bldoaXRpbmd0b24uDQoNCg0KWypPQ2FtbCBmcm9tIHRoZSBWZXJ5IEJlZ2lubmluZypdIGh0dHA6 Ly9vY2FtbC1ib29rLmNvbS8NCg0KDQpOaWNvbMOhcyBPamVkYSBCw6RyIGFsc28gcmVwbGllZA0K 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgQW4gZXhjZWxsZW50IChmcmVl KSBib29rIGlzICJMRSBMQU5HQUdFIENBTUwiDQogIFtodHRwczovL2NhbWwuaW5yaWEuZnIvcHVi L2Rpc3RyaWIvYm9va3MvbGxjLnBkZl0uDQoNCg0KUGllcnJlIGFsc28gcmVwbGllZA0K4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAg VGhlcmUncyBhbHNvIFtDUzMxMTBdIGZyb20gQ29ybmVsbCBVbml2ZXJzaXR5LiBIZXJlJ3MgW3Ro ZQ0KICB0ZXh0Ym9va10uIEl0J3MgcHJldHR5IGdyZWF0IQ0KDQoNCltDUzMxMTBdIGh0dHBzOi8v d3d3LmNzLmNvcm5lbGwuZWR1L2NvdXJzZXMvY3MzMTEwLzIwMjBzcC8NCg0KW3RoZSB0ZXh0Ym9v a10NCmh0dHBzOi8vd3d3LmNzLmNvcm5lbGwuZWR1L2NvdXJzZXMvY3MzMTEwLzIwMTlzcC90ZXh0 Ym9vay8NCg0KDQpUaGUgcmVjZW50IGV2b2x1dGlvbiBvZiB1dG9wLCBsYW1iZGEtdGVybSwgemVk IGFuZCB1bmRlcm5lYXRoIHByb2plY3RzDQrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZANCg0KICBBcmNoaXZlOg0KICBbaHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90L3Ro ZS1yZWNlbnQtZXZvbHV0aW9uLW9mLXV0b3AtbGFtYmRhLXRlcm0temVkLWFuZC11bmRlcm5lYXRo LXByb2plY3RzLzU2ODcvMV0NCg0KDQpaQU4gRG9ZZSBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIEhpLCBkZWFyIE9D YW1sIGd1eXMhIFdlJ3ZlIGJlZW4ga2VlcGluZyBxdWlldCBmb3IgbW9yZSB0aGFuIG9uZSB5ZWFy DQogIHRob3VnaCB1dG9wLCBsYW1iZGEtdGVybSwgemVkIGFuZCBzb21lIHJlbGF0ZWQgcHJvamVj dHMgd2VyZSBzdGlsbA0KICBldm9sdmluZyBkdXJpbmcgdGhlIHBlcmlvZCBvZiB0aW1lLiBUaGlz IGlzIGJlY2F1c2Ugb2YgdHdvIHJlYXNvbnM6DQoNCiAgMS4gVGhlIG5ldyBmZWF0dXJlIGhhZCBu b3RoaW5nIHRvIGRvIHdpdGggdGhlIGZpZWxkcyB3aGVyZSBtb3N0IE9DYW1sDQogICAgIGRldmVs b3BlcnMgYXJlIHdvcmtpbmcgb246DQoNCiAgICAgW2h0dHBzOi8vYXdzMS5kaXNjb3Vyc2UtY2Ru LmNvbS9zdGFuZGFyZDExL3VwbG9hZHMvb2NhbWwvb3JpZ2luYWwvMlgvYS9hMzBkNWZiNmZjMDc1 YTUwODAxYjM4NzI5OWNjODIwOTY1ZDQ4Y2EwLnBuZ10NCg0KICAgICBbaHR0cHM6Ly9hd3MxLmRp c2NvdXJzZS1jZG4uY29tL3N0YW5kYXJkMTEvdXBsb2Fkcy9vY2FtbC9vcmlnaW5hbC8yWC85Lzkx Yjg4ZjBjNDkyNzAyMjEyZjAwZjE3YWYxYmYwZTE4ZWUxYTQ2M2IucG5nXQ0KDQogICAgIFJlY29n bml6aW5nLCBlZGl0aW5nLCBmdXp6eSBzZWFyY2hpbmcgZm9yIENoYXJhY3Rlcg0KICAgICBWYXJp YXRpb24obWFpbmx5IGZvciBhbmNpZW50IENKSyBjaGFyYWN0ZXJzKS4NCg0KICAgICBOZXZlcnRo ZWxlc3MsIHRoZSBuZXcgZmVhdHVyZSBicm91Z2h0IHVzIGEgZ29vZCBzaWRlIGVmZmVjdCDigJMg dGhlDQogICAgIGxvbmctZXhpc3RpbmcgW0lzc3VlIHdpdGggYXNpYW4gY2hhcnNldF0gd2FzIHJl c29sdmVkLiBVVG9wIHVzZXJzDQogICAgIHdpbGwgbm90aWNlIHRoZSByZWZpbmVtZW50IG5hdHVy YWxseSwgc28gbm8gYW5ub3VuY2VtZW50IHdhcw0KICAgICBuZWVkZWQuDQoNCiAgMi4gSSBkaWRu J3QgZGVlbSB0aGUgZmlyc3QgZmV3IG5ldyBlZGl0aW9ucyBvZiB6ZWQgMiBhbmQgbGFtYmRhLXRl cm0gMg0KICAgICBzdGFibGUgZW5vdWdoLg0KDQoNCltJc3N1ZSB3aXRoIGFzaWFuIGNoYXJzZXRd DQpodHRwczovL2dpdGh1Yi5jb20vb2NhbWwtY29tbXVuaXR5L2xhbWJkYS10ZXJtL2lzc3Vlcy8y DQoNCjMuMCBlcmENCuKVjOKVjOKVjOKVjOKVjOKVjOKVjA0KDQogIFRoaXMgdGltZSwgd2UgYXJl IGVudGVyaW5nIHplZCAzLCBsYW1iZGEtdGVybSAzIGVyYS4gVGhlIGZlYXR1cmVzDQogIGludHJv ZHVjZWQgc2luY2UgemVkIDIsIGxhbWJkYS10ZXJtIDIgYXJlIHF1aXRlIHN0YWJsZSBub3cgYW5k IHRoZSBuZXcNCiAgZmVhdHVyZSBjb21pbmcgdG8gdXMgd2lsbCBoYXZlIGEgYml0IG1vcmUgaW1w YWN0LCBlc3BlY2lhbGx5IHRvIHZpbQ0KICB1c2Vycy4gU28gaXQncyB3b3J0aHdoaWxlIHRvIGRy YWZ0IGFuIGFubm91bmNlbWVudDoNCg0KDQril4ogVkkgRWRpdGluZyBNb2RlDQoNCiAgW2h0dHBz Oi8vYXdzMS5kaXNjb3Vyc2UtY2RuLmNvbS9zdGFuZGFyZDExL3VwbG9hZHMvb2NhbWwvb3JpZ2lu YWwvMlgvYy9jYTExOTI0MDQ2OTc3ZDg5ZDQzNDVhZDEzNTk3N2M2OTYwNDcwZWRjLmdpZl0NCg0K ICBPQ2FtbCBndXlzLCBob3BlIHlvdSBlbmpveSB0aGlzLg0KDQoNCkxpc3Qgb2Ygbm90YWJsZSBj aGFuZ2VzOg0K4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM 4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWMDQoNCiAg4oCiIHplZCAyOg0KICAgIOKAoiB3aWRlLCBj b21iaW5lZCBnbHlwaChDaGFyYWN0ZXIgVmFyaWF0aW9uLCBJUEEsIENKSyDigKYpDQogICAg4oCi IGFkZCB3YW50ZWRfY29sdW1uIHN1cHBvcnQgZm9yIHdpZGUgd2lkdGggY2hhcmFjdGVyDQoNCiAg 4oCiIGxhbWJkYS10ZXJtIDI6DQogICAg4oCiIHdpZGUsIGNvbWJpbmVkIGdseXBoKENoYXJhY3Rl ciBWYXJpYXRpb24sIElQQSwgQ0pLIOKApikNCiAgICDigKIgYWRkIGhvcml6b250YWwgc2Nyb2xs aW5nIHN1cHBvcnQgZm9yIHdpZGUgd2lkdGggY2hhcmFjdGVyDQoNCiAg4oCiIHplZCAzOg0KICAg IOKAoiBhZGQgbmV3IGFjdGlvbnMgZm9yIGNvbnZlbmllbmNlDQoNCiAg4oCiIGxhbWJkYS10ZXJt IDM6DQogICAg4oCiIGBMVGVybV9yZWFkX2xpbmUnOiBhZGQgaW5pdGlhbCBzdXBwb3J0IGZvciB2 aSBlZGl0aW5nIG1vZGU6DQogICAg4oCiIG1vdGlvbnM6DQogICAgICDigKIgaCBsIDAgXiAkDQog ICAgICDigKIgaiBrIGdnIEcNCiAgICAgIOKAoiB3IFcgZSBFIGIgQiBnZSBnRQ0KICAgICAg4oCi IGYgRiB0IFQNCiAgICAgIOKAoiBhdyBpdyBhVyBpVw0KICAgICAg4oCiIGluY2x1ZGUgb3IgaW5u ZXIgKCApLCBbIF0sIHsgfSwgPCA+LCAnIGFuZCAiDQogICAgICDigKIgZ2VuZXJpYyBxdW90ZTog YXE/IGlxPyB3aGVyZSA/IGNvdWxkIGJlIGFueSBjaGFyYWN0ZXINCiAgICAgIOKAoiBicmFja2V0 IG1hdGNoaW5nOiBqdW1wIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gbWF0Y2hlZCBicmFja2V0cw0K ICAgIOKAoiBkZWxldGUsIGNoYW5nZSwgeWFuayB3aXRoIG1vdGlvbnMNCiAgICDigKIgcGFzdGU6 IHAgUA0KICAgIOKAoiBsaW5lIGpvaW5pbmc6IEoNCg0KICBmb3IgYSBmdWxsIGxpc3Qgb2YgdGhl IGNoYW5nZXMsIHBsZWFzZSB2aXNpdCB0aGUgaG9tZXBhZ2VzIG9mIGVhY2gNCiAgcHJvamVjdC4N Cg0KDQpQcm9qZWN0cyB1bmRlcm5lYXRoOg0K4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM 4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWMDQoNCiAg4oCiIFtjaGFySW5mb193aWR0aF06 IERldGVybWluZSBjb2x1bW4gd2lkdGggZm9yIGEgY2hhcmFjdGVyDQogIOKAoiBbbWV3XSAmIFtt ZXdfdmldOiBNb2RhbCBlZGl0aW5nIHdpdGNoICYgSXRzIFZJIGludGVycHJldGVyDQogICAgY29t cGxlbWVudC4gSW4gYSB3b3JkLCBtb2RhbCBlZGl0aW5nIGVuZ2luZSBnZW5lcmF0b3JzLg0KDQoN CltjaGFySW5mb193aWR0aF0gaHR0cHM6Ly9iaXRidWNrZXQub3JnL3phbmRveWUvY2hhcmluZm9f d2lkdGgvDQoNClttZXddIGh0dHBzOi8vZ2l0aHViLmNvbS9rYW5kdS9tZXcNCg0KW21ld192aV0g aHR0cHM6Ly9naXRodWIuY29tL2thbmR1L21ld192aQ0KDQoNCldoYXQncyBuZXh0DQrilYzilYzi lYzilYzilYzilYzilYzilYzilYzilYzilYwNCg0K4peKIFZJIEVkaXRpbmcgTW9kZQ0KDQogIDEu IFZpc3VhbCBtb2RlDQoNCiAgICAgW2h0dHBzOi8vYXdzMS5kaXNjb3Vyc2UtY2RuLmNvbS9zdGFu ZGFyZDExL3VwbG9hZHMvb2NhbWwvb3JpZ2luYWwvMlgvNy83Y2M0NTAxMDcxMGFkMjhkOGQxZTg1 OWU5YjI4ODA2NDY5ZWY4MDgwLmdpZl0NCiAgMi4gcmVnaXN0ZXIgc3VwcG9ydCBhbmQgbW9yZSB2 aSBjb21wYXRpYmxlDQoNCg0K4peKIENKS1YNCg0KICBXZSd2ZSByZWNvcmRlZCBtb3JlIHRoZW4g MTAwIHRob3VzYW5kIGVudHJpZXMgYWJvdXQgdGhlIHN0cnVjdHVyZSBvZg0KICBDSksgY2hhcmFj dGVycywgd2hhdCBpcyBhIGNoYXJhY3RlciBjb25zaXN0cyBvZiwgaG93IGFyZSB0aGUNCiAgc3Vi LWFzc2VtYmxpZXMgZ2x1ZSB0b2dldGhlciBldGMuIEFuZCBhcyBhIGNvbXBsZW1lbnQgdG8NCiAg Y2hhckluZm9fd2lkdGgsIHdlIG1heSByZWxlYXNlIGEgbmV3IHByb2plY3QgY2FsbGVkIGNoYXJJ bmZvX3N0cnVjdHVyZQ0KICA7KQ0KDQoNCkxvb2tpbmcgZm9yICJsb3ZlbHksIGlkaW9tYXRpYyIg ZXhhbXBsZXMgb2YgT2NhbWwgdXNlZCBmb3Igc2hlbGwtc2NyaXB0aW5nIGluIHRoZSBtYW5uZXIg b2YgUGVybC9QeXRob24gKGJ1dCBlc3AuIFBlcmwpDQrilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZANCg0KICBBcmNo aXZlOg0KICBbaHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90L2xvb2tpbmctZm9yLWxvdmVseS1p ZGlvbWF0aWMtZXhhbXBsZXMtb2Ytb2NhbWwtdXNlZC1mb3Itc2hlbGwtc2NyaXB0aW5nLWluLXRo ZS1tYW5uZXItb2YtcGVybC1weXRob24tYnV0LWVzcC1wZXJsLzU3MDMvMV0NCg0KDQpDaGV0IE11 cnRoeSBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBwZW9wbGUg d2hvIGhhdmUgd3JpdHRlbiBub250cml2aWFsIE9jYW1sIGNvZGUNCiAgZm9yIHNoZWxsLXNjcmlw dGluZywgdGhhdCB0aGV5IHRoaW5rIGV4ZW1wbGlmaWVzIHRoZSByaWdodCB3YXkgdG8gZG8NCiAg aXQuICBJJ3ZlIGJlZW4gYSBQZXJsIGhhY2tlciBmb3IgMjV5ciwgYW5kIHNvIHdoZW4gSSByZWFj aCBmb3IgT2NhbWwNCiAgdG8gd3JpdGUgc3R1ZmYgdGhhdCBzaG91bGQgYmUgUGVybCBzaGVsbC1z Y3JpcHRzLCBJIGFsd2F5cyBmaW5kIGl0IGENCiAgYml0IHBhaW5mdWwsIGFuZCB0aGVyZSdzIGEg c2lnbmlmaWNhbnQgb3ZlcmhlYWQgdG8gZ2V0dGluZyB0aGUgam9iDQogIGRvbmUuICBTb21lIG9m IHRoYXQgaXMgYXBwbHlpbmcgb2NhbWwgdG8gYSBuZXcgZG9tYWluLCBidXQgc29tZSBvZiBpdA0K ICBpcyB0aGF0IEknbSBqdXN0IG5vdCB1c2luZyB0aGUgcmlnaHQgaWRpb21zIGFuZCB0b29scyAo YW5kIHRoZXJlIGFyZQ0KICBzbyBtYW55IHRvIGNob29zZSBmcm9tKS4NCg0KICBTbyBpZiBhbnli b2R5IGhhcyBnb29kIHBvaW50ZXJzLCBJJ2QgYXBwcmVjaWF0ZSBsZWFybmluZyBhYm91dCB0aGVt Lg0KDQoNCkJpa2FsIExlbQ0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgSGF2ZW4n dCB0cmllZCBpdCBteXNlbGYsIGJ1dCB0aGlzIGxvb2tzIHByb21pc2luZyDigKYNCiAgW2h0dHBz Oi8vZ2l0aHViLmNvbS9qYW5lc3RyZWV0L3NoZXhwXS4NCg0KICBBdCBsZWFzdCBpdCBoYXMgdGhl IGdyZWF0IFNlYW4gQ29ubmVyeSBpbiBpdHMgUkVBRE1FIHNvIHBvc3NpYmx5IHdvcnRoDQogIGRl bHZpbmcgYSBiaXQuIDopDQoNCg0KSGV6ZWtpYWggQ2FydHkNCuKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIFtib3NdIHNlZW1zIGxpa2UgaXQgY2FuIGRvIGEg bG90IG9mIHdoYXQgeW91J3JlIGxvb2tpbmcgZm9yLiBJdCdzIGF0DQogIGxlYXN0IHdvcnRoIHRh a2luZyBhIGxvb2ssIHRob3VnaCBpdCBtYXkgbm90IGJlIGF0IFBlcmwgbGV2ZWxzIG9mDQogIGNv bmNpc2UgZm9yIHRoaXMga2luZCBvZiB0YXNrLg0KDQoNCltib3NdIGh0dHBzOi8vZXJyYXRpcXVl LmNoL3NvZnR3YXJlL2Jvcw0KDQoNCk1hcnRpbiBKYW1ib24NCuKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIEkgdHJpZWQgdG8gc3VtbWFyaXplIG15IHRha2Ugb24g dGhlIHN1YmplY3QgaW50byB0aGlzIGdpc3Q6DQogIFtodHRwczovL2dpc3QuZ2l0aHViLmNvbS9t amFtYm9uL2JiMDdiMjRmODlmYTYwYzk3MzczNTMwN2NlOWM2Y2I5XQ0KDQogIEknbSBub3QgYXdh cmUgb2YgdGhlIGV4aXN0ZW5jZSBvZiBzdWNoIHRvb2wsIGJ1dCB0aGlzIGlzIGhvdyBJIG1pZ2h0 DQogIGRlc2lnbiBpdC4gVGhpcyBzaG91bGQgYmUgcmVtaW5pc2NlbnQgb2YgY2FtbHA0J3MgcXVv dGF0aW9uIGFuZA0KICBhbnRpLXF1b3RhdGlvbiBzeXN0ZW0sIHdoaWNoIGFsbG93cyBhbHRlcm5h dGluZyBiZXR3ZWVuIHR3byBzeW50YXhlcw0KICB3aXRoaW4gYSBzb3VyY2UgZmlsZS4NCg0KDQpP bGQgQ1dODQrilZDilZDilZDilZDilZDilZDilZANCg0KICBJZiB5b3UgaGFwcGVuIHRvIG1pc3Mg YSBDV04sIHlvdSBjYW4gW3NlbmQgbWUgYSBtZXNzYWdlXSBhbmQgSSdsbCBtYWlsDQogIGl0IHRv IHlvdSwgb3IgZ28gdGFrZSBhIGxvb2sgYXQgW3RoZSBhcmNoaXZlXSBvciB0aGUgW1JTUyBmZWVk IG9mIHRoZQ0KICBhcmNoaXZlc10uDQoNCiAgSWYgeW91IGFsc28gd2lzaCB0byByZWNlaXZlIGl0 IGV2ZXJ5IHdlZWsgYnkgbWFpbCwgeW91IG1heSBzdWJzY3JpYmUNCiAgW29ubGluZV0uDQoNCiAg W0FsYW4gU2NobWl0dF0NCg0KDQpbc2VuZCBtZSBhIG1lc3NhZ2VdIG1haWx0bzphbGFuLnNjaG1p dHRAcG9seXRlY2huaXF1ZS5vcmcNCg0KW3RoZSBhcmNoaXZlXSBodHRwOi8vYWxhbi5wZXRpdGVw b21tZS5uZXQvY3duLw0KDQpbUlNTIGZlZWQgb2YgdGhlIGFyY2hpdmVzXSBodHRwOi8vYWxhbi5w ZXRpdGVwb21tZS5uZXQvY3duL2N3bi5yc3MNCg0KW29ubGluZV0gaHR0cDovL2xpc3RzLmlkeWxs Lm9yZy9saXN0aW5mby9jYW1sLW5ld3Mtd2Vla2x5Lw0KDQpbQWxhbiBTY2htaXR0XSBodHRwOi8v YWxhbi5wZXRpdGVwb21tZS5uZXQvDQoNCg== --=-=-= Content-Type: text/html; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable OCaml Weekly News

OCaml Weekly News

Previous Week Up Next Week

Hello

Here is the latest OCaml Weekly News, for the week of April 28 to May 05, 2= 020.

Lwt now has let* syntax

Anton Bachin announced

Lwt now has let* and let+ syntax, which can be used like this:

open Lwt.Syntax

let () =3D
  let request =3D
    let* addresses =3D "google.com"<=
/span> "80" [] in
    let google =3D Lw=
t_unix.((List.hd addresses).a=
i_addr) in

    Lwt_io.(with_connection google (=
fun (incoming, outgoing) ->
      let* () =3D=
 write outgoing "GET / HTTP/1.1\r\n"=
 in
      let* () =3D=
 write outgoing "Connection: close\r\n\r\n"=
 in
      let* response =3D read incoming in
      Lwt.return (Some response)))
  in

  let timeout =3D
    let* () =3D <=
span style=3D"color: #228b22;">Lwt_unix.sleep 5. in
    Lwt.return None
  in

  match Lwt_main.run (Lwt.pick [r=
equest; timeout]) with
  | Some =
response -> print_string response
  | None =
-> prerr_endline "Request timed out"; exit 1

This is now released in Lwt 5.3.0. Thanks to Rahul Kumar for adding let*, and @CraigFe for adding let+!

Thomas Coopman asked

Awesome this looks great.

2 quick questions:

  1. I don't see this new version documented on ocsigen yet? Is that a build= that needs to be done manually?
  2. Is ppx_lwt still recommend for some usecases like tr= y%? For what cases is one preferred over the other?

Anton Bachin replied

Good questions :slight_smile:

  1. The docs generation is blocked on an Ocsigen "internal" package w= ikidoc, which has not been updated to support 4.08. So, effectively,= let* is exactly what is preventing docs generation for the ti= me being. I'll post the docs as soon as that is fixed.
  2. ppx_lwt is probably still the recommended way, because of = better backtraces, and things like try%lwt. let* = is nice for people that don't want to use the PPX. They can still benefit f= rom a monadic syntax.

JOSE 0.3.0 - Now with 100% more encry= ption

Ulrik Strid announced

I recently released a version 0.3.0 of JOSE.

https://github.com/ul= rikstrid/reason-jose
https://ulrikstrid.git= hub.io/reason-jose

It now includes some of the JWE (JSON Web Encryption) spec. A huge thank yo= u goes out to @hannes for helping me implementing one of the gnarlier combinations of decryption that I could th= en use as a base for encryption and more alg and enc.

I also refactored the JWK (JSON Web Keys) implementation to unify and simpl= ify the representation. It is now possible to use a private key for anything a public key can do since it's a superset.

A special thanks to @anmonteiro for helping me with the design and reviewin= g my code.

Are there learning materials for OCam= l for those with no programming experience?

Aaron Christianson asked

OCaml is a language with some advanced features, but a very gentle learning= curve. It seems like it would be well-suited to teaching beginners to program (a few tricky error messages n= otwithstanding), but I haven't seen many resources targeted at teaching programming from scratch. Does anyone here k= now any?

Daniel B=C3=BCnzli replied

There is OCaml from the Very Beginnin= g written by @JohnWhitington.

Nicol=C3=A1s Ojeda B=C3=A4r also replied

An excellent (free) book is "LE LANGAGE CAML" https://caml.inria.fr/pub/distrib/books/llc.= pdf.

Pierre also replied

There's also = CS3110 from Cornell University. Here's the textbook. It's pretty great!

The recent evolution of utop, lambda-= term, zed and underneath projects

ZAN DoYe announced

Hi, dear OCaml guys! We've been keeping quiet for more than one year though= utop, lambda-term, zed and some related projects were still evolving durin= g the period of time. This is because of two reasons:

  1. The new feature had nothing to do with the fields where most OCaml develope= rs are working on:

    3D"a30d5fb6fc07=

    3D"91b88f0c4927=

    Recognizing, editing, fuzzy searching for Character Variation(mainly for an= cient CJK characters).

    Nevertheless, the new feature brought us a good side effect =E2=80=93 the l= ong-existing Issue with asian charset was resolved. UTop users will notice the= refinement naturally, so no announcement was needed.

  2. I didn't deem the first few new editions of zed 2 and lambda-term 2 sta= ble enough.

3.0 era

This time, we are entering zed 3, lambda-term 3 era. The features introduce= d since zed 2, lambda-term 2 are quite stable now and the new feature coming to us will have a bit more impact, es= pecially to vim users. So it's worthwhile to draft an announcement:

  • VI Editing Mode

    3D"ca1192404697=

    OCaml guys, hope you enjoy this.

List of notable changes:

  • zed 2:
    • wide, combined glyph(Character Variation, IPA, CJK …)
    • add wanted_column support for wide width character
  • lambda-term 2:
    • wide, combined glyph(Character Variation, IPA, CJK =E2=80=A6)
    • add horizontal scrolling support for wide width character
  • zed 3:
    • add new actions for convenience
  • lambda-term 3:
    • LTerm_read_line: add initial support for vi editing mode:<= /li>
    • motions:
      • h l 0 ^ $
      • j k gg G
      • w W e E b B ge gE
      • f F t T
      • aw iw aW iW
      • include or inner ( ), [ ], { }, < >, ' and "
      • generic quote: aq? iq? where ? could be any character
      • bracket matching: jump back and forth between matched brackets
    • delete, change, yank with motions
    • paste: p P
    • line joining: J

for a full list of the changes, please visit the homepages of each project.

Projects underneath:

  • charInfo_widt= h: Determine column width for a character
  • mew & mew_vi: Modal editing witch & Its VI in= terpreter complement. In a word, modal editing engine generators.

What's next

  • VI Editing Mode
    1. Visual mode

      3D"7cc45010710a=

    2. register support and more vi compatible
  • CJKV

    We've recorded more then 100 thousand entries about the structure of CJK ch= aracters, what is a character consists of, how are the sub-assemblies glue together etc. And as a complement to charIn= fo_width, we may release a new project called charInfo_structure ;)

Looking for "lovely, idiomatic" examp= les of Ocaml used for shell-scripting in the manner of Perl/Python (but esp= . Perl)

Chet Murthy announced

I wonder if there are people who have written nontrivial Ocaml code for she= ll-scripting, that they think exemplifies the right way to do it. I've been a Perl hacker for 25yr, and so when I re= ach for Ocaml to write stuff that should be Perl shell-scripts, I always find it a bit painful, and there's a signif= icant overhead to getting the job done. Some of that is applying ocaml to a new domain, but some of it is that I'm = just not using the right idioms and tools (and there are so many to choose from).

So if anybody has good pointers, I'd appreciate learning about them.

Bikal Lem

Haven't tried it myself, but this looks promising … https://github.com/janestreet/shexp.

At least it has the great Sean Connery in its README so possibly worth delv= ing a bit. :)

Hezekiah Carty

bos seems like it can do = a lot of what you're looking for. It's at least worth taking a look, though it may not be at Perl levels of concise for this kind= of task.

Martin Jambon

I tried to summarize my take on the subject into this gist: https://gist.github.com/mjambon/bb07b24f89fa60c973735307ce9c6cb9

I'm not aware of the existence of such tool, but this is how I might design= it. This should be reminiscent of camlp4's quotation and anti-quotation system, which allows alternating betw= een two syntaxes within a source file.

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 RSS feed of the archives<= /a>.

If you also wish to receive it every week by mail, you may subscribe online.

--=-=-=--