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 6CA482E03 for ; Tue, 26 Jul 2022 17:54:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=inria.fr; s=dc; h=from:to:date:message-id:mime-version:subject:reply-to: sender:list-id:list-help:list-subscribe:list-unsubscribe: list-post:list-owner:list-archive; bh=BAYr7FSJuRUeymF/sHRxjJrjVCO0cGf28oaAX3T/WI0=; b=PvvtMqBNWAi0jCi+0XooaaTW7kWNBCDtyaH+lzqBSeXQ6ATPLgL7ly3j cQ7sZhTS82N1YshlygAvATrE50ddJcML0R7/wtx+AHB29ga2LbZ7+gd/B 99LK9X8sSev2qIFAvFO9qP25QPS7lc3X6yxnaGq9FnKEQh2Yc4xg/3zN2 k=; Received-SPF: SoftFail (mail2-relais-roc.national.inria.fr: domain of caml-list-owner@inria.fr is inclined to not designate 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 ip4:192.134.164.0/24 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=SoftFail 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="5.93,194,1654552800"; d="scan'208,217";a="47005333" Received: from prod-listesu18.inria.fr (HELO sympa.inria.fr) ([128.93.162.160]) by mail2-relais-roc.national.inria.fr with ESMTP; 26 Jul 2022 19:54:38 +0200 Received: by sympa.inria.fr (Postfix, from userid 20132) id 390B9E0261; Tue, 26 Jul 2022 19:54:38 +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 9F407E0260 for ; Tue, 26 Jul 2022 19:54:30 +0200 (CEST) IronPort-SDR: SN9oLKtfCgI7T5k9KG6JbSdeMG7qOmpeWF5Yhdd6yZExuh0nTlwUPt/9r857CNXhjc7rCs2AtA 9sjs9yxFSf6tZj4OHYK5036NnKW6wbpCnr6EGn6ZkOYF6JbRGv0PXoKK99W7FiVg0giMuTJGPY Dq/JUEXP8/nCZHdj/XxG/3iq9w4HAAK3HzyqYQhvZUFtwXi8YCHMG+roPCxWi1cJrjVmdU7wST iWMqzbjj1AozkfU9tnBVlT/JcUM06ppHnAF5zzs+lxrX/cl04fFP6a7m8fbFGp5jHmEJsUfX3H XabCIE1ObZ0VMEaFMcRbN7le X-IPAS-Result: =?us-ascii?q?A0BHAQCLKeBimCIeaIFaFoNjgQMZAWEGVxYYBwhFhE6If?= =?us-ascii?q?ogNgRaIQocCjhkQAQMBDSwBDgQBAgQBAYUGAhaEWAIeBgEFMxMBAgQBAQEBA?= =?us-ascii?q?wIDAQEBAQEBAwEBBQEBAQIBAQIEBAETAQEBAQEBAQEJCwkHBgwFEA4FPGRkB?= =?us-ascii?q?IFLBIF0CzQNgjUMGYNwARgBCAQGEwEBOBgjAxQBBgMCBA0BFwEeAwETARIag?= =?us-ascii?q?mMBgxoDBAELjmabGnp/MoEBgggBAQaBPwEDAwsCAgMYJQGDdoESSgkkgQIXh?= =?us-ascii?q?i5gTAGDFwmCM4FkAicQgVVEgRWCcwdugVBwCxcBAQEBAYE7AQFNCYMgF4JOn?= =?us-ascii?q?GUHNwNFLxKBH2wBCAQGBwoFLgYCDBgUBAITEk0GFgISFAYTDkEQFwwPAxIDD?= =?us-ascii?q?wEHAgkQCBElCAIDCAMCAyYCAxYGDgMdCAoYEhASAgQRGgsGAxY+CQIEDgNAC?= =?us-ascii?q?A4DEQQDDxgJEggQBAYDMgwlCwMFDwwBBgMGBQMBAxsDFAMFJAcDHw8jDQ0EH?= =?us-ascii?q?x0DAwUlAwICGwcCAgMCBhUGAgIYNjkIBAgEKyMPBQIHLwUELwIeBAUGEQgCF?= =?us-ascii?q?gIGBAQEBBYCEAgCCCcXBxMzGQEFWRAJIRYGKBAFBhMDIEcmBUUPKDM1PCsfG?= =?us-ascii?q?wqBEioJIhYDBAQDAgYaAwMiAhAuMQMVBikTEi0JKncJAgMicQMDBCouAwkfH?= =?us-ascii?q?wcJF5x+gQwJChwOPgJZCRgTAQcDIAEEEws2IwUFCwgILQ0OFQ4IDBMLCzKSA?= =?us-ascii?q?hARBSKNdopplEB9NAeDVIE+BgyIMIEijQOIJIN2gVCKdIZiilSGdyGWWyCCK?= =?us-ascii?q?ocDgRcJgkuUXwQECxwKhQSBTiprgQAMBzMaMCIhgmgJRQEDAg0BAgIDAQIBA?= =?us-ascii?q?gkBAQKOKRaDUIE+gmI5O4VMPzQCAQE3AgYBCgEBAwmFYwEBBRMLAYgjWgEB?= IronPort-PHdr: A9a23:t6gSQxB43N7UqyoBEbbMUyQUlkwY04WdBeb1wqQuh78GSKm/5ZOqZ BWZua82ygWQBc6CsqIMotGVmpioYXYH75eFvSJKW713fDhBt/8rmRc9CtWOE0zxIa2iRSU7G MNfSA0tpCnjYgBaF8nkelLdvGC54yIMFRXjLwp1Ifn+FpLPg8it2O2+5ZPebx9WiDagfb9+I wi6oRjSu8ILnYZsN6E9xwfTrHBVYepW32RoJVySnxb4+Mi9+YNo/jpTtfw86cNOSL32cKskQ 7NWCjQmKH0169bwtRbfVwuP52ATXXsQnxFVHgXK9hD6XpP2sivnqupw3TSRMMPqQbwoXzmp8 qdnRhzuiCcZNj4562DXhdd0jK1FvRmgqRt/w5TJb4GOKfFyeq3Qcc8fSWdHQ81fVTFOApmkY oUPEeQPIOhWoYryqFQSthaxHxWgCfn1xzNUmnP736s32PkhHwHc2wwgGsoDvWjQrNrvMqcZT P27w7XIzTXGbvNWxSv945XPfx87pfGDR7RwfdDKyUYzFwPFi1SQqZD5Pz6OzuQNtGyb7up8V e2xl2Enqwdxojm2xscxlIbFnIUVykrL9Shgxos+ONK3RlJhb9G+DJtQqz+VN5FwQs46XWxlp iY3x74CtJKlcyUExpQqywPDZ/GZbYWF7B3tWPuVLDtlgH9odq+yiRms/ES9xOPxUsq53VhJo ydHj9XAqnYA3AHd5MiAT/ty5Eah2TCX2gDL9O5EPUE0lbbFJJ45xb4wk58TvlrZEi/whkr2k LeadkI49eey7uTnZq/qppiGN497kg3+PaUumtC/AeQlKQcCRXSU+eO51LH7+k35WKtFjvsyk qnYq5/aP94UprS5AgNP1YYj8Rm/Ay+90NsGmHkINlRFeA6Gj4f1IFHBPPD4DfC7g1u2ijdn3 ffGPqfuApnVL3jDlq3hfbdn5EJGxgoz18hT55VIBb4bJfLzXlX9uMbfDh8jPAy42/rnB89n1 oMfRG2AHLSZPLnOvl+P4+IjO+iMa5IVuTb5L/gp/fnujWU2mVIbYKKn3oMXZWilEvh4J0iVe 2fgjssOHGsQsAcyUPbmhVONXDJLZXu/XLgw6i80BY64F4vPW4+gjKac0Cq0ApFbYH1NBEqWH nfybYqEXu8BaCKMLc9llTwJTb2hSoA82R20rA/6zL5nL+rI+iIGqZ3j1N515+zKlREv6zN4F cOd03uCT21sn2MIQSE53LxnrEBg1FuO1bJ0j+FEGdFc/f9EXBs2OYTSwuF1E9zyXxjOftaNS FaoWNWmBjQxQ8oszdESfkhxB82vggzf0ySrGLEYj72ECZ4s/6LE2HjxI8Z8y2rY26Y9j1kmR MpPNXS7hqFh7QTTAJTJk0qBmqmwcaQTxijN+H2YzWWSvEFYVQ9wUbnZXX0EfUTWqsn55kXeQ LCwErQrKA5BxMGNK6dQbd3pl1pGSO/lONvFe22xgXu/BQ6UxrOQa4rnY3gR0D3HCEcYiwAT4 WqGNQ8mCyi9uW3eCThuGUvrY0Pt6ul+tGi2TlQ0zgGPd01uzaC5+h8ThfyGSvMcxKgIuCk7q 2Y8IFHoldbJDZDI8w5+eo1YftV75lpbgyaR/QdiONboZ/RpmVg2dwVso1io1hlmDoEGltIl+ jdixwN3Leec0UhdXzKex5H5fLPNeUfo+xX6Qqrf3Bnl29aT+7sToKAxr1zl+hqiFk8j72lPy 95RwmeR7ZXMDRMPXNT2SElhpEsynK3TfiRov9Cc7nZrK6Th6WeqM7MBAeIkzkzlZNJDKOaeE wS0FcQGBs+oIehsml6zbxtCMvoBvLUsMZaefuCdkLWuIP4mhCiv2G1D6YY7yUmM8itgVsbQ2 JIU3/yT3g2GTirxylC7vZO/gphKMAkbBXH30i34HMhUb6x2c5wMDDKVGfbvk40mqKe4ayEN7 FmnFk8L08+veAOPYhr6xwIF3EAepzq8kiu9ziBouzsus6yU0TeIxrjyMh0dNT0DX3Fs2G/lO pP8lNUGRA6oYgwuwQOi/lr/zrNHqb5XKnmKB19PeznqImpiVKqpq7fEZNRAgH8xmR1eS//0I VWTS7qn5gAfzzumBWxVgjYyazCtvJz92R18kmOUanhp/jLVfsR5xBGX49K5J7YZ1z4PQm9jg jnSB0SgF8Gu+cSImpzDtOGnSm/nUYdcOSXm1oKPsiKn6HYiWEfu2anrxpu8SU5hjWfyzLwIH W3QoQz5Y5X32qjyKu9hckRyRRf958d8BoBig94onphDkXMeh5iT4T8GiTKqa4QdgPqiKiFVA 2VXkLu3qED/1UZuL2yE3df8X3SZmI56YsWiJ3kR0WQ75txLD6Gd6PpFmzF0qxy2t1G0A7A1k zEDxP8p8HNfjfsOvV9n9R+mWuVKRWZhaByzwgyP68Gioa5XYme2bLX201BxyNmlBbfEuQpcX XflZr8oGjJ25chkdleQwDv08I6uK7yyJZoD8waZlRvNlb0fIZY4kLwRjipiOH7hlWUiz/8ng Bdu25CjoYXBLH9itvHcYFYQJnj+YMUd/SvohKBVk5ON3oyhKZ5mHy0CQJriSf/7WCJXr/nsM ByCVSEtsnrOU6HHE1XZsA01yhCHW4DuLXycI2MViMlvVAXIbldHjlpSBHIihJd9Ew6ww8mpM 04r4yBIoEb/rgpQx+loMRjmT2qZox2nD1V8ANuWfh9GtEda4EPELcGV7uRyBjxVuJq7o0TOI z6ed18OFWYNS1CJDFDlP6Cz6J/H6ef9ZKL2bPrWP+fU8bQHBavRycr9i9k3ozqBZJfQZSduX aJnhRILGHl9H46xdywncyUMjGqNaseaoE354ShrtoWl9/+tXgvz5IyJAr8UMNN1+hnwj73Rf +KXgS94L35f2PZujTfz8oNHiQZKpBg7R2b4CbMEpDLAR6LWm7ZKAlgccSwmPc9B6eQn1QlIO NLHotnyy7hzg+VzDgtVE1v7laTLLYQGLnq8O1XOGEuQfO3cdHuSm52xOvv6EuEYhf4crxCqv DeHD0Lvdi+OkTXkTVHKU6kEjS2WOgBfpJDodx9sDWb5S9e1Iha/MdJxkXg32eht3CKMbDZAd 2MkNRgR/djypWtCj/5yGnJM9C9gJOiAwWOC6vXAb4wRur1tCzh1kORT5DI7zaFU5WdKXq8Q+ mOao9hwrlWhiuTKxCBgVU8EkQxw3NfT5WpbbJWGo4FHXWfY8RkN62SJFhlMoMFqX9TrsqYW0 dPPkaPvNB9I9M/S9sYHQc2IOISAKnVrYn+LUHbESRAISzKmLzSVvHZmyKTKrlKs+6hl/4Drn IsSR7RbUl0sC/5cDV5qSdUGKZExRTgklL+HkOYC4me4pxTKAsAGrtbATP3YUpCNYH6JyLJDY RUP27bxK48eY5b610JVYV5/hI3WGkDUUIMFsmh7YwQzukkI7GlmQzh5wFrrMEX1qix2d7b8j lsshwB5e+ho6Dr8/wJ9PULE/m1o11ErkJHgjyqWdXayJfW1TdgQEy3wplQ8OZP9Qh9oYEu1h 0MBVn+MBLsDiqs6M3hsjB7AtJBPH/9FUKACZwUfjbKeNfA4ihJErSG22UJM5e3EEIZv0gwwf vvO5zoD2ho9PoRtffWCePNFlgoJ1PPSsiL6hL9qngNMeBpSqCvXcSoM8iTkL5EeLjGztqxp4 A2GwX5YfXQUEuAtqbRs/188POKJy2Th1aRCIwa/Lb7XI6ScsmnG3cmGJzF4nlsPjFVA9KNq3 N0LdlrNEVgoyKqNGh8JM8vbNAwTaNBdvHTeZieBt+zRzIk9Zt/sULmwEanV7OBP3gqtB2NLV 8wU494EH4Ww3U2QNsrhILMfiF0s6AntOFSZHaFJdRaMw38Mp8CyyoMy3JEIf2tMRzwlbWPsv vCM+lxP4rLLRto9b3YEU5FRM3s3XJf/gCtFpzFaCzLx1OsFyQ+E5ju6pyLKDTC6YcAwAZXcL R5qFtyy/i0ytqasjluCuK7kHDmvbYxNg4r/trYCoJKWF/5fTb98qlrR3Y5CSCmjV2fJV8W+J 53xd5UEZ9vpDH23SRq61yJzSN3+doXITODAkUTzSIBYvZPOligkLtO4HyoCFg1YovFaorp7Y RwfbpE7Zx/xqgl4MLawalT9sJ3mUyOmLj1YSONaxOOxaulMziYiWeS9zWMpUpAwy+TkuV5IX pwBiQvSgOqyf4QLGzamAWRTIk+cwEhx33gkLOs5xf0zhQ/FoUVJeS7eb/RnMSRN95Q1AVfYS Z2XIm8oHhmEio7S/gOn37YT5jZQ2dFO3r8c2JARlpXYfTSnVbftrMnF9S06Yop/y0WUGZTkJ tqauZjemD3GUZSWtReKAnfSKg== IronPort-Data: A9a23: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 749rw6/L1E= IronPort-HdrOrdr: A9a23:Zm5XQ6O4cOlBNsBcTvyjsMiBIKoaSvp037BL7TETdfUxSKalfq +V8sjzuSWYtN9zYhEdcLK7WZVoKEm0nfVICOIqUotKMjOLhEKYaKlcqaHizzfjFyCWzJ8+6Y 5QN45kBpnVBVh+5PyKhDVQ/uxQpeW6zA== X-IronPort-Anti-Spam-Filtered: true X-IronPort-AV: E=Sophos;i="5.93,194,1654552800"; d="scan'208,217";a="47005307" X-MGA-submission: =?us-ascii?q?MDEDQ1e6W8YvStAytEIowM2FdZ4yl5ThIvQU87?= =?us-ascii?q?8JIPOxbUBPrVMeJFMkWhe6IBtmS5SxiC9w5p/33yGX0Zu0Wy6HZPKqyp?= =?us-ascii?q?KIjag6V169TzkRKHYSHO/5BNny3fPez2hm3V4i1Q7cevilnUcBHPUoE9?= =?us-ascii?q?vQgTplKUBwkVT9YENgo49RHQ=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; 26 Jul 2022 19:54:29 +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 A1C16564671; Tue, 26 Jul 2022 19:54:28 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=polytechnique.org; s=svoboda; t=1658858068; bh=/WI45E/qG7z23b0aKZ/D9TOeu9Hpjdx8aF0vGfqcNek=; h=From:To:Subject:Date:Message-ID; b=nDg6k+mVtxAjUdHjeDaSu7fonkSa2igoBMzdS2N7/fvN1kQH+VoHiXvOTgQQg2chP Hcr0DzxIb8zWFqOZftwuwAG/kSNu6qfc7JdtkppwmDVv94g4b9wXJKqosV8jK4lf8G q0s8lWe+Jd6tkzazPk/6zngXQd5P3mCataAX24kY= From: Alan Schmitt To: "lwn" , "cwn" , caml-list@inria.fr Date: Tue, 26 Jul 2022 19:54:27 +0200 Message-ID: <871qu7kbe4.fsf@m4x.org> MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="=-=-=" X-AV-Checked: ClamAV using ClamSMTP at svoboda.polytechnique.org (Tue Jul 26 19:54:29 2022 +0200 (CEST)) X-Spam-Flag: Unsure, tests=bogofilter, spamicity=0.494969, queueID=23640564673 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: 18828 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 ZWsgb2YgSnVseSAxOSB0byAyNiwNCjIwMjIuDQoNClRhYmxlIG9mIENvbnRlbnRzDQrilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KSGVscCB3LiBt eSBmaXJzdCBHQURUIDogdW53cmFwcGluZyBTcWxpdGUzLkRhdGEudA0KRG9jdUxpYiAzLjEuMiBh bmQgTWV0YURCIDEuMC4yIG5vdyBvbiBPUEFNDQpkdW5lIDMuNC4wDQpPQ2FtbCA1LjAsIGZpcnN0 IG5vcm1hbCBhbHBoYSByZWxlYXNlDQpPdGhlciBPQ2FtbCBOZXdzDQpPbGQgQ1dODQoNCg0KSGVs cCB3LiBteSBmaXJzdCBHQURUIDogdW53cmFwcGluZyBTcWxpdGUzLkRhdGEudA0K4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZToNCiAgPGh0dHBzOi8vZGlzY3Vz cy5vY2FtbC5vcmcvdC9oZWxwLXctbXktZmlyc3QtZ2FkdC11bndyYXBwaW5nLXNxbGl0ZTMtZGF0 YS10LzEwMjAyLzE+DQoNCg0KUGhpbGlwcGUgU3RyYXVzcyBhc2tlZA0K4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAg SSB3b3VsZCBsaWtlIHRvIGNvbnZlcnQgc3FsaXRlMy1vY2FtbCByZXR1cm5zIGZyb20gU3FsaXRl My5EYXRhLnQNCiAgYXJyYXkgdG8gcGxhaW4gb2NhbWwgdHlwZXMgaW4gYSB0dXBsZS4gSSBndWVz cyB1bndyYXBwaW5nIHRoZSBEYXRhLnQNCiAgY2FuIGJlIGRvbmUgdXNpbmcgYSBHQURULCBoZXJl J3MgbXkgdmVyeSB2ZXJ5IGZpcnN0IGF0dGVtcHQ6DQoNCiAg4pSM4pSA4pSA4pSA4pSADQogIOKU giAoKiBzaW11bGF0ZSBTcWxpdGUzLkRhdGEudCAqKQ0KICDilIIgDQogIOKUgiB0eXBlIHQgPQ0K ICDilIIgfCBOT05FDQogIOKUgiB8IE5VTEwNCiAg4pSCIHwgSU5UIG9mIGludDY0DQogIOKUgiB8 IEZMT0FUIG9mIGZsb2F0DQogIOKUgiB8IFRFWFQgb2Ygc3RyaW5nDQogIOKUgiB8IEJMT0Igb2Yg c3RyaW5nIDs7DQogIOKUgiANCiAg4pSCICgqIGEgc2ltcGxlIEdBRFQgdG8gdW53cmFwIFNxbGl0 ZTMuRGF0YS50ICopDQogIOKUgiANCiAg4pSCIHR5cGUgXyBkYnZhbCA9DQogIOKUgiAgICAgfCBJ TlQgOiBpbnQ2NCAtPiBpbnQ2NCBkYnZhbA0KICDilIIgICAgIHwgRkxPQVQgOiBmbG9hdCAtPiBm bG9hdCBkYnZhbA0KICDilIIgICAgIHwgVEVYVCA6IHN0cmluZyAtPiBzdHJpbmcgZGJ2YWwNCiAg 4pSCICAgICB8IEJMT0IgOiBzdHJpbmcgLT4gc3RyaW5nIGRidmFsDQogIOKUgiAgICAgfCBOT05F IHwgTlVMTCA7Ow0KICDilIIgDQogIOKUgiBsZXQgdW53cmFwX2RhdGEgOiB0eXBlIGEuIGEgZGJ2 YWwgLT4gYSA9IGZ1biBkYnZhbCAtPg0KICDilIIgICAgIG1hdGNoIGRidmFsIHdpdGgNCiAg4pSC ICAgICB8IElOVCB4IC0+IHgNCiAg4pSCICAgICB8IEZMT0FUIHggLT4geA0KICDilIIgICAgIHwg VEVYVCBzdHIgLT4gc3RyDQogIOKUgiAgICAgfCBCTE9CIHN0ciAtPiBzdHIgOzsNCiAg4pSCIA0K ICDilIIgbGV0IHR1cGxlX29mX2FycmF5NCAoYXJyOiB0IGFycmF5KSA9DQogIOKUgiAgICAgYXNz ZXJ0IChBcnJheS5sZW5ndGggYXJyID0gNCkgOw0KICDilIIgICAgICh1bndyYXBfZGF0YSBhcnIu KDApLCB1bndyYXBfZGF0YSBhcnIuKDEpLCB1bndyYXBfZGF0YSBhcnIuKDIpLCB1bndyYXBfZGF0 YSBhcnIuKDMpKSA7Ow0KICDilJTilIDilIDilIDilIANCg0KICBDb21waWxhdGlvbiBmYWlscyB3 aXRoIHRoaXMgdHlwaW5nIGVycm9yOg0KDQogIOKUjOKUgOKUgOKUgOKUgA0KICDilIIgRmlsZSAi ZGF0YWJhc2UubWwiLCBsaW5lIDIzMywgY2hhcmFjdGVycyAxNy0yNDoNCiAg4pSCIDIzMyB8ICAg ICAodW53cmFwX2RhdGEgYXJyLigwKSwgdW53cmFwX2RhdGEgYXJyLigxKSwgdW53cmFwX2RhdGEg YXJyLigyKSwgdW53cmFwX2RhdGEgYXJyLigzKSkgOzsNCiAg4pSCIAkJICAgICAgIF5eXl5eXl4N CiAg4pSCIEVycm9yOiBUaGlzIGV4cHJlc3Npb24gaGFzIHR5cGUgdCBidXQgYW4gZXhwcmVzc2lv biB3YXMgZXhwZWN0ZWQgb2YgdHlwZQ0KICDilIIgCSAnYSBkYnZhbA0KICDilJTilIDilIDilIDi lIANCg0KICBXaGF0IGFtIEkgZG9pbmcgd3Jvbmc/IEkgbmVlZCB0byBtYWtlIHR5cGUgdCBjb21w YXRpYmxlIHdpdGggdHlwZSAnYQ0KICBkYnZhbC4gIFRoYW5rcyBpbiBhZHZhbmNlLg0KDQoNCm9j dGFjaHJvbiByZXBsaWVkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIANCg0KICBZb3UgY2Fubm90IG1ha2UgdGhlIHR5cGUgYHQnIGFuZCBgJ2EgZGJ2 YWwnIGNvbXBhdGlibGUsIHRoZXJlIGFyZQ0KICBkaWZmZXJlbnQgdHlwZXMuDQoNCiAgQSB2ZXJ5 IGltcG9ydGFudCBwb2ludCB0byBrZWVwIGluIG1pbmQgd2l0aCBHQURUcyBpcyB0aGF0IG9uZSBj YW5ub3QNCiAgY3JlYXRlIHR5cGUtbGV2ZWwgaW5mb3JtYXRpb24gZnJvbSBkeW5hbWljYWwgdmFs dWVzLiBJbiBvdGhlciB3b3JkcywNCiAgdGhlcmUgYXJlIG5vIGZ1bmN0aW9ucyBvZiB0eXBlIH4g eCA6IHQgLT4gZih4KSBkYnZhbH50aGF0IHdpbGwgaW5mZXINCiAgdGhlIHR5cGUgb2YgaXRzIHJl dHVybiBmcm9tIHRoZSB2YWx1ZSBvZiBpdHMgYXJndW1lbnQgaW4gT0NhbWwuDQoNCiAgVGh1cyB0 aGUgdHlwZSBvZiB0aGUgZmluYWwgcmVzdWx0IG11c3QgY29tZSBmcm9tIHlvdXIgY29kZSBzb3Vy Y2UNCiAgcmF0aGVyIHRoYW4gZnJvbSB0aGUgZHluYW1pY2FsIGRhdGEuICBGb3IgaW5zdGFuY2Us IHlvdSBjYW4gZGVmaW5lDQogIGNvbnN0cnVjdG9yIGZyb20gdGhlIHR5cGUgYHQnIHRvIHRoZSBy aWdodCBgZGJ2YWwnIHR5cGU6DQogIOKUjOKUgOKUgOKUgOKUgA0KICDilIIgZXhjZXB0aW9uIFR5 cGVfZXJyb3INCiAg4pSCIA0KICDilIIgbGV0IGludDogdCAtPiBfIGRidmFsID0gZnVuY3Rpb24N CiAg4pSCIHwgSU5UIHggLT4gSU5UIHgNCiAg4pSCIHwgXyAtPiByYWlzZSBUeXBlX2Vycm9yDQog IOKUgiANCiAg4pSCIGxldCBmbG9hdDogdCAtPiBfIGRidmFsID0gZnVuY3Rpb24NCiAg4pSCIHwg RkxPQVQgeCAtPiBGTE9BVCB4DQogIOKUgiB8IF8gLT4gcmFpc2UgVHlwZV9lcnJvcg0KICDilJTi lIDilIDilIDilIANCiAgVGhlbiBpZiB5b3Uga25vdyB0aGUgdHlwZSBvZiB0aGUgdHVwbGUsIHlv dSBjYW4gd3JpdGUgaXQgYXM6DQogIOKUjOKUgOKUgOKUgOKUgA0KICDilIIgbGV0IHR1cGxlX29m X2FycmF5NCAoYXJyOiB0IGFycmF5KSA9DQogIOKUgiAgICAgYXNzZXJ0IChBcnJheS5sZW5ndGgg YXJyID0gNCkgOw0KICDilIIgICAgIGludCBhcnIuKDApLCBpbnQgYXJyLigxKSwgaW50IGFyci4o MiksIGludCBhcnIuKDMpDQogIOKUlOKUgOKUgOKUgOKUgA0KICBvciBwb3NzaWJseSBhcw0KICDi lIzilIDilIDilIDilIANCiAg4pSCIGxldCBpbnQ0ID0gaW50LCBpbnQsIGludCwgaW50DQogIOKU giBsZXQgdHVwbGUgKGEsYixjLGQpIGFyciA9DQogIOKUgiAgIGFzc2VydCAoQXJyYXkubGVuZ3Ro IGFyciA9IDQpIDsNCiAg4pSCICAgYSBhcnIuKDApLCBiIGFyci4oMSksIGMgYXJyLigyKSwgZCBh cnIuKDMpDQogIOKUlOKUgOKUgOKUgOKUgA0KICBUaGVyZSBhcmUgbW9yZSBjb21wbGV4IGFsdGVy bmF0aXZlcyBiYXNlZCBvbiB0eXBlIHdpdG5lc3MsIHRoYXQgYWxsb3cNCiAgdG8gaW1wbGVtZW50 IGEgZm9ybSBvZiBzdGF0aWMgbWF0Y2hpbmcgb3ZlciB0aGUgZHluYW1pY2FsIHR5cGUgb2YNCiAg ZGF0YSwgYnV0IHRoZSBjb3JlIGlkZWEgdGhhdCB0aGUgdHlwZXMgYXJlIGFsd2F5cyBwcmVzZW50 IGluIHRoZQ0KICBzb3VyY2UgY29kZSBpbiBzb21lIHdheSBpcyB0aGUgc2FtZS4NCg0KDQpQaGls aXBwZSBTdHJhdXNzIHRoZW4gc2FpZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgT2ggSSBk aWRuJ3Qgbm90aWNlZCBpdCB3b3VsZCBiZSBkeW5hbWljYWwgdHlwaW5nISBJJ20gdG9vIHVzZWQg dG8gcHB4DQogIChhbmQgcHJldmlvdXNseSBjYW1scDQpIHdyaXR0ZW4gZGIgYWJzdHJhY3Rpb24g bGF5ZXIhDQoNCiAgSSdtIHNpbXBseSByZXBsYWNpbmcgc3FsZXhwciBieSBwbGFpbiBzcWxpdGUz LW9jYW1sIGluIHNvbWUgZXhpc3RpbmcNCiAgY29kZSBvZiBtaW5lLiBzcWxleHByIHF1aWNrIGRv Y286DQoNCiAgPGh0dHBzOi8vZ2l0aHViLmNvbS9tZnAvb2NhbWwtc3FsZXhwcj4NCg0KICBCdXQg SSBjYW4gbGl2ZSB3aXRoIGEgRGF0YS50IGFycmF5IQ0KDQoNCllhd2FyIEFtaW4gdGhlbiBhZGRl ZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSADQoNCiAgRXZlcnlib2R5IGhhcyB0aGVpciBmYXZvdXJpdGUgd2F5IG9mIHdyYXBw aW5nIFNRTGl0ZS4gSGVyZSdzIG1pbmUgKG5vDQogIFBQWCk6IDxodHRwczovL2dpdGh1Yi5jb20v eWF3YXJhbWluL29jYW1sX3NxbF9xdWVyeT4NCg0KICBJdCBoYXMgYSBsaXR0bGUgZGF0YSB0cmFu c2xhdGlvbiBsYXllciB0byBjb252ZXJ0IGZyb20gYERhdGEudCcgYXJyYXkNCiAgdG8gdGhlIGRl c2lyZWQgcmV0dXJuIHR5cGUuDQoNCg0KRG9jdUxpYiAzLjEuMiBhbmQgTWV0YURCIDEuMC4yIG5v dyBvbiBPUEFNDQrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOg0KICA8aHR0cHM6Ly9kaXNjdXNz Lm9jYW1sLm9yZy90L2RvY3VsaWItMy0xLTItYW5kLW1ldGFkYi0xLTAtMi1ub3ctb24tb3BhbS8x MDIwNC8xPg0KDQoNCm5ndWVybW9uZCBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIEknbSBwbGVhc2VkIHRvIGFu bm91bmNlIHRoZSByZWxlYXNlIG9mIGBkb2N1bGliJyBhbmQgYG1ldGFkYicsIG5vdw0KICBhdmFp bGFibGUgb24gT1BBTS4NCg0KICAqRG9jdUxpYiogaXMgYSBHVUkgZm9yIGRvY3VtZW50IG1hbmFn ZW1lbnQsIHBhcnRpY3VsYXJseSBmb3IgYWxsIHRoZQ0KICB0ZXh0Ym9va3MgYW5kIGFydGljbGVz IHlvdSd2ZSBhY2N1bXVsYXRlZCBidXQga25vdyB5b3UnbGwgbmV2ZXIgcmVhZA0KICA6dGhpbmtp bmc6LiBUaGUgaWRlYSBvZiBEb2N1TGliIGlzIHRvIGtlZXAgdHJhY2sgb2YgbWV0YWRhdGEgb2Yg ZmlsZXMNCiAgc3RvcmVkIGFjcm9zcyBtdWx0aXBsZSBsaWJyYXJpZXMgb24geW91ciBmaWxlIHN5 c3RlbSBpbiBzdWNoIGEgd2F5DQogIHRoYXQgeW91IGNhbiBtb3ZlLCByZW9yZ2FuaXplLCBvciBy ZW5hbWUgYSBmaWxlIHdpdGhvdXQgbG9zaW5nIHlvdXINCiAgbWV0YWRhdGEuIFlvdSBjYW4gYWRk aXRpb25hbGx5IGxvb2t1cCBtZXRhZGF0YSBvbiBgb3BlbmxpYnJhcnkub3JnJyBvcg0KICBgc2Vt YW50aWNzY2hvbGFyLm9yZycuIERvY3VMaWIgd2lsbCBhbHNvIHdhcm4gYWJvdXQgbWlzc2luZyBh bmQNCiAgZHVwbGljYXRlIGZpbGVzLiBTdG9yZWQgbWV0YWRhdGEgcHJlc2VudGx5IGluY2x1ZGVz IGF1dGhvciwgdGl0bGUsDQogIHllYXIsIHRhZ3MsIGFuZCBET0kvSVNCTi4NCg0KICA8aHR0cHM6 Ly9nbG9iYWwuZGlzY291cnNlLWNkbi5jb20vc3RhbmRhcmQxMS91cGxvYWRzL29jYW1sL29yaWdp bmFsLzJYL2YvZmEwNjRjZDMyYmNlNmU1MjcyMmQzMDA0N2Q4ZTBlZjIxZmEwOTY4NC5wbmc+DQoN CiAgRm9yIG1vcmUgc2NyZWVuc2hvdHMgYW5kIGRldGFpbHM6DQogIDxodHRwczovL2dpdGh1Yi5j b20vbmd1ZXJtb25kL2RvY3VsaWI+DQoNCiAgKk1ldGFkYiogaXMgdGhlIEpTT04gZGF0YWJhc2Ug Zm9yIG1hbmlwdWxhdGluZyBmaWxlIG1ldGFkYXRhDQogIHVuZGVybHlpbmcgRG9jdUxpYiwgaW4g aG9wZXMgdGhhdCBpdCBtYXkgYmUgdXNlZnVsIHNvbWV3aGVyZQ0KICBlbHNlLiBEYXRhIGlzIHN0 b3JlZCBpbiB0aGUgZm9sbG93aW5nIHdheToNCiAg4pSM4pSA4pSA4pSA4pSADQogIOKUgiBwYXRo L3RvL2xpYnJhcnkNCiAg4pSCIHwtIC5tZXRhZGF0YQ0KICDilIIgICAgfC0gLi9mb28udHh0Lmpz b24NCiAg4pSCICAgIHwtIC4vYmxhaC9iYXIucGRmLmpzb24NCiAg4pSCICAgIHwtIC4vZm9vYmFy LnBkZi5qc29uDQogIOKUgiB8LSAuL2Zvby50eHQNCiAg4pSCIHwtIC4vYmxhaC9iYXIucGRmDQog IOKUgiB8LSAuL2Zvb2Jhci5wZGYNCiAg4pSU4pSA4pSA4pSA4pSADQogIEZvciBkb2N1bWVudGF0 aW9uOiA8aHR0cHM6Ly9naXRodWIuY29tL25ndWVybW9uZC9tZXRhZGI+DQoNCg0KZHVuZSAzLjQu MA0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZTogPGh0dHBzOi8v ZGlzY3Vzcy5vY2FtbC5vcmcvdC9hbm4tZHVuZS0zLTQtMC8xMDIxMS8xPg0KDQoNCkV0aWVubmUg TWlsbG9uIGFubm91bmNlZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgT24gYmVoYWxmIG9mIHRoZSBk dW5lIHRlYW0sIEnigJltIHBsZWFzZWQgdG8gYW5ub3VuY2UgdGhlIHJlbGVhc2Ugb2YNCiAgdmVy c2lvbiAzLjQuMC4NCg0KICBCdWcgZml4ZXMsIGEgY291cGxlIG5ldyBmZWF0dXJlcywgYmV0dGVy IGhpbnRzIGFuZCBlcnJvciBtZXNzYWdlcyAtIEkNCiAgd29uJ3QgcmVzdGF0ZSB3aGF0J3MgaW4g dGhlIGNoYW5nZWxvZyBiZWxvdy4gIFRoYW5rcyB0byBldmVyeW9uZQ0KICBpbnZvbHZlZCBpbiB0 aGlzIHJlbGVhc2UhDQoNCiAg4oCiIE1ha2UgYGR1bmUgZGVzY3JpYmUnIGNvcnJlY3RseSBoYW5k bGUgb3ZlcmxhcHBpbmcgaW1wbGVtZW50YXRpb25zDQogICAgZm9yIHZpcnR1YWwgbGlicmFyaWVz ICgjNTk3MSwgZml4ZXMgIzU3NDcsIEBlc29wZSkNCg0KICDigKIgQnVpbGRpbmcgdGhlIGBAY2hl Y2snIGFsaWFzIHNob3VsZCBtYWtlIHN1cmUgdGhlIGxpYnJhcmllcyBhbmQNCiAgICBleGVjdXRh YmxlcyBkb24ndCBoYXZlIGRlcGVuZGVuY3kgY3ljbGVzICgjNTg5MiwgQHJncmluYmVyZykNCg0K ICDigKIgW2N0eXBlc10gQWRkIHN1cHBvcnQgZm9yIHRoZSBgZXJybm8nIHBhcmFtZXRlciB1c2lu ZyB0aGUNCiAgICBgZXJybm9fcG9saWN5JyBmaWVsZCBpbiB0aGUgY3R5cGVzIHNldHRpbmdzLiAo IzU4MjcsIEBkcm95bykNCg0KICDigKIgRml4IGBkdW5lIGNvcSB0b3AnIHdoZW4gaXQgaXMgaW52 b2tlZCBvbiBmaWxlcyBmcm9tIGEgc3ViZGlyZWN0b3J5DQogICAgb2YgdGhlIGRpcmVjdG9yeSBj b250YWluaW5nIHRoZSBhc3NvY2lhdGVkIHN0YW56YSAoIzU3ODQsIGZpeGVzDQogICAgIzU1NTIs IEBlamdhbGxlZ28sIEBybGVwaWdyZSwgQEFsaXp0ZXIpDQoNCiAg4oCiIEZpeCBoaW50IHdoZW4g YW4gaW52YWxpZCBtb2R1bGUgbmFtZSBpcyBmb3VuZC4gKCM1OTIyLCBmaXhlcyAjNTI3MywNCiAg ICBAZW1pbGxvbikNCg0KICDigKIgVGhlIGAoY2F0KScgYWN0aW9uIG5vdyBzdXBwb3J0cyBzZXZl cmFsIGZpbGVzLiAoIzU5MjgsIGZpeGVzICM1Nzk1LA0KICAgIEBlbWlsbG9uKQ0KDQogIOKAoiBE dW5lIG5vIGxvbmdlciB1c2VzIHNoaW1tZWQgYE1FVEEnIGZpbGVzIGZvciBPQ2FtbCA1LngsIHNv bGVseSB1c2luZw0KICAgIHRoZSBvbmVzIGluc3RhbGxlZCBieSB0aGUgY29tcGlsZXIuICgjNTkx NiwgQGRyYTI3KQ0KDQogIOKAoiBGaXggaGFuZGxpbmcgb2YgdGhlIGAoZGVwcyknIGZpZWxkIGlu IGAodGVzdCknIHN0YW56YXMgd2hlbiB0aGVyZSBpcw0KICAgIGFuIGAuZXhwZWN0ZWQnIGZpbGUu ICgjNTk1MiwgIzU5NTEsIGZpeGVzICM1OTUwLCBAZW1pbGxvbikNCg0KICDigKIgSWdub3JlIGlu c2lnbmlmaWNhbnQgZmlsZXN5c3RlbSBldmVudHMuIFRoaXMgc3RvcHMgUlBDIGluIHdhdGNoIG1v ZGUNCiAgICBmcm9tIGZsYXNoaW5nIGVycm9ycyBvbiBpbnNpZ25pZmljYW50IGZpbGUgc3lzdGVt IGV2ZW50cyBzdWNoIGFzDQogICAgY2hhbmdlcyBpbiB0aGUgYC5naXQvJyBkaXJlY3RvcnkuICgj NTk1MywgQHJncmluYmVyZykNCg0KICDigKIgRml4IHBhcnNpbmcgbW9yZSBlcnJvciBtZXNzYWdl cyBlbWl0dGVkIGJ5IHRoZSBPQ2FtbCBjb21waWxlci4gSW4NCiAgICBwYXJ0aWN1bGFyLCBtZXNz YWdlcyB3aGVyZSB0aGUgZXhjZXJwdCBsaW5lIG51bWJlciBzdGFydGVkIHdpdGggYQ0KICAgIGJs YW5rIGNoYXJhY3RlciB3ZXJlIHNraXBwZWQuICgjNTk4MSwgQHJncmluYmVyZykNCg0KICDigKIg ZW52IHN0YW56YTogd2FybiBpZiBzb21lIHJ1bGVzIGFyZSBpZ25vcmVkIGJlY2F1c2UgdGhleSBh cHBlYXIgYWZ0ZXINCiAgICBhIHdpbGRjYXJkIHJ1bGUuICgjNTg5OCwgZml4ZXMgIzU4ODYsIEBl bWlsbG9uKQ0KDQogIOKAoiBPbiBXaW5kb3dzLCBYREdfQ0FDSEVfSE9NRSBpcyB0YWtlbiB0byBi ZSB0aGUNCiAgICBgRk9MREVSSURfSW50ZXJuZXRDYWNoZScgaWYgdW5zZXQsIGFuZCBYREdfQ09O RklHX0hPTUUgYW5kDQogICAgWERHX0RBVEFfSE9NRSBhcmUgYm90aCB0YWtlbiB0byBiZSBgRk9M REVSSURfTG9jYWxBcHBEYXRhJyBpZiB1bnNldC4NCiAgICAoIzU5NDMsIGZpeGVzICM1ODA4LCBA bm9qYikNCg0KDQpFdGllbm5lIE1pbGxvbiB0aGVuIGFkZGVkDQrilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAN Cg0KICBUaGlzIGJyb2tlIDMyLWJpdCBjeWd3aW4gaW5zdGFsbGF0aW9ucywgc28gMy40LjEgd2Fz IHJlbGVhc2VkIHdpdGggYQ0KICBmaXguDQoNCg0KT0NhbWwgNS4wLCBmaXJzdCBub3JtYWwgYWxw aGEgcmVsZWFzZQ0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZToNCiAgPGh0dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9v Y2FtbC01LTAtZmlyc3Qtbm9ybWFsLWFscGhhLXJlbGVhc2UvMTAyMTYvMT4NCg0KDQpvY3RhY2hy b24gYW5ub3VuY2VkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIANCg0KICBUaGUgc3RhYmlsaXNhdGlvbiBvZiBPQ2FtbCA1LjAgaGFzIGJl ZW4gcHJvZ3Jlc3Npbmcgd2VsbCBkdXJpbmcgdGhlDQogIGxhc3QgbW9udGguICBXZSBoYXZlIHRo dXMgcmVsZWFzZWQgYSBmaXJzdCBub3JtYWwgYWxwaGEgcmVsZWFzZSBvZg0KICBPQ2FtbCA1LjAu MCB0byBoZWxwIGZlbGxvdyBoYWNrZXJzIGpvaW4gdXMgZWFybHkgaW4gb3VyIGJ1ZyBodW50aW5n DQogIGFuZCBvcGFtIGVjb3N5c3RlbSBmaXhpbmcgZnVuIChzZWUgYmVsb3cgZm9yIHRoZSBpbnN0 YWxsYXRpb24NCiAgaW5zdHJ1Y3Rpb25zKS4NCg0KICBZb3UgY2FuIGZvbGxvdyB0aGUgcHJvZ3Jl c3MgaW4gc3RhYmlsaXNpbmcgdGhlIG9wYW0gZWNvc3lzdGVtIG9uDQoNCiAgPGh0dHBzOi8vZ2l0 aHViLmNvbS9vY2FtbC9vcGFtLXJlcG9zaXRvcnkvaXNzdWVzLzIxNTI2Pg0KDQogIElmIHlvdSBm aW5kIGFueSBidWdzLCBwbGVhc2UgcmVwb3J0IHRoZW0gaGVyZToNCg0KICA8aHR0cHM6Ly9naXRo dWIuY29tL29jYW1sL29jYW1sL2lzc3Vlcz4NCg0KICBDb21wYXJlZCB0byB0aGUgemVyb3RoIGFs cGhhIHJlbGVhc2UsIHRoaXMgYWxwaGEgcmVsZWFzZSByZXN0b3JlcyB0aGUNCiAgc3VwcG9ydCBm b3IgdGhlIGJ5dGVjb2RlIGRlYnVnZ2VyLCBhbmQgaW50ZWdyYXRlcyBhIGNoYW5nZSBvZiB0eXBl IGluDQogIHRoZSBGRkkgQVBJIHRoYXQgbWlnaHQgdHJpZ2dlciBzb21lIHdhcm5pbmdzIGluIEZG SSBjb2RlLg0KDQogIFdlIGFsc28gaGF2ZSBhIGNoYW5nZSBpbiB0aGUgaW5zdGFsbGVkIGZpbGVz OiB0aGUgY29tcGlsZXIgZGlzdHJpYnV0ZXMNCiAgbm93IGl0cyBvd24gTUVUQSBmaWxlcyByYXRo ZXIgdGhhbiByZWx5aW5nIG9uIGVpdGhlciBmaW5kbGliIG9yIGR1bmUNCiAgdG8gcHJvdmlkZSB0 aG9zZSBmaWxlcy4gVGhpcyBzaG91bGQgc2ltcGxpZnkgdGhlIHRhc2tzIG9mIGJvdGggdG9vbHMN CiAgaW4gZnV0dXJlIHZlcnNpb24uDQoNCiAgTm90ZSB0aGVyZSBhcmUgc3RpbGwgc29tZSBjaGFu Z2VzIGV4cGVjdGVkIGluIHRoZSBFZmZlY3QgbW9kdWxlIGJlZm9yZQ0KICB0aGUgbmV4dCBjYW5k aWRhdGUgcmVsZWFzZS4gR2VuZXJhbGx5LCBib3RoIHRoZSBFZmZlY3QgYW5kIERvbWFpbg0KICBt b2R1bGVzIGFyZSBzdGlsbCBleHBlcmltZW50YWwgYW5kIG1pZ2h0IGNoYW5nZSBBUEkgZXZlbiBk dXJpbmcgdGhlDQogIGJldGEgcmVsZWFzZXMuDQoNCiAgSWYgeW91IGFyZSBpbnRlcmVzdGVkIGJ5 IHRoZSBvbmdvaW5nIGxpc3Qgb2YgYnVnIGZpeGVzLCB0aGUgdXBkYXRlZA0KICBjaGFuZ2UgbG9n IGZvciBPQ2FtbCA1LjAuMCBpcyBhdmFpbGFibGUgYXQ6DQoNCiAgPGh0dHBzOi8vZ2l0aHViLmNv bS9vY2FtbC9vY2FtbC9ibG9iLzUuMC9DaGFuZ2VzPg0KDQogIEEgc2hvcnQgc3VtbWFyeSBvZiB0 aGUgY2hhbmdlcyBzaW5jZSB0aGUgemVyb3RoIGFscGhhIHJlbGVhc2UgaXMgYWxzbw0KICBhdmFp bGFibGUgYmVsb3cuDQoNCg0KSW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucw0K4pWM4pWM4pWM4pWM 4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM 4pWM4pWMDQoNCiAgVGhlIGJhc2UgY29tcGlsZXIgY2FuIGJlIGluc3RhbGxlZCBhcyBhbiBvcGFt IHN3aXRjaCB3aXRoIHRoZQ0KICBmb2xsb3dpbmcgY29tbWFuZHMgb24gb3BhbSAyLjE6DQogIOKU jOKUgOKUgOKUgOKUgA0KICDilIIgb3BhbSB1cGRhdGUNCiAg4pSCIG9wYW0gc3dpdGNoIGNyZWF0 ZSA1LjAuMH5hbHBoYTENCiAg4pSU4pSA4pSA4pSA4pSADQogIEZvciBwcmV2aW91cyB2ZXJzaW9u IG9mIG9wYW0sIHRoZSBzd2l0Y2ggY3JlYXRpb24gY29tbWFuZCBsaW5lIGlzDQogIHNsaWdodGx5 IG1vcmUgdmVyYm9zZToNCiAg4pSM4pSA4pSA4pSA4pSADQogIOKUgiBvcGFtIHVwZGF0ZQ0KICDi lIIgb3BhbSBzd2l0Y2ggY3JlYXRlIDUuMC4wfmFscGhhMSAtLXJlcG9zaXRvcmllcz1kZWZhdWx0 LGJldGE9Z2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vY2FtbC1iZXRhLXJlcG9zaXRvcnku Z2l0DQogIOKUlOKUgOKUgOKUgOKUgA0KICBJZiB5b3Ugd2FudCB0byB0ZXN0IHRoaXMgdmVyc2lv biwgaXQgaXMgc3Ryb25nbHkgYWR2aXNlZCB0byBpbnN0YWxsDQogIHRoZSBhbHBoYSBvcGFtIHJl cG9zaXRvcnkNCg0KICA8aHR0cHM6Ly9naXRodWIuY29tL2tpdC10eS1rYXRlL29wYW0tYWxwaGEt cmVwb3NpdG9yeT4NCg0KICB3aXRoDQogIOKUjOKUgOKUgOKUgOKUgA0KICDilIIgb3BhbSByZXBv IGFkZCBhbHBoYSBnaXQraHR0cHM6Ly9naXRodWIuY29tL2tpdC10eS1rYXRlL29wYW0tYWxwaGEt cmVwb3NpdG9yeS5naXQNCiAg4pSU4pSA4pSA4pSA4pSADQogIFlvdSBjYW4gY2hlY2sgdGhhdCB0 aGUgYWxwaGEgcmVwb3NpdG9yeSBoYXMgYmVlbiBjb3JyZWN0bHkgaW5zdGFsbGVkDQogIHdpdGgN Cg0KICDilIzilIDilIDilIDilIANCiAg4pSCICQgb3BhbSByZXBvDQogIOKUgiANCiAg4pSCIDw+ PD4gUmVwb3NpdG9yeSBjb25maWd1cmF0aW9uIGZvciBzd2l0Y2ggNS4wLjB+YWxwaGExIDw+PD48 Pjw+PD48Pjw+PD48Pjw+PD48Pjw+DQogIOKUgiAgMSBhbHBoYSAgIGdpdCtodHRwczovL2dpdGh1 Yi5jb20va2l0LXR5LWthdGUvb3BhbS1hbHBoYS1yZXBvc2l0b3J5LmdpdA0KICDilIIgIDIgZGVm YXVsdCBodHRwczovL29wYW0ub2NhbWwub3JnDQogIOKUlOKUgOKUgOKUgOKUgA0KDQogIFRoaXMg YWxwaGEgcmVwb3NpdG9yeSBjb250YWlucyB2YXJpb3VzIGZpeGVzIGluIHRoZSBwcm9jZXNzIG9m IGJlaW5nDQogIHVwc3RyZWFtZWQgd2hpY2ggdmFzdGx5IGluY3JlYXNlcyB0aGUgbnVtYmVyIG9m IG9wYW0gcGFja2FnZXMNCiAgY3VycmVudGx5IGNvbXBhdGlibGUgd2l0aCBPQ2FtbCA1LjAuMCAu DQoNCiAgSWYgeW91IHdhbnQgdG8gdHdlYWsgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGNvbXBp bGVyLCB5b3UgY2FuIHN3aXRjaA0KICB0byB0aGUgb3B0aW9uIHZhcmlhbnQgd2l0aDoNCiAg4pSM 4pSA4pSA4pSA4pSADQogIOKUgiBvcGFtIHVwZGF0ZQ0KICDilIIgb3BhbSBzd2l0Y2ggY3JlYXRl IDxzd2l0Y2hfbmFtZT4gb2NhbWwtdmFyaWFudHMuNS4wLjB+YWxwaGExK29wdGlvbnMgPG9wdGlv bl9saXN0Pg0KICDilJTilIDilIDilIDilIANCg0KICB3aGVyZSBgb3B0aW9uX2xpc3QnIGlzIGEg Y29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgYG9jYW1sLW9wdGlvbi0qJw0KICBwYWNrYWdlcy4gRm9y IGluc3RhbmNlLCBmb3IgYSBmbGFtYmRhIGFuZCBuby1mbGF0LWZsb2F0LWFycmF5IHN3aXRjaDoN CiAg4pSM4pSA4pSA4pSA4pSADQogIOKUgiBvcGFtIHN3aXRjaCBjcmVhdGUgNS4wLjB+YWxwaGEx K2ZsYW1iZGErbmZmYSBvY2FtbC12YXJpYW50cy41LjAuMH5hbHBoYTErb3B0aW9ucyBvY2FtbC1v cHRpb24tZmxhbWJkYQ0KICDilIIgb2NhbWwtb3B0aW9uLW5vLWZsYXQtZmxvYXQtYXJyYXkNCiAg 4pSU4pSA4pSA4pSA4pSADQogIFRoZSBjb21tYW5kIGxpbmUgYWJvdmUgaXMgc2xpZ2h0bHkgbW9y ZSBjb21wbGljYXRlZCBmb3Igb3BhbSB2ZXJzaW9uDQogIGFudGVyaW9yIHRvIDIuMToNCiAg4pSM 4pSA4pSA4pSA4pSADQogIOKUgiBvcGFtIHVwZGF0ZQ0KICDilIIgb3BhbSBzd2l0Y2ggY3JlYXRl IDxzd2l0Y2hfbmFtZT4gLS1wYWNrYWdlcz1vY2FtbC12YXJpYW50cy41LjAuMH5hbHBoYTErb3B0 aW9ucyw8b3B0aW9uX2xpc3Q+DQogIOKUgiAtLXJlcG9zaXRvcmllcz1kZWZhdWx0LGJldGE9Z2l0 K2h0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vY2FtbC1iZXRhLXJlcG9zaXRvcnkuZ2l0DQogIOKU lOKUgOKUgOKUgOKUgA0KDQogIEluIGJvdGggY2FzZXMsIGFsbCBhdmFpbGFibGUgb3B0aW9ucyBj YW4gYmUgbGlzdGVkIHdpdGggYG9wYW0gc2VhcmNoDQogIG9jYW1sLW9wdGlvbicuDQoNCiAgVGhl IHNvdXJjZSBjb2RlIGZvciB0aGUgYWxwaGEgaXMgYWxzbyBhdmFpbGFibGUgYXQgdGhlc2UgYWRk cmVzc2VzOg0KDQogIOKAoiA8aHR0cHM6Ly9naXRodWIuY29tL29jYW1sL29jYW1sL2FyY2hpdmUv NS4wLjAtYWxwaGExLnRhci5nej4NCiAg4oCiIDxodHRwczovL2NhbWwuaW5yaWEuZnIvcHViL2Rp c3RyaWIvb2NhbWwtNS4wL29jYW1sLTUuMC4wfmFscGhhMS50YXIuZ3o+DQoNCg0KQ2hhbmdlcyBz aW5jZSB0aGUgemVyb3RoIGFscGhhIHJlbGVhc2U6DQrilYzilYzilYzilYzilYzilYzilYzilYzi lYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzi lYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYwNCg0KUnVudGltZSBzeXN0ZW06DQri lITilITilITilITilITilITilITilITilITilITilITilITilITilITilIQNCg0KICDigKIgWyMx MTQwMF06IFJ1bnRpbWUgZXZlbnRzIGNvdW50ZXJzIGZpeGVzIEZpeGVzIG1pc21hdGNoIGJldHdl ZW4gT0NhbWwNCiAgICBhbmQgQyBBUElzLCByZW1vdmVzIGV2ZW50cyBmcm9tIDQueCB0aGF0IGFy ZSBub3QgcHJlc2VudCBpbiB0aGUgNS4wDQogICAgR0MgYW5kIGFkZHMgc29tZSBtaXNzaW5nIHBy b2Jlcy4gIChTYWRpcSBKYWZmZXIsIHJldmlldyBieSBHYWJyaWVsDQogICAgU2NoZXJlciwgRmxv cmlhbiBBbmdlbGV0dGkpDQoNCiAg4oCiIFsjMTEzNjhdOiBSdW50aW1lIGV2ZW50cyBidWZmZXIg c2l6ZSBPQ0FNTFJVTlBBUkFNUyBmaXggVGhlIHJ1bnRpbWUNCiAgICBldmVudHMgYnVmZmVyIHNp emUgY2FuIG5vdyBiZSBzZXQgdmlhIHRoZSAnZScgT0NBTUxSVU5QQVJBTS4gIFRoaXMNCiAgICBp cyBwcmV2aW91c2x5IG1pc3Rha2VubHkgZW5hYmxlZC9kaXNhYmxlZCB0cmFjaW5nIGluc3RlYWQu ICAoU2FkaXENCiAgICBKYWZmZXIsIHJldmlldyBieSBLQyBTaXZhcmFtYWtyaXNobmFuLCBEYXZp ZCBBbGxzb3BwLCBEYW1pZW4NCiAgICBEb2xpZ2V6KQ0KDQogIOKAoiBbIzExMzA0XTogRml4IGRh dGEgcmFjZSBvbiBXaW5kb3dzIGZpbGUgZGVzY3JpcHRvcnMgKE9saXZpZXIgTmljb2xlDQogICAg YW5kIFhhdmllciBMZXJveSwgcmV2aWV3IGJ5IFhhdmllciBMZXJveSwgRGF2aWQgQWxsc29wcCwg YW5kIFNhZGlxDQogICAgSmFmZmVyKQ0KDQogIOKAoiAqYnJlYWtpbmcgY2hhbmdlKiBbIzExMzM3 XTogcGFzcyAnZmxhZ3MnIG1ldGFkYXRhIHRvIHJvb3Qgc2Nhbm5lcnMsDQogICAgIHRvIG9wdGlt aXplIHN0YWNrIHNjYW5uaW5nIGluIHRoZSBieXRlY29kZSBpbnRlcnByZXRlci4gQ2hhbmdlcyB0 aGUNCiAgICAgaW50ZXJmYWNlIG9mIHVzZXItcHJvdmlkZWQgcm9vdC1zY2FubmluZyBob29rcy4g KEdhYnJpZWwgU2NoZXJlciwNCiAgICAgcmV2aWV3IGJ5IFhhdmllciBMZXJveSwgR3VpbGxhdW1l IE11bmNoLU1hY2NhZ25vbmksIFNhZGlxIEphZmZlcg0KICAgICBhbmQgVG9tIEtlbGx5KQ0KDQog IOKAoiBbIzExMTQ0XTogUmVzdG9yZSBmcmFtZS1wb2ludGVycyBzdXBwb3J0IGZvciBhbWQ2NCAo RmFicmljZSBCdW9ybywNCiAgICByZXZpZXcgYnkgRnJlZGVyaWMgQm91ciBhbmQgS0MgU2l2YXJh bWFrcmlzaG5hbikNCg0KICDigKIgKmJyZWFraW5nIGNoYW5nZSogWyMxMTI1NV06IGluIHRoZSBD IGludGVyZmFjZSwgYCZGaWVsZCh2LCBpKScgbm93DQogICAgIGhhcyB0eXBlIGB2b2xhdGlsZSB2 YWx1ZSAqJyBpbnN0ZWFkIG9mIGB2YWx1ZSAqJyBpbiBPQ2FtbCA0LiAgVGhpcw0KICAgICBtYWtl cyB0aGUgbWVtb3J5IG1vZGVsIGZvciBtaXhlZCBPQ2FtbC9DIGNvZGUgYmV0dGVyIGRlZmluZWQs IGJ1dA0KICAgICBjYW4gY2F1c2Ugd2FybmluZ3Mgb3IgdHlwZSBlcnJvcnMgaW4gdXNlciBDIGNv ZGUuIChLQw0KICAgICBTaXZhcmFtYWtyaXNobmFuLCByZXZpZXcgYnkgWGF2aWVyIExlcm95LCBH YWJyaWVsIFNjaGVyZXIgYW5kDQogICAgIEd1aWxsYXVtZSBNdW5jaC1NYWNjYWdub25pLCBhZGRp dGlvbmFsIGRpc2N1c3Npb25zIHdpdGggU3RlcGhlbg0KICAgICBEb2xhbiBhbmQgTHVjIE1hcmFu Z2V0KQ0KDQoNClsjMTE0MDBdIDxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwvb2NhbWwvaXNzdWVz LzExNDAwPg0KDQpbIzExMzY4XSA8aHR0cHM6Ly9naXRodWIuY29tL29jYW1sL29jYW1sL2lzc3Vl cy8xMTM2OD4NCg0KWyMxMTMwNF0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vY2FtbC9pc3N1 ZXMvMTEzMDQ+DQoNClsjMTEzMzddIDxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwvb2NhbWwvaXNz dWVzLzExMzM3Pg0KDQpbIzExMTQ0XSA8aHR0cHM6Ly9naXRodWIuY29tL29jYW1sL29jYW1sL2lz c3Vlcy8xMTE0ND4NCg0KWyMxMTI1NV0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vY2FtbC9p c3N1ZXMvMTEyNTU+DQoNCg0KU3RhbmRhcmQgbGlicmFyeToNCuKUhOKUhOKUhOKUhOKUhOKUhOKU hOKUhOKUhOKUhOKUhOKUhOKUhOKUhOKUhOKUhOKUhA0KDQogIOKAoiBbIzEwODY3XSwgK1sjMTEz NDVdOiBSZW1vdmUgZGVwcmVjYXRlZCB2YWx1ZXM6IOKApiwgdGhlIGluZml4IG9wZXJhdG9yDQog ICAgKC5bIF08LSkuIChOaWNvbMOhcyBPamVkYSBCw6RyLCByZXZpZXcgYnkgRGFtaWVuIERvbGln ZXopDQoNCiAg4oCiIFsjMTEzMDldLCBbIzExNDI0XSwgWyMxMTQyN106IEFkZA0KICAgIERvbWFp bi5yZWNvbW1lbmRlZF9kb21haW5fY291bnQuIChDaHJpc3RpYW5vIEhhZXNiYWVydCwgS29uc3Rh bnRpbg0KICAgIEJlbG91c292LCByZXZpZXcgYnkgRGF2aWQgQWxsc29wcCwgS0MgU2l2YXJhbWFr cmlzaG5hbiwgR2FicmllbA0KICAgIFNjaGVyZXIsIE5pY29sYXMgT2plZGEgQmFyKQ0KDQoNClsj MTA4NjddIDxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwvb2NhbWwvaXNzdWVzLzEwODY3Pg0KDQpb IzExMzQ1XSA8aHR0cHM6Ly9naXRodWIuY29tL29jYW1sL29jYW1sL2lzc3Vlcy8xMTM0NT4NCg0K WyMxMTMwOV0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vY2FtbC9pc3N1ZXMvMTEzMDk+DQoN ClsjMTE0MjRdIDxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwvb2NhbWwvaXNzdWVzLzExNDI0Pg0K DQpbIzExNDI3XSA8aHR0cHM6Ly9naXRodWIuY29tL29jYW1sL29jYW1sL2lzc3Vlcy8xMTQyNz4N Cg0KDQpUb29sczoNCuKUhOKUhOKUhOKUhOKUhOKUhA0KDQogIOKAoiBbIzExMDY1XTogUG9ydCB0 aGUgYnl0ZWNvZGUgZGVidWdnZXIgdG8gNS4wLCBhZGRpbmcgc3VwcG9ydCBmb3INCiAgICBlZmZl Y3QgaGFuZGxlcnMuIChEYW1pZW4gRG9saWdleiBhbmQgZmFiYmluZywgcmV2aWV3IGJ5IGZhYmJp bmcgYW5kDQogICAgWGF2aWVyIExlcm95KQ0KDQogIOKAoiBbIzExMzgyXTogT0NhbWxta3RvcCB1 c2UgYSBuZXcgaW5pdGlhbGl6YXRpb24gbW9kdWxlDQogICAgIk9DYW1sbWt0b3BfaW5pdCIgdG8g cHJlc2VydmUgYmFja3dhcmQtY29tcGF0aWJpbGl0eSB3aXRoDQogICAgdXNlci1tb2R1bGUgcHJv dmlkZWQgbW9kdWxlcyB0aGF0IGluc3RhbGwgdG9wbGV2ZWwgcHJpbnRlcnMuDQogICAgKEZsb3Jp YW4gQW5nZWxldHRpLCByZXZpZXcgYnkgR2FicmllbCBTY2hlcmVyIGFuZCBEYXZpZCBBbGxzb3Bw KQ0KDQoNClsjMTEwNjVdIDxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwvb2NhbWwvaXNzdWVzLzEx MDY1Pg0KDQpbIzExMzgyXSA8aHR0cHM6Ly9naXRodWIuY29tL29jYW1sL29jYW1sL2lzc3Vlcy8x MTM4Mj4NCg0KDQpJbnN0YWxsYXRpb246DQrilITilITilITilITilITilITilITilITilITilITi lITilITilIQNCg0KICDigKIgWyMxMTAwN10sIFsjMTEzOTldOiBNRVRBIGZpbGVzIGZvciB0aGUg c3RkbGliLCBjb21waWxlci1saWJzIGFuZA0KICAgIG90aGVyIGxpYnJhcmllcyAodW5peCwgZHlu bGluaywgc3RyLCBydW50aW1lX2V2ZW50cywgdGhyZWFkcywNCiAgICBvY2FtbGRvYykgYXJlIG5v dyBpbnN0YWxsZWQgYWxvbmcgd2l0aCB0aGUgY29tcGlsZXIuIChEYXZpZCBBbGxzb3BwLA0KICAg IEZsb3JpYW4gQW5nZWxldHRpLCBOaWNvbMOhcyBPamVkYSBCw6RyIGFuZCBTw6liYXN0aWVuIEhp bmRlcmVyLCByZXZpZXcNCiAgICBieSBEYW5pZWwgQsO8bnpsaSwgS2F0ZSBEZXBsYWl4LCBBbmls IE1hZGhhdmFwZWRkeSBhbmQgR2FicmllbA0KICAgIFNjaGVyZXIpDQoNCg0KWyMxMTAwN10gPGh0 dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vY2FtbC9pc3N1ZXMvMTEwMDc+DQoNClsjMTEzOTldIDxo dHRwczovL2dpdGh1Yi5jb20vb2NhbWwvb2NhbWwvaXNzdWVzLzExMzk5Pg0KDQoNCkJ1ZyBmaXhl czoNCuKUhOKUhOKUhOKUhOKUhOKUhOKUhOKUhOKUhOKUhA0KDQogIOKAoiBbIzEwNzY4XSwgWyMx MTM0MF06IEZpeCB0eXBlY2hlY2tpbmcgcmVncmVzc2lvbiB3aGVuIGNvbWJpbmluZyBmaXJzdA0K ICAgIGNsYXNzIG1vZHVsZXMgYW5kIEdBRFRzLiAoSmFjcXVlcyBHYXJyaWd1ZSwgcmVwb3J0IGJ5 IEZyYW7Dp29pcw0KICAgIFRoaXLDqSwgcmV2aWV3IGJ5IE1hdHRoZXcgUnlhbikNCg0KICDigKIg WyMxMDc5MF06IGRvbid0IGRyb3AgdmFyaWFuY2UgYW5kIGluamVjdGl2aXR5IGFubm90YXRpb25z IHdoZW4NCiAgICBwcmV0dHkgcHJpbnRpbmcgYHdpdGgnIGNvbnN0cmFpbnRzIChmb3IgZXhhbXBs ZSwgYHdpdGggdHlwZSArISdhIHQgPQ0KICAgIC4uLicpLiAoRmxvcmlhbiBBbmdlbGV0dGksIHJl cG9ydCBieSBMdWtlIE1hdXJlciwgcmV2aWV3IGJ5IE1hdHRoZXcNCiAgICBSeWFuIGFuZCBHYWJy aWVsIFNjaGVyZXIpDQoNCiAg4oCiIFsjMTEyODldLCBbIzExNDA1XTogZml4IHNvbWUgbGVha3Mg b24gc3lzdGhyZWFkIHRlcm1pbmF0aW9uIChGYWJyaWNlDQogICAgQnVvcm8sIEVuZ3VlcnJhbmQg RGVjb3JuZSwgR2FicmllbCBTY2hlcmVyLCByZXZpZXcgYnkgWGF2aWVyIExlcm95DQogICAgYW5k IEZsb3JpYW4gQW5nZWxldHRpLCByZXBvcnQgYnkgUm9tYWluIEJlYXV4aXMpDQoNCiAg4oCiIFsj MTEzMTRdLCBbIzExNDE2XTogZml4IG5vbi1pbmZvcm1hdGl2ZSBlcnJvciBtZXNzYWdlIGZvciBt b2R1bGUNCiAgICBpbmNsdXNpb24gKEZsb3JpYW4gQW5nZWxldHRpLCByZXBvcnQgYnkgVGhpZXJy eSBNYXJ0aW5leiwgcmV2aWV3IGJ5DQogICAgR2FicmllbCBTY2hlcmVyKQ0KDQogIOKAoiBbIzEx MzU4XSwgWyMxMTM3OV06IFJlZmFjdG9yIHRoZSBpbml0aWFsaXphdGlvbiBvZiBieXRlY29kZQ0K ICAgIHRocmVhZGluZywgVGhpcyBhdm9pZHMgYSAiZGFuZ2xpbmcgcG9pbnRlciIgd2FybmluZyBv ZiBHQ0MNCiAgICAxMi4xLiAoWGF2aWVyIExlcm95LCByZXBvcnQgYnkgQXJtYcOrbCBHdcOpbmVh dSwgcmV2aWV3IGJ5IEdhYnJpZWwNCiAgICBTY2hlcmVyKQ0KDQogIOKAoiBbIzExMzg3XSwgbW9k dWxlIHR5cGUgd2l0aCBjb25zdHJhaW50cyBubyBsb25nZXIgY3Jhc2ggdGhlIGNvbXBpbGVyDQog ICAgaW4gcHJlc2VuY2Ugb2YgYm90aCBzaGFkb3dpbmcgd2FybmluZ3MgYW5kIHRoZSBgLWJpbi1h bm5vdCcgY29tcGlsZXINCiAgICBmbGFnLiAoRmxvcmlhbiBBbmdlbGV0dGksIHJlcG9ydCBieSBD aHJpc3RvcGhlIFJhZmZhbGxpLCByZXZpZXcgYnkNCiAgICBHYWJyaWVsIFNjaGVyZXIpDQoNCg0K WyMxMDc2OF0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vY2FtbC9pc3N1ZXMvMTA3Njg+DQoN ClsjMTEzNDBdIDxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwvb2NhbWwvaXNzdWVzLzExMzQwPg0K DQpbIzEwNzkwXSA8aHR0cHM6Ly9naXRodWIuY29tL29jYW1sL29jYW1sL2lzc3Vlcy8xMDc5MD4N Cg0KWyMxMTI4OV0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vY2FtbC9pc3N1ZXMvMTEyODk+ DQoNClsjMTE0MDVdIDxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwvb2NhbWwvaXNzdWVzLzExNDA1 Pg0KDQpbIzExMzE0XSA8aHR0cHM6Ly9naXRodWIuY29tL29jYW1sL29jYW1sL2lzc3Vlcy8xMTMx ND4NCg0KWyMxMTQxNl0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vY2FtbC9pc3N1ZXMvMTE0 MTY+DQoNClsjMTEzNThdIDxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwvb2NhbWwvaXNzdWVzLzEx MzU4Pg0KDQpbIzExMzc5XSA8aHR0cHM6Ly9naXRodWIuY29tL29jYW1sL29jYW1sL2lzc3Vlcy8x MTM3OT4NCg0KWyMxMTM4N10gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vY2FtbC9pc3N1ZXMv MTEzODc+DQoNCg0KT3RoZXIgT0NhbWwgTmV3cw0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCkZyb20gdGhlIG9jYW1sLm9yZyBibG9nDQrilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIANCg0KICBIZXJlIGFyZSBsaW5rcyBmcm9tIG1hbnkgT0NhbWwgYmxvZ3MgYWdncmVnYXRl ZCBhdCBbdGhlIG9jYW1sLm9yZw0KICBibG9nXS4NCg0KICDigKIgW1RhcmlkZXMgaXMgb24gdGhl IFdhdmVzdG9uZSBSYWRhciFdDQoNCg0KW3RoZSBvY2FtbC5vcmcgYmxvZ10gPGh0dHBzOi8vb2Nh bWwub3JnL2Jsb2cvPg0KDQpbVGFyaWRlcyBpcyBvbiB0aGUgV2F2ZXN0b25lIFJhZGFyIV0NCjxo dHRwczovL3RhcmlkZXMuY29tL2Jsb2cvMjAyMi0wNy0xOS10YXJpZGVzLWlzLW9uLXRoZS13YXZl c3RvbmUtcmFkYXI+DQoNCg0KT2xkIENXTg0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgSWYg eW91IGhhcHBlbiB0byBtaXNzIGEgQ1dOLCB5b3UgY2FuIFtzZW5kIG1lIGEgbWVzc2FnZV0gYW5k IEknbGwgbWFpbA0KICBpdCB0byB5b3UsIG9yIGdvIHRha2UgYSBsb29rIGF0IFt0aGUgYXJjaGl2 ZV0gb3IgdGhlIFtSU1MgZmVlZCBvZiB0aGUNCiAgYXJjaGl2ZXNdLg0KDQogIElmIHlvdSBhbHNv IHdpc2ggdG8gcmVjZWl2ZSBpdCBldmVyeSB3ZWVrIGJ5IG1haWwsIHlvdSBtYXkgc3Vic2NyaWJl DQogIFtvbmxpbmVdLg0KDQogIFtBbGFuIFNjaG1pdHRdDQoNCg0KW3NlbmQgbWUgYSBtZXNzYWdl XSA8bWFpbHRvOmFsYW4uc2NobWl0dEBwb2x5dGVjaG5pcXVlLm9yZz4NCg0KW3RoZSBhcmNoaXZl XSA8aHR0cHM6Ly9hbGFuLnBldGl0ZXBvbW1lLm5ldC9jd24vPg0KDQpbUlNTIGZlZWQgb2YgdGhl IGFyY2hpdmVzXSA8aHR0cHM6Ly9hbGFuLnBldGl0ZXBvbW1lLm5ldC9jd24vY3duLnJzcz4NCg0K W29ubGluZV0gPGh0dHA6Ly9saXN0cy5pZHlsbC5vcmcvbGlzdGluZm8vY2FtbC1uZXdzLXdlZWts eS8+DQoNCltBbGFuIFNjaG1pdHRdIDxodHRwczovL2FsYW4ucGV0aXRlcG9tbWUubmV0Lz4NCg0K --=-=-= 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 July 19 to 26, 2022.

Help w. my first GADT : unwrapping Sqlite3.Data.t

Philippe Strauss asked

I would like to convert sqlite3-ocaml returns from Sqlite3.Data.t array to = plain ocaml types in a tuple. I guess unwrapping the Data.t can be done using a GADT, here's my very very first a= ttempt:

(* simulate Sqlite3.Data.t *)

type t =3D
| NONE
| NULL
| INT of int64
| FLOAT <=
span style=3D"color: #a020f0;">of float
| TEXT of string
| BLOB of string ;;

(* a=
 simple GADT to unwrap Sqlite3.Data.t *)

type _ dbval =3D
    | INT=
 : int64 -> int64 dbval
    | FLOAT : float -> float dbval
    | TEXT : string -> string dbval
    | BLOB : string -> string dbval
    | NONE | NULL =
;;

let unwrap_data : <=
/span>type a. a dbval -> a =3D fun dbval ->
    match dbval with
    | INT=
 x -> x
    | FLOAT x -> x
    | TEXT str -> str
    | BLOB str -> str ;;

let tuple_of_array4 ( t array) =3D
    assert (Array.length arr =3D 4) ;
    (unwrap_data arr.(0), unwrap_data arr.(1), unwrap_data arr.(2), unwrap_=
data arr.(3)) ;;

Compilation fails with this typing error:

File "database.ml", line 233, characters 17-24:
233 |     (unwrap_data arr.(0), unwrap_data arr.(1), unwrap_data arr.(2), u=
nwrap_data arr.(3)) ;;
                       ^^^^^^^
Error: This expres=
sion has type t but an expression was expected of type
         'a dbval

What am I doing wrong? I need to make type t compatible with type 'a dbval. Thanks in advance.

octachron replied

You cannot make the type t and 'a dbval compatibl= e, there are different types.

A very important point to keep in mind with GADTs is that one cannot create= type-level information from dynamical values. In other words, there are no functions of type ~ x : t -> f(x) = dbval~that will infer the type of its return from the value of its argument in OCaml.

Thus the type of the final result must come from your code source rather th= an from the dynamical data. For instance, you can define constructor from the type t to th= e right dbval type:

exception Type_error

let int: t -> _ =
dbval =3D function
| INT x -=
> INT x
| _ -> raise Type_error

let float: t -> =
_ dbval =3D function
| FLOAT x=
 -> FLOAT x
| _ -> raise Type_error

Then if you know the type of the tuple, you can write it as:

let tuple_of_array4 (arr: t =
array) =3D
    assert (Array.length arr =3D 4) ;
    int arr.(0), int arr.(1), int arr.(2), int arr.(3)

or possibly as

let int4 =3D int, int, i=
nt, int
let tuple (a=
,b,c=
,d) arr =3D
  assert (Array.length arr =3D 4) ;
  a arr.(0), b arr.(1), c arr.(2), d arr.(3)

There are more complex alternatives based on type witness, that allow to im= plement a form of static matching over the dynamical type of data, but the core idea that the types are always present= in the source code in some way is the same.

Philippe Strauss then said

Oh I didn't noticed it would be dynamical typing! I'm too used to ppx (and = previously camlp4) written db abstraction layer!

I'm simply replacing sqlexpr by plain sqlite3-ocaml in some existing code o= f mine. sqlexpr quick doco:

https://github.com/mfp/oca= ml-sqlexpr

But I can live with a Data.t array!

Yawar Amin then added

Everybody has their favourite way of wrapping SQLite. Here's mine (no PPX): https://github.com= /yawaramin/ocaml_sql_query

It has a little data translation layer to convert from Data.t = array to the desired return type.

DocuLib 3.1.2 and MetaDB 1.0.2 now on OPAM

nguermond announced

I'm pleased to announce the release of doculib and metad= b, now available on OPAM.

DocuLib is a GUI for document management, particularly for all the t= extbooks and articles you've accumulated but know you'll never read :thinking:. The idea of DocuLib is to keep track of = metadata of files stored across multiple libraries on your file system in such a way that you can move, reorganize, = or rename a file without losing your metadata. You can additionally lookup metadata on openlibrary.org or semanticscholar.org. DocuLib will also warn about missing and duplicate files. Stored metadata presently includes autho= r, title, year, tags, and DOI/ISBN.

3D"fa064cd32b=

For more screenshots and details: https://github.com/nguermond/doculib

Metadb is the JSON database for manipulating file metadata underlyin= g DocuLib, in hopes that it may be useful somewhere else. Data is stored in the following way:

path/to/library
|- .metadata
   |- ./foo.txt.json
   |- ./blah/bar.pdf.json
   |- ./foobar.pdf.json
|- ./foo.txt
|- ./blah/bar.pdf
|- ./foobar.pdf

For documentation: https://= github.com/nguermond/metadb

dune 3.4.0

Etienne Millon announced

On behalf of the dune team, I=E2=80=99m pleased to announce the release of = version 3.4.0.

Bug fixes, a couple new features, better hints and error messages - I won't= restate what's in the changelog below. Thanks to everyone involved in this release!

  • Make dune describe correctly handle overlapping implementa= tions for virtual libraries (#5971, fixes #5747, @esope)
  • Building the @check alias should make sure the libraries a= nd executables don't have dependency cycles (#5892, @rgrinberg)
  • [ctypes] Add support for the errno parameter using the errno_policy field in the ctypes settings. (#5827, @droyo)
  • Fix dune coq top when it is invoked on files from a subdir= ectory of the directory containing the associated stanza (#5784, fixes #5552, @ejgallego, @rlepigre, @Alizter)
  • Fix hint when an invalid module name is found. (#5922, fixes #5273, @em= illon)
  • The (cat) action now supports several files. (#5928, fixes= #5795, @emillon)
  • Dune no longer uses shimmed META files for OCaml 5.x, sole= ly using the ones installed by the compiler. (#5916, @dra27)
  • Fix handling of the (deps) field in (test) st= anzas when there is an .expected file. (#5952, #5951, fixes #5950, @emillon)
  • Ignore insignificant filesystem events. This stops RPC in watch mode fr= om flashing errors on insignificant file system events such as changes in the .git/ directory. (#5953, @rgrinberg)
  • Fix parsing more error messages emitted by the OCaml compiler. In particular, messages where the excerpt line number started with a blank character were skipped. (#5981, @rgrinberg)
  • env stanza: warn if some rules are ignored because they appear after a wildcard rule. (#5898, fixes #5886, @emillon)
  • On Windows, XDG_CACHE_HOME is taken to be the FOLDERID_InternetCa= che if unset, and XDG_CONFIG_HOME and XDG_DATA_HOME are both taken to be FOLDERID_LocalAppData if unset. (#5943, fixes #5808, @nojb)

Etienne Millon then added

This broke 32-bit cygwin installations, so 3.4.1 was released with a fix.

OCaml 5.0, first normal alpha release

octachron announced

The stabilisation of OCaml 5.0 has been progressing well during the last mo= nth. We have thus released a first normal alpha release of OCaml 5.0.0 to help fellow hackers join us early in our bug hunting and opam ecosystem fixing f= un (see below for the installation instructions).

You can follow the progress in stabilising the opam ecosystem on

https://g= ithub.com/ocaml/opam-repository/issues/21526

If you find any bugs, please report them here:

https://github.com/ocaml/= ocaml/issues

Compared to the zeroth alpha release, this alpha release restores the suppo= rt for the bytecode debugger, and integrates a change of type in the FFI API t= hat might trigger some warnings in FFI code.

We also have a change in the installed files: the compiler distributes now = its own META files rather than relying on either findlib or dune to provide tho= se files. This should simplify the tasks of both tools in future version.

Note there are still some changes expected in the Effect module before the = next candidate release. Generally, both the Effect and Domain modules are still experimental and might change API even during the beta releases.

If you are interested by the ongoing list of bug fixes, the updated change log for OCaml 5.0.0 is available at:

https://github.= com/ocaml/ocaml/blob/5.0/Changes

A short summary of the changes since the zeroth alpha release is also avail= able below.

Installation instructions

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

opam update
opam switch create 5.0.0~alpha1

For previous version of opam, the switch creation command line is slightly = more verbose:

opam update
opam switch create 5.0.0~alpha1 --repositories=3Ddefault,beta=3Dgit+https:/=
/github.com/ocaml/ocaml-beta-repository.git

If you want to test this version, it is strongly advised to install the alp= ha opam repository

https://gi= thub.com/kit-ty-kate/opam-alpha-repository

with

opam repo add alpha git+https://github.com/kit-ty-kate/opam-alpha-repositor=
y.git

You can check that the alpha repository has been correctly installed with

$ opam repo

<><> Repository configuration for switch 5.0.0~alpha1 <>&=
lt;><><><><><><><><><=
><><>
 1 alpha   git+https://github.com/kit-ty-kate/opam-alpha-repository.git
 2 default https://opam.ocaml.org

This alpha repository contains various fixes in the process of being upstre= amed which vastly increases the number of opam packages currently compatible with OCam= l 5.0.0 .

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

opam update
opam switch create <switch_name> ocaml-variants.5.0.0~alpha1+options =
<option_list>

where option_list is a comma separated list of ocaml-opt= ion-* packages. For instance, for a flambda and no-flat-float-array switch:

opam switch create 5.0.0~alpha1+flambda+nffa ocaml-variants.5.0.0~alpha1+op=
tions ocaml-option-flambda
ocaml-option-no-flat-float-array

The command line above is slightly more complicated for opam version anteri= or to 2.1:

opam update
opam switch create <switch_name> --packages=3Docaml-variants.5.0.0~al=
pha1+options,<option_list>
--repositories=3Ddefault,beta=3Dgit+https://github.com/ocaml/ocaml-beta-rep=
ository.git

In both cases, all available options can be listed with opam search o= caml-option.

The source code for the alpha is also available at these addresses:

Changes since the zeroth alpha release:

Runtime system:
  • #11400: Run= time events counters fixes Fixes mismatch between OCaml and C APIs, removes events from 4.x that are not present in the 5.0 GC and adds some missing probes. (Sadiq Jaffer, review by Gabriel Scherer, Florian Angeletti)
  • #11368: Run= time events buffer size OCAMLRUNPARAMS fix The runtime events buffer size can now be set via the 'e' OCAMLRUNPARAM. This is previously mistakenly enabled/disabled tracing instead. (Sadiq Jaffer, review by KC Sivaramakrishnan, David Allsopp, Damien Doligez= )
  • #11304: Fix= data race on Windows file descriptors (Olivier Nicole and Xavier Leroy, review by Xavier Leroy, David Allsopp, and Sadiq Jaffer)
  • breaking change #11337: pass 'flags' metadata to root scanners, to optimize sta= ck scanning in the bytecode interpreter. Changes the interface of user-prov= ided root-scanning hooks. (Gabriel Scherer, review by Xavier Leroy, Guillau= me Munch-Maccagnoni, Sadiq Jaffer and Tom Kelly)
  • #11144: Res= tore frame-pointers support for amd64 (Fabrice Buoro, review by Frederic Bour and KC Sivaramakrishnan)
  • breaking change #11255: in the C interface, &Field(v, i) now h= as type volatile value * instead of value * in OC= aml 4. This makes the memory model for mixed OCaml/C code better defined, = but can cause warnings or type errors in user C code. (KC Sivaramakrishnan,= review by Xavier Leroy, Gabriel Scherer and Guillaume Munch-Maccagnoni, ad= ditional discussions with Stephen Dolan and Luc Maranget)
Standard library:
  • #10867, +#11345: Remove de= precated values: =E2=80=A6, the infix operator (.[ ]<-). (Nicol=C3=A1s = Ojeda B=C3=A4r, review by Damien Doligez)
  • #11309, #11424, #11427: Add Domain.recomm= ended_domain_count. (Christiano Haesbaert, Konstantin Belousov, review by D= avid Allsopp, KC Sivaramakrishnan, Gabriel Scherer, Nicolas Ojeda Bar)
Tools:
  • #11065: Por= t the bytecode debugger to 5.0, adding support for effect handlers. (Damien= Doligez and fabbing, review by fabbing and Xavier Leroy)
  • #11382: OCa= mlmktop use a new initialization module "OCamlmktop_init" to preserve backward-compatibility with user-module provided modules that inst= all toplevel printers. (Florian Angeletti, review by Gabriel Scherer and David Allsopp)
Installation:
  • #11007, #11399: META files= for the stdlib, compiler-libs and other libraries (unix, dynlink, str, run= time_events, threads, ocamldoc) are now installed along with the compiler. = (David Allsopp, Florian Angeletti, Nicol=C3=A1s Ojeda B=C3=A4r and S=C3=A9b= astien Hinderer, review by Daniel B=C3=BCnzli, Kate Deplaix, Anil Madhavape= ddy and Gabriel Scherer)
Bug fixes:
  • #10768, #11340: Fix typech= ecking regression when combining first class modules and GADTs. (Jacques Ga= rrigue, report by Fran=C3=A7ois Thir=C3=A9, review by Matthew Ryan)
  • #10790: don= 't drop variance and injectivity annotations when pretty printing wit= h constraints (for example, with type +!'a t =3D ...). = (Florian Angeletti, report by Luke Maurer, review by Matthew Ryan and Gabri= el Scherer)
  • #11289, #11405: fix some l= eaks on systhread termination (Fabrice Buoro, Enguerrand Decorne, Gabriel S= cherer, review by Xavier Leroy and Florian Angeletti, report by Romain Beau= xis)
  • #11314, #11416: fix non-in= formative error message for module inclusion (Florian Angeletti, report by = Thierry Martinez, review by Gabriel Scherer)
  • #11358, #11379: Refactor t= he initialization of bytecode threading, This avoids a "dangling pointer" w= arning of GCC 12.1. (Xavier Leroy, report by Arma=C3=ABl Gu=C3=A9neau, revi= ew by Gabriel Scherer)
  • #11387, mod= ule type with constraints no longer crash the compiler in presence of both = shadowing warnings and the -bin-annot compiler flag. (Florian = Angeletti, report by Christophe Raffalli, review by Gabriel Scherer)

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

--=-=-=--