From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Authentication-Results: plum.tunbury.org; dkim=pass (1024-bit key; unprotected) header.d=inria.fr header.i=@inria.fr header.a=rsa-sha256 header.s=dc header.b=eK4cZCty; dkim-atps=neutral Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=192.134.164.83; helo=mail2-relais-roc.national.inria.fr; envelope-from=caml-list-owner@inria.fr; receiver=tunbury.org Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by plum.tunbury.org (Postfix) with ESMTP id C8E3B40087 for ; Tue, 7 Apr 2026 09:32:45 +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=EBCIzrT0jHmK1YQmLZjwFCGAwcyLAz0Iqx+PeTbQpZw=; b=eK4cZCtyhZDMzJ55HiTEUZsVXd1CcGJxOncwLVWI1wTEq/6SCf6jxMo3 L3aSRzXbMkcyXObG4XGveDbQOpvQbQGIgnG4TTLR4y+Vqi/zGHN7FSrwI EjfXCFwT3zqQ7sh7mXmnmPWy5xn+gSVC85cpqf1pjwQyJUp5YEsK+POXX g=; X-CSE-ConnectionGUID: ZCTLOwJlRgm41OMStczbsQ== X-CSE-MsgGUID: re/9fWmfTPaxU5h7+0FCsw== Authentication-Results: mail2-relais-roc.national.inria.fr; dkim=none (message not signed) header.i=none; spf=SoftFail smtp.mailfrom=caml-list-owner@inria.fr; spf=None smtp.helo=postmaster@prod-sympa-app.inria.fr Received-SPF: SoftFail (mail2-relais-roc.national.inria.fr: domain of caml-list-owner@inria.fr is inclined to not designate 128.93.162.27 as permitted sender) identity=mailfrom; client-ip=128.93.162.27; receiver=mail2-relais-roc.national.inria.fr; envelope-from="caml-list-owner@inria.fr"; x-sender="caml-list-owner@inria.fr"; x-conformance=spf_only; x-record-type="v=spf1"; x-record-text="v=spf1 ip4:128.93.142.0/24 ip4:192.134.164.0/24 ip4:128.93.162.160 ip4:128.93.162.3 ip4:128.93.162.88 ip4:89.107.174.7 mx ~all" Received-SPF: None (mail2-relais-roc.national.inria.fr: no sender authenticity information available from domain of postmaster@prod-sympa-app.inria.fr) identity=helo; client-ip=128.93.162.27; receiver=mail2-relais-roc.national.inria.fr; envelope-from="caml-list-owner@inria.fr"; x-sender="postmaster@prod-sympa-app.inria.fr"; x-conformance=spf_only X-IronPort-AV: E=Sophos;i="6.23,165,1770591600"; d="asc'?scan'208,217";a="271269486" Received: from prod-sympa-app.inria.fr ([128.93.162.27]) by mail2-relais-roc.national.inria.fr with ESMTP; 07 Apr 2026 11:32:43 +0200 Received: by prod-sympa-app.inria.fr (Postfix, from userid 990) id ABA0981ADA; Tue, 7 Apr 2026 11:32:43 +0200 (CEST) Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by prod-sympa-app.inria.fr (Postfix) with ESMTP id 9F76481AA2 for ; Tue, 7 Apr 2026 11:32:30 +0200 (CEST) X-CSE-ConnectionGUID: 4kYcNs+cT4uFaP3zJ/7vyA== X-CSE-MsgGUID: UyyArz5PSNuCim3ou3y26Q== IronPort-SDR: 69d4cf2c_wkOQYbSlIXi04fKTNGVdJ06DapsaEiQGwW05GSVj87cJEUQ XR21gWR8LvfHVmXyYCpuUnHrpAZN7LH3AZ8/r3Q== X-ThreatScanner-Verdict: Negative X-IPAS-Result: =?us-ascii?q?A0EHAwA8ztRpjyIeaIFahBZbKRoBbF8zBwhJA4QZPINPC?= =?us-ascii?q?Y4cgRaQN4I8hlZZgRCBaYERAxgWIQIOBwEDAQgFLgEFGgECBAEBAwECAYIMg?= =?us-ascii?q?i5GAhaNFQIfBgEENBMBAgQBAQEBAwIDAQEBAQEBAQEBAQELAQEFAQEBAgEBA?= =?us-ascii?q?gQGAQIQAQEBAQEBOQVJhhUHMw2CRVFxYQQDBjcBAQEBAQEBAQEBAQEBAQEBA?= =?us-ascii?q?QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECBAgBEQgBFmAOAQgKEwEBKQkGG?= =?us-ascii?q?CMDEAQBBgMCBA0BNQMBEwESFAaCEFgBgiICTwMFDAY/mVqacxo3eoEygQGCD?= =?us-ascii?q?AEBBoEIPgIBBQEMAQ4J2jeBXgkJgTUYgViEGYJKDw0BBSVJagIBAoRPCYQ2J?= =?us-ascii?q?w+BVUSBFYIoSgdvgVABeRcBAQEBAYEjBA4GAQEGRgEJgyWCaYIRFXoUg1oGg?= =?us-ascii?q?UaBB3BuBR0BLiyHC4FmA1ksAVUTFwsHBV6BCAMqLy1uMh2BIz4XNFgbBwWBS?= =?us-ascii?q?4Y0gWGBE4N3cQMLbT03FBuKGxAhDYEgQxkngTsvCAZ8DxcrAQoJFgEBIAI2O?= =?us-ascii?q?QcDGREIBA4FBAQBHgITEgsNHg+SUggIChYqnXSTWR1tNAeEH4FeBgyJCIEmg?= =?us-ascii?q?12DfoQLiiGEBIFXizyHApJSIphkIoI2hyiBJgmBbx9Mg2yBN4NXjDosBAQLh?= =?us-ascii?q?UWBfyOBKx4MBzMaMEOCMwEzCUYcD4k2hh8BCIJDQX2BJnopUTsHAlHAIkE1A?= =?us-ascii?q?gEBCjEHAgcBCwSFTh0BAYwHM4FLAQE?= IronPort-PHdr: A9a23:W3ZlbhS/jX4K6qGYEAuFtZUEm9psommRAWYlg6HPa5pwe6iut67vI FbYra00ygOSAMODs7ke07CJ++C4ACpcusrH6ChDOLV3FDY7yuwu1zQ6B8CEDUCpZNXLVAcdW OlkahpO0kr/D3JoHt3jbUbZuHy44G1aMBz+MQ1oOra9QdaK3Iy42O+o5pLcfRhDiiajbrNuN hW2qhjautULjYd4Jas8xBvErmFUd+hKym9kO06fkwj+68yt+JJv7zlct+gu+sNOXqj2Zbg0Q aBdAD87L207+crnuAXMQgeI+nYSSHgdnABSAwjC4hH6X5PxvTX/u+FgxiSUPtD4QK4tVzi64 KllUBDnhD4ZOjA27W/bksN/gr5VrxKnvBx/3pXbYJqJO/pkf6PSZs0VSGxcVctMTSNBA4e8b 4wSD+odOOtTsofwq0cSoRa4GAKjA/7hyiJThn/uw6I1z/ghHw/B3AwlBd0OsXLUp8jxOKodV e25ya/FxijBYfxLwzfw8IjGfA48r/+CXrx/ftbexFIgFw/ZlFids5DpMy+X2+kLrmOV7/BgV eWqi2M/twxxpiKgxsExgYfUmo0VylXE9SRlwIYpONa1T1R0Ydq+H5tWrS2aLJd5QsMnQ2Fpp CY61qYLuYa8fCgOyJUn2wDQZOCHc4iO4xLjTfuRLiliiHJiYrK/iA+//E69weLzSse6ykxFr jZZktbSrHAN0QTe58eDR/dg40qtxSiD2g7T5OxKP005iarWJp09z7A/ipYevkrNEjLolEnok aObaEUq9+qo5en6f7jropyROo5ohgz4L68glMu/AeEiPQgPWWiW4fy826P//U34XLVFkOU2k q7csJDfO8sXvKi5DBFJ0oo77BawEy2p0NEcnXUdK1JFYh2Hg5D1NFHJPf/3E+ywjEq2kDdk3 fzGJqfuAprTIXTbkrfhYK1961JdyAo1099T/ZZUCrYFIP7rRkDxs8HXAQEiPAOq2ebnB89x1 oQEWWKAGqOYPqLSsVyJ5uI3PeaDeY4VtyznJ/gi/f7ugmc1mVsHcqmyw5QYdG24Hu54LEqFe 3rsn8sBHnkQsgowVuzmkFiCXiBJZ3azUKI84Sw7CY28AYfEWICtgKSN3Ci6Hp1KZmBGF0uDH W30eIWDXvcAcDiSIsh7nTMZULiuUZch2QurtADn07ZnIevU+jEYtZL+z9d5/ezTlRYq+TxuE cuSz2aNT2Bwnm8SQD82xq9/rVRzy1qNy6R4hOZYFdNL6/NSSAg6M4LTz+x9C9zoRw3OYMmJR E6+Qtq8GjExUsw+zMQPY0Z7AdmtkhfD3y+yD7AOkLyEHoY0/b/T33frIsZy1XnG27c/gFklW MdAKWqmhqtn+wjUH47GjUOZl7q0eqQYwiHN8XmMzXaUvEBYSgJwUKLFUWgDaUvWt9v54EzCQ KG1Cbg9NwtO1NaOKqpMat3zjFVJXu3vONrEY2+3hmy+Bg6Iy6uRYIb0f2gRxjjRBFQLngwJ8 3uKKRIyCymurm7GETBjG0/jb1ny/eR+p363VFI4wgCUY0F7yba49RAYiPqBQP0JxL0Eoj0uq zBsEVa9wd3WD92AqhJkfKRTfN8x+k9H1WXdtw19IpyvMbxthl4YcwR2pkPuygt4Bp9Hkcgwo 3Mm1AtyKaSG31Ndbz6UwI78N7nNJmXv4ByiZLTa11/C3NqM9KoC5+w0q1D5swGoEkoi/W9n0 95Q03aE+5vEEBccXY7pX0os6xZ6oLDabzEj6o3VzXBsKa60sjvC2tI1GuQq1hagf9FeMKOdC Q/9DdcWB8+0KOwlg1WmdBYEM/pU9KIuJMOpa/uG2KuqPOZ8gDKrln9I4Idg0kKK6yVzVPXI0 4wAw/yX0QqLTTD8jE2usszvg4BLeSkSHnajySjjHINeerd9fYMPCWu3J823x85+h4L2Vn5D9 F+jAksG19WzdRqTaVz9xwxQ2l4NrXypgyu01zp0nCoxoaqFwCPO2/jidAYAOmNTWWVulVjsL pazj94ZRkaldwgnmge96Ubg2adbuqdxIXPLTEdNcCn6MntuUrO3trqGY89P9I0nvjlXUOS6Y FCaU6P9rAUA3yPkBWteyyg3eCypupX4mhx3kHqTInl9o3THZc992RHR6MTBSv5UxDUGXjV3h CHPCFalJ9en8s2Yl4zbsuCwT2+vTIFefzT2w4+Yryu7/WNqDgW/n/+tnt3nFhA33zXn2td3S Cub5Cr7N8PvyKLwebZjYU9AAED6rcx3Btc62oA5gZVV3XkBmr2U+2AGmCH9K4Z1w6X7OVMJT DhD+NXV5Qn5xAU3J3aAwcTiXXWYw9d9T8G9ZnIK1yk96cFTFarS66ZLy3gm6mGkpB7cNKAu1 gwWzuEjvSJL6wlokA8kzyHHR6sXAVEdJyvn0RKB89G5qqxTImepa7m5kkRkzpi6FL/XhAZaV T7if4s6Wzdq55B2NFvKlmb46oTlZMX4ddUXpwGZmBfGjvFIJdQ2jPVZzTF/NzfFtGY+g/U+k QQo2Ji7uIadLGA4x5iCWksfDDr0Mug8rynqibdCk82W2YG2A5gnHS8ECZLsRPTuCzkSsPX7K y6EFyA6oXqAX7+DDUmY8kg152nXHcWTPmqMbGIc0c0kRBSZIxlHhxsIWTwhgpMjPgW6nYr5d 0No+j0a5lj5swZBjOVyOHETS0/5owGlIncxQZmbdl9N6x1aol3SOoqY5/5yGCdR+tugqhaMI yqVfVYAC2ZBQUGCC135W9vmrdDd7+iVAPa/JPrScP2Pr+JZTfKB2ZOo1MNv4T+NMsyFOnQqA ec83wJPWnVwGsKRnDtqKWRfnibEaYiArxe5+zFrhti49OX3VQnv44qWFrYUNs9guli3jaqFK ++MlXNhMz8Ls/FEjXTMybUZwBsTk3Q3LWjrSOxc83WVCvmMyco1R1YBZih+NdVF9fc51whJY 4vAj8/tk6R/hbgzAktEUlronoeoY9YLKiezLgCiZg7DObKYKDnM28yyb7m7TOgat99v70j3g zGaRmTMayyEkyj1WhuvN+BVkSzdOwZR7Yi5exArEmPjSdP6djWxN8JxhjAth7holjXNL2FWY l0eOwtd66ad6y9VmKA1EmhI6Dx+JumBmjqFx/HfLocKvPBrBCVtiu8c5241gegwjmkMVLl+n y3cqcRrqletn7yUyzZpZxFJry5CmIOBuUgK1bzxzpBbQj6E+RsM6T/VEBEWv55/DdapvalMy 9/Jnaa1KTFY8tuS89FOT8TTLcuGNjImP3+LUHbvNjBdGHmRMmCKrGMIiPaW52GYpZg8q4Hxl dwJULAOXVg8ELUBAURgHcAeCJ1wQzUvnKXdiZIYo32ko3yzDI1Ws4vGWfSbHfj0YG/D3P8dP 0dOmuu+dthbP5azw0F4b1hmgInGU1HdW9xAuGwEDEd8oUlA9mR/Unxm3kvkbg2353pAXfWwn xMwlk5/ebF0rmaqug9rYAGS4nBswyxT0Z3/jDuccSD8NvK1VIBSUW/vslQpd4n8SEBzZBGzm kptMHHFQahQhv1ubzMO6keUtJ1RFPpbVaABbgUXwKTdXM8TiQEbkCKmkGRosPPCDYp+mQAqd 5+1sn8G3BhsOdcxLKqWP6FJy1lMmoqEuTKu3e0qhgpCNwAK6mzYK0tq8AQYc6IrISal5Lkm0 ja5w24EQm8NAtEF9+pt8lIhNu+AySP5zrMFLVq+YuWbJqXfoGPAkM+UXns60V4OnEReu70qw YEkaUXeBCVNhPOBUh8OM8TFMwRcacFfoWPScSi5uuLI2ZtpPo+5G7OgXaqUua0TmE7hABcxE tFG8JEaBpf1mhK9T4+vPPsfxB4q/giuOFiVEKEDZkeQiDle64K+1MMlhNMMYGhFXSMmaWPsu v6Upxd20qPZDZFvOitcBdNCbS9TOoXy2C9B4yYRVX/uiLtfllLEtmej7mfRFGeuNYI7PaXIP B80Wtjkpjwyrvrk11KIoseFfASYfZwhu8eRu7lC/8/VV6pYFesk4RaAl4QKFSPxDWKdToLqf 9C1Yo0oJ7QYE16CW0ekw3IwRsb1ZpO2K7SQxBvvTsBSuZWa2zYqMYm8ECsfElF+vbNL6KV5b AwFK501BHyg/xw5LLC6KRyE38+GRnb0byNRS+hDwO66Yb1O0idqafW1gHctVZA1yeCr/FVFH ctbyEiGmbD4P88FDWD6ARk/M03XqDA8lnR9O+p62eo5zB7S8BEdPz2NaO11eTlEstU7VhuZJ XR7DHZ9RkfJ1NCSpFf0g/ZJp20Gw4Uxs6UNqnX1s57BbSj5XaWqrc+QqC88dZ08pKY3N4X/I 8yAvZeYnzrFTZCWvBfWNUzyX/dchNVUJzpVBfdSnmRwc/c8gtIUrnA2V5IVCOlXD609ur2ha TxlFDMfiygDWNaJ2DUExPy3277bigu4epM/NhcJq9NH3stbVDR5KHB7xufrR8DNmmmIR3Jea h8U9hhJ7Rkcm5VYe/C8ppLPSI5QxjVWpfNtTyaNEYNnvQieKCnekR3zT/OvlPas1ARZwaf30 9UVbxV4DFBU2+dckkZ7YKEyMaQbuZTG9yOZbU6v9ny40/OofRMCrK+cP029FofOsnDwFzER6 WFBD5Ea02nRTNwb209wbKJhzL2pCJihflfi6jckwYVwArT+UtqklQ5NRZkuTSC3FdFMEKdj7 EKRXydqMcnDQHTNPoULBHdX/IyBplxZlkR0LiP/zoBTeZgl3w== IronPort-Data: A9a23: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 IronPort-HdrOrdr: A9a23:RvFJU6F3BpqLMT+CpLqE18eALOsnbusQ8zAXPiFKOH5om6mj/a 2TdZsgtCMc5Ax8ZJhCo6HiBEDjexPhHPdOiOF7AV7IZmfbUQWTQ71K3M/L/HnLGiH19OJRvJ 0QFpRWOZnXFlY/qc775WCDYrEdKTS8gcSVuds= X-Talos-CUID: =?us-ascii?q?9a23=3AUgDtwmk+Fbf1BU2a/hAZF1ZVXM/XOSHe/Xz2OAy?= =?us-ascii?q?zNTp0ZrStEk2yv/x6guM7zg=3D=3D?= X-Talos-MUID: =?us-ascii?q?9a23=3A1NEJ6Axsds5evy2vfkXDY5bo90maqJm/GWkXg8g?= =?us-ascii?q?+gO+ZHi11YDCA1yXtHLZyfw=3D=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-AV: E=Sophos;i="6.23,165,1770591600"; d="asc'?scan'208,217";a="271269324" X-MGA-submission: =?us-ascii?q?MDFrNZyfceoNJVVrRr0wBTfOSKGb3elQvoYUCG?= =?us-ascii?q?mqH2R1Gc8lbE3fP4D5Kux2PpHHQIC514wYRTFZbpJNdClGIn8O5sQ+Gx?= =?us-ascii?q?q3XhGKaPNUpqe+keMIZmH7KeCAoOSW0UVq34FhztaG5j74adxaAZQ1Ya?= =?us-ascii?q?3W3etUqrH39bOOWRc2yVZ5hw=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; 07 Apr 2026 11:32:28 +0200 Received: from TM.local (unknown [131.254.162.243]) (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 4A2891A460; Tue, 7 Apr 2026 11:32:28 +0200 (CEST) From: Alan Schmitt To: "lwn" , caml-list@inria.fr Date: Tue, 07 Apr 2026 11:32:27 +0200 Message-ID: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="===-=-="; micalg=pgp-sha256; protocol="application/pgp-signature" X-AV-Checked: ClamAV using ClamSMTP at svoboda.polytechnique.org (Tue Apr 7 11:32:28 2026 +0200 (CEST)) X-Spam-Flag: No, tests=bogofilter, spamicity=0.203057, queueID=7097D1A46D 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: 19482 Errors-To: caml-list-owner@inria.fr Precedence: list Precedence: bulk Sender: caml-list-request@inria.fr X-no-archive: yes List-Id: List-Help: , List-Subscribe: , List-Unsubscribe: , List-Post: List-Owner: List-Archive: Archived-At: --===-=-= Content-Type: multipart/mixed; boundary="=-=-=" --=-=-= Content-Type: multipart/alternative; boundary="==-=-=" --==-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: base64 SGVsbG8NCg0KSGVyZSBpcyB0aGUgbGF0ZXN0IE9DYW1sIFdlZWtseSBOZXdzLCBmb3IgdGhlIHdl ZWsgb2YgTWFyY2ggMzEgdG8gQXByaWwNCjA3LCAyMDI2Lg0KDQpUYWJsZSBvZiBDb250ZW50cw0K 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCnJl c3RyaWN0ZWQgMi4wLjAgbGltaXQgd2hpY2ggc3lzdGVtIG9wZXJhdGlvbnMgYW5kIHdoaWNoIHBh cnRzIG9mIHRoZSBmaWxlc3lzdGVtIHlvdXIgcHJvZ3JhbSBjYW4gYWNjZXNzDQpKb2Igb2ZmZXI6 IGNvbXBpbGVyIGVuZ2luZWVyIGZvciBDYXRhbGEgQCBDTkFGIChzb2NpYWwgYmVuZWZpdHMgYWdl bmN5KQ0Kb2NndGsgMC4xOiBPQ2FtbCBiaW5kaW5ncyBmb3IgR1RLIDQgKHByZXZpZXcgcmVsZWFz ZSkNCm91dC1jaGFubmVsLXJlZGlyZWN0IDAuMSDigJQgUmVkaXJlY3QgYW5kIGNhcHR1cmUgb3V0 X2NoYW5uZWwgb3V0cHV0DQpwcHhsaWIuMC4zOC4wDQpBIFByb3Bvc2FsIGZvciBWb2x1bnRhcnkg QUkgRGlzY2xvc3VyZSBpbiBPQ2FtbCBDb2RlDQpCbG9nOiBPQ2FtbCBkb2N1bWVudGF0aW9uIGFz IG1hcmtkb3duDQpob3RzZWF0IFNxdWF2YSAoYSB0aW55IExhYmxHdGsyIGRlbW8pDQpvcGVudGVs ZW1ldHJ5IDAuOTAgKGFuZCBhc3NvY2lhdGVkIGxpYnJhcmllcykNCkR1bmUgMy4yMg0KT2xkIENX Tg0KDQoNCnJlc3RyaWN0ZWQgMi4wLjAgbGltaXQgd2hpY2ggc3lzdGVtIG9wZXJhdGlvbnMgYW5k IHdoaWNoIHBhcnRzIG9mIHRoZSBmaWxlc3lzdGVtIHlvdXIgcHJvZ3JhbSBjYW4gYWNjZXNzDQri lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOg0KICA8aHR0cHM6Ly9kaXNj dXNzLm9jYW1sLm9yZy90L2Fubi1yZXN0cmljdGVkLTItMC0wLWxpbWl0LXdoaWNoLXN5c3RlbS1v cGVyYXRpb25zLWFuZC13aGljaC1wYXJ0cy1vZi10aGUtZmlsZXN5c3RlbS15b3VyLXByb2dyYW0t Y2FuLWFjY2Vzcy8xNzk0Mi8xPg0KDQoNCnJlbW92ZXdpbmdtYW4gYW5ub3VuY2VkDQrilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIANCg0KICBIZWxsbywNCg0KICBJIGFtIGhhcHB5IHRvIGFubm91bmNlIGEgbmV3IHZlcnNp b24gb2YgW3Jlc3RyaWN0ZWRdLg0KDQogIFRoaXMgbGlicmFyeSBsZXRzIHlvdSBsaW1pdCB3aGlj aCBzeXN0ZW0gb3BlcmF0aW9ucyBhbmQgd2hpY2ggcGFydHMgb2YNCiAgdGhlIGZpbGVzeXN0ZW0g eW91ciBwcm9ncmFtIGNhbiBhY2Nlc3MuIENhbGwgaXQgYXMgZWFybHkgYXMgcG9zc2libGUNCiAg aW4geW91ciBwcm9ncmFtIHNvIHRoYXQgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgcnVucyB3aXRoIHJl ZHVjZWQNCiAgcHJpdmlsZWdlcy4gQ3VycmVudGx5LCBhY3R1YWwgZW5mb3JjZWQgcmVzdHJpY3Rp b25zIGFyZSBpbXBsZW1lbnRlZA0KICBmb3IgdGhlc2Ugb3BlcmF0aW5nIHN5c3RlbXM6DQoNCiAg 4oCiIE9wZW5CU0QNCiAg4oCiIExpbnV4IChvbmx5IGZpbGVzeXN0ZW0gdmlldykNCg0KICBFdmVu IG9uIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zLCB5b3UgY2FuIHN0aWxsIHVzZSBbcmVzdHJpY3Rl ZF0gdG8NCiAgZG9jdW1lbnQgd2hpY2ggcHJpdmlsZWdlcyB5b3VyIHByb2dyYW0gbmVlZHMuIFVz ZXJzIGNhbiB0aGVuIHRlc3QgaWYNCiAgeW91ciBwcm9ncmFtIHJlc3BlY3RzIHRoZXNlIHByb21p c2VzIHdpdGggdG9vbHMgc3VjaCBhcyBbcGxlZGdlIG9uDQogIExpbnV4XS4gRW5qb3kgOnNsaWdo dF9zbWlsZToNCg0KICDigKIgW29wYW1dDQogIOKAoiBbYXBpXQ0KICDigKIgW2V4YW1wbGVzXQ0K ICDigKIgW2dpdCByZXBvXQ0KICDigKIgW0xpY2Vuc2UgQUdQTF0NCg0KICBDSEFOR0VMT0c6DQoN CiAg4oCiIHRlc3RlZCBvbjoNCiAgICDigKMgeDg2XzY0IG9wZW5ic2QgKDE2LzE2IFRlc3RzIHBh c3NlZCkNCiAgICDigKMgeDg2XzY0LWFscGluZS1saW51eCAoTGFuZGxvY2sgQUJJIHZlcnNpb246 IDcpICg0LzEyIFRlc3RzIHBhc3NlZDoNCiAgICAgIGZpbGVfcmVhZF91bnYsIGZpbGVfd3JpdGVf dW52LCBmaWxlX2NyZWF0ZV91bnZfbGludXgsDQogICAgICBmaWxlX2N3cnJfdW52X2xpbnV4KQ0K DQoNCltyZXN0cmljdGVkXSA8aHR0cHM6Ly9vcGFtLm9jYW1sLm9yZy9wYWNrYWdlcy9yZXN0cmlj dGVkLz4NCg0KW3Jlc3RyaWN0ZWRdIDxodHRwczovL3JlbW92ZXdpbmdtYW4uY29kZWJlcmcucGFn ZS9yZXN0cmljdGVkLz4NCg0KW3BsZWRnZSBvbiBMaW51eF0gPGh0dHBzOi8vanVzdGluZS5sb2wv cGxlZGdlLz4NCg0KW29wYW1dIDxodHRwczovL29wYW0ub2NhbWwub3JnL3BhY2thZ2VzL3Jlc3Ry aWN0ZWQvcmVzdHJpY3RlZC4xLjIuMC8+DQoNClthcGldIDxodHRwczovL3JlbW92ZXdpbmdtYW4u Y29kZWJlcmcucGFnZS9yZXN0cmljdGVkLz4NCg0KW2V4YW1wbGVzXQ0KPGh0dHBzOi8vY29kZWJl cmcub3JnL3JlbW92ZXdpbmdtYW4vcmVzdHJpY3RlZC9zcmMvYnJhbmNoL21haW4jdXNhZ2UtYW5k LWV4YW1wbGVzPg0KDQpbZ2l0IHJlcG9dIDxodHRwczovL2NvZGViZXJnLm9yZy9yZW1vdmV3aW5n bWFuL3Jlc3RyaWN0ZWQ+DQoNCltMaWNlbnNlIEFHUExdDQo8aHR0cHM6Ly9lbi53aWtpcGVkaWEu b3JnL3dpa2kvR05VX0FmZmVyb19HZW5lcmFsX1B1YmxpY19MaWNlbnNlPg0KDQpBZGRlZA0K4pWM 4pWM4pWM4pWM4pWMDQoNCiAg4oCiIEFQSTogZXhlYyBwcm9taXNlcyBhbmQgYWNjZXNzZXMgb3B0 aW9uYWwNCiAg4oCiIE9wZW5CU0Q6IGV4ZWMgcHJvbWlzZXMNCg0KDQpSZW1vdmVkDQrilYzilYzi lYzilYzilYzilYzilYwNCg0KICDigKIgU3lzdGVtT3BlcmF0aW9uLlRtcFBhdGggKGRlcHJlY2F0 ZWQgc2VlOiBgcGxlZGdlICgyKScpDQoNCg0KSm9iIG9mZmVyOiBjb21waWxlciBlbmdpbmVlciBm b3IgQ2F0YWxhIEAgQ05BRiAoc29jaWFsIGJlbmVmaXRzIGFnZW5jeSkNCuKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6DQogIDxodHRwczovL2Rp c2N1c3Mub2NhbWwub3JnL3Qvam9iLW9mZmVyLWNvbXBpbGVyLWVuZ2luZWVyLWZvci1jYXRhbGEt Y25hZi1zb2NpYWwtYmVuZWZpdHMtYWdlbmN5LzE3OTQzLzE+DQoNCg0KRGVuaXMgTWVyaWdvdXgg YW5ub3VuY2VkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICBbVGhlIGZvbGxvd2luZyBpcyBpbiBGcmVu Y2ggc2luY2UgdGhpcyBpcyBhIGpvYiBvZmZlciBpbiB0aGUgRnJlbmNoDQogIHB1YmxpYyBzZWN0 b3JdDQoNCiAgKkNhbmRpZGF0ZXogaWNpIDoqDQogICA8aHR0cHM6Ly93d3cubGFzZWN1cmVjcnV0 ZS5mci9vZmZyZS1lbXBsb2kvaW5nZW5pZXVyLWV4cGVydC1lbi1jb21waWxhdGlvbi1sYW5nYWdl cy1kZS1wcm9ncmFtbWF0aW9uLS1mLWgvbm9ybWFuZGllLzEwNjU0OTc+DQoNCiAgICAgICAgTGEg KkNOQUYqIChDYWlzc2UgTmF0aW9uYWxlIGRlcyBBbGxvY2F0aW9ucyBGYW1pbGlhbGVzKSwNCiAg ICAgICAgdMOqdGUgZGUgcsOpc2VhdSBkZXMgMTAxIENBRiwgcmVwcsOpc2VudGUgbGEgYnJhbmNo ZSBGYW1pbGxlDQogICAgICAgIGRlIGxhIFPDqWN1cml0w6kgc29jaWFsZSBldCBhIHBvdXIgbWlz c2lvbiBkZSBwaWxvdGVyIGxhDQogICAgICAgIHBvbGl0aXF1ZSBmYW1pbGlhbGUgZXQgbOKAmWFp ZGUgYXV4IHBvcHVsYXRpb25zIGVuIHNpdHVhdGlvbg0KICAgICAgICBkZSBwcsOpY2FyaXTDqSBh aW5zaSBxdWUgbGEgcG9saXRpcXVlIGTigJlhY3Rpb24gc29jaWFsZS4NCg0KICAgICAgICBBdSBz ZWluIGRlIGxhIERpcmVjdGlvbiBkZXMgU3lzdMOobWVzIGTigJlJbmZvcm1hdGlvbiAoRFNJKSwN CiAgICAgICAgY29tcHRhbnQgZW52aXJvbiA4ODAgY29sbGFib3JhdGV1cnMsIGxhICpEaXJlY3Rp b24NCiAgICAgICAgUHJlc3RhdGlvbnMgRmx1eCBldCBEw6ljaXNpb25uZWwgKERQRkQpKiBlc3Qg ZMOpY291cMOpZSBlbiA0DQogICAgICAgIGTDqXBhcnRlbWVudHMgZXQgdm91cyBzZXJleiByYXR0 YWNow6kgYXUgKmTDqXBhcnRlbWVudCDCqw0KICAgICAgICBQcmVzdGF0aW9ucyBJbmRpdmlkdWVs bGVzIGV0IFLDqWbDqXJlbnRpZWxzIE3DqXRpZXJzIMK7KiBxdWkNCiAgICAgICAgZXN0IHByw6lz ZW50IHN1ciBsZXMgc2l0ZXMgZGUgQ2FlbiwgTGUgTWFucyBldCBSZW5uZXMuDQoNCiAgICAgICAg Q2UgZMOpcGFydGVtZW50IGEgcG91ciBtaXNzaW9uIHByaW5jaXBhbGUgZGUgY29uY2V2b2lyLA0K ICAgICAgICBkw6l2ZWxvcHBlciBldCBtYWludGVuaXIgbGUgc3lzdMOobWUgZOKAmWluZm9ybWF0 aW9uIGxpw6kgYXV4DQogICAgICAgIHByZXN0YXRpb25zIGluZGl2aWR1ZWxsZXMgKHByZXN0YXRp b25zIHZlcnPDqWVzIGF1eA0KICAgICAgICBhbGxvY2F0YWlyZXMgdGVsbGVzIHF1ZSBs4oCZYWxs b2NhdGlvbiBmYW1pbGlhbGUsDQogICAgICAgIGzigJlhbGxvY2F0aW9uIGxvZ2VtZW50LCBsYSBw cmltZSDDoCBsYSBuYWlzc2FuY2UsIGxlIFJTQSwgbGENCiAgICAgICAgcHJpbWUgZOKAmWFjdGl2 aXTDqSwg4oCmKS4gTGUgZMOpcGFydGVtZW50IGZvdXJuaXQgYWluc2kgZGVzDQogICAgICAgIG1v dGV1cnMgZGUgcsOoZ2xlcywgYWluc2kgcXVlIGxlcyBzcMOpY2lmaWNhdGlvbnMNCiAgICAgICAg Zm9uY3Rpb25uZWxsZXMgYXNzb2Npw6llcyBhZmluIGRlIGNhbGN1bGVyIGxlIGJvbiBkcm9pdCwg YXUNCiAgICAgICAgYm9uIG1vbWVudCwgcG91ciBsZXMgYWxsb2NhdGlvbnMgdmVyc8OpZXMgcGFy IGxlcyBDQUYuDQoNCiAgICAgICAgRGFucyBsZSBjYWRyZSBkZSBwcm9qZXRzIHN0cmF0w6lnaXF1 ZXMgcG91ciBsYSBicmFuY2hlDQogICAgICAgIGZhbWlsbGUsIGxhIG91IGxlIGNhbmRpZGF0IGlu dMOpZ3JlcmEgbGUgKmNlbnRyZSB0ZWNobmlxdWUNCiAgICAgICAgQ2F0YWxhIGRlIGxhIENOQUYq Lg0KDQogICAgICAgIENhdGFsYSBlc3QgdW4gbGFuZ2FnZSBkZSBwcm9ncmFtbWF0aW9uIGTDqWRp w6kgZMOpdmVsb3Bww6kgcGFyDQogICAgICAgIGzigJlJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNo ZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0IGVuDQogICAgICAgIEF1dG9tYXRpcXVlIChJbnJpYSks IHNww6ljaWFsZW1lbnQgYWRhcHTDqSDDoCBsYQ0KICAgICAgICB0cmFuc2Zvcm1hdGlvbiBkZSBz cMOpY2lmaWNhdGlvbnMganVyaWRpcXVlcyBldA0KICAgICAgICByw6lnbGVtZW50YWlyZXMgZW4g Y29kZSBpbmZvcm1hdGlxdWUuIExhIENOQUYgYXlhbnQgZMOpY2lkw6kNCiAgICAgICAgZGUgc+KA mWFwcHV5ZXIgc3VyIENhdGFsYSBwb3VyIGxlcyBwcm9qZXRzIGRlIG1vZGVybmlzYXRpb24NCiAg ICAgICAgZGUgc29uIHN5c3TDqG1lIGRlIGNhbGN1bCBkZXMgcHJlc3RhdGlvbnMgc29jaWFsZXMs IGVsbGUNCiAgICAgICAgc291aGFpdGUgw6lnYWxlbWVudCBpbnRlcm5hbGlzZXIgZGVzIGNvbXDD qXRlbmNlcyBkZQ0KICAgICAgICBtYWludGVuYW5jZSBzdXIgbOKAmW91dGlsbGFnZSBkZSBDYXRh bGEgYXUgdHJhdmVycyBkZSBjZQ0KICAgICAgICBwb3N0ZS4NCg0KICAgICAgICBMZSBjZW50cmUg dGVjaG5pcXVlIENhdGFsYSBhIGFpbnNpIHZvY2F0aW9uIMOgIHByb2R1aXJlIGRlcw0KICAgICAg ICBjb250cmlidXRpb25zIG9wZW4tc291cmNlIHN1ciBDYXRhbGEsIG1haXMgYXVzc2kgw6ANCiAg ICAgICAgcsOpcG9uZHJlIGF1eCBiZXNvaW5zIGTigJlleHBlcnRpc2UgdGVjaG5pcXVlIGR1IGTD qXBhcnRlbWVudA0KICAgICAgICDCqyBQcmVzdGF0aW9ucyBJbmRpdmlkdWVsbGVzIGV0IFLDqWbD qXJlbnRpZWxzIE3DqXRpZXJzIMK7IHBvdXINCiAgICAgICAgc2VzIHByb2pldHMgbGnDqXMgYXV4 IG1vdGV1cnMgZGUgY2FsY3VsIGRlcyBwcmVzdGF0aW9ucw0KICAgICAgICBzb2NpYWxlcy4NCg0K ICBMYSBwZXJzb25uZSByZWNydXTDqWUgdHJhdmFpbGxlcmEgYXZlYyBs4oCZw6lxdWlwZSBDYXRh bGEgZGUgbOKAmUlucmlhDQogIChMb3VpcyBHZXNiZXJ0LCBWaW5jZW50IEJvdGJvbCwgUm9tYWlu IFByaW1ldCBldCBtb2ktbcOqbWUpICEgTuKAmWjDqXNpdGV6DQogIHBhcyDDoCBtZSBjb250YWN0 ZXIgc2kgdm91cyBhdmV6IGRlcyBxdWVzdGlvbnMgc3VyIGxlIGpvYg0KICA6c2xpZ2h0X3NtaWxl Og0KDQogIFVuIHBldGl0IGFwZXLDp3UgZGVzIGNob3NlcyBmYWl0ZXMgZXQgw6AgZmFpcmUgZW4g Y29tcGlsYXRpb24gc3VyIENhdGFsYQ0KICA6IDxodHRwczovL2Jsb2cubWVyaWdvdXgub3ZoL2Vu LzIwMjYvMDIvMTkvYnVpbGRpbmctcHJvcGVyLXBsLmh0bWw+DQoNCg0Kb2NndGsgMC4xOiBPQ2Ft bCBiaW5kaW5ncyBmb3IgR1RLIDQgKHByZXZpZXcgcmVsZWFzZSkNCuKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6DQogIDxodHRwczovL2Rp c2N1c3Mub2NhbWwub3JnL3QvYW5uLW9jZ3RrLTAtMS1vY2FtbC1iaW5kaW5ncy1mb3ItZ3RrLTQt cHJldmlldy1yZWxlYXNlLzE3OTQ0LzE+DQoNCg0KQ2hyaXMgQXJtc3Ryb25nIGFubm91bmNlZA0K 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgSeKAmW0gcGxlYXNlZCB0byBhbm5vdW5jZSB0aGUgZmly c3QgcHJldmlldyByZWxlYXNlIG9mIG9jZ3RrLCBPQ2FtbA0KICBiaW5kaW5ncyBmb3IgR1RLIDQg KHYwLjEtcHJldmlldzApLg0KDQoNCldoYXQgaXMgaXQ/DQrilYzilYzilYzilYzilYzilYzilYzi lYzilYzilYzilYwNCg0KICBbb2NndGtdIHByb3ZpZGVzIE9DYW1sIGJpbmRpbmdzIGZvciB0aGUg R1RLIDQgd2lkZ2V0IHRvb2xraXQgYW5kIGl0cw0KICBhc3NvY2lhdGVkIGxpYnJhcmllcyAoR0RL LCBHSU8sIFBhbmdvLCBHZGtQaXhidWYsIEdTSywgR3JhcGhlbmUsDQogIENhaXJvKS4gSXQgdGFy Z2V0cyBPQ2FtbCA+PTUuMyAoZm9yIG5vdykuDQoNCiAgSXQgaXMgaW5zcGlyZWQgYnksIGFuZCBk cmF3cyBzb21lIGNvcmUgY29tbW9uIGNvZGUgYW5kIG1hbnkgZGVzaWduDQogIGlkZWFzIGZyb20s IGxhYmxndGszIOKAlCB0aGUgbG9uZy1zdGFuZGluZyBHVEsgMyBiaW5kaW5ncw0KICBsaWJyYXJ5 LiBIb3dldmVyLCB0aGUgQVBJcyBhcmUgbm90IGNvbXBhdGlibGU6IHdoZXJlYXMgbGFibGd0azPi gJlzDQogIGJpbmRpbmdzIGFyZSBsYXJnZWx5IGhhbmQtd3JpdHRlbiwgb2NndGsgdXNlcyBhIGNv ZGUgZ2VuZXJhdG9yIHRoYXQNCiAgcmVhZHMgR09iamVjdCBJbnRyb3NwZWN0aW9uIChHSVIpIGRl ZmluaXRpb24gZmlsZXMgdG8gcHJvZHVjZSBib3RoIEMNCiAgc3R1YnMgYW5kIE9DYW1sIHdyYXBw ZXJzLiBUaGlzIG1lYW5zIGJpbmRpbmcgY292ZXJhZ2UgdHJhY2tzIHRoZSBHSVINCiAgZGVmaW5p dGlvbnMgcmF0aGVyIHRoYW4gaGFuZC13cml0dGVuIGVmZm9ydCwgYW5kIHRoZSBnZW5lcmF0ZWQg Y29kZQ0KICBmb2xsb3dzIGEgY29uc2lzdGVudCBwcm9jZWR1cmFsIHN0cnVjdHVyZS4NCg0KICAq QSBub3RlIG9uIHRvb2xpbmcqOiB0aGUgY29kZSBnZW5lcmF0b3IgaXRzZWxmIHdhcyBkZXZlbG9w ZWQgd2l0aA0KICAgaGVhdnkgYXNzaXN0YW5jZSBmcm9tIExMTXMuIEhvd2V2ZXIsIHRoZSBvdXRw dXQgKHRoZSBDIHN0dWJzIGFuZA0KICAgT0NhbWwgbW9kdWxlcyB0aGF0IGZvcm0gdGhlIGFjdHVh bCBsaWJyYXJ5KSBpcyBwcm9ncmFtbWF0aWNhbGx5DQogICBnZW5lcmF0ZWQgZnJvbSB0aGUgR0lS IGRlZmluaXRpb25zLCBub3Qgd3JpdHRlbiBieSBhbiBMTE0uDQoNCg0KW29jZ3RrXSA8aHR0cHM6 Ly9naXRodWIuY29tL2NocmlzLWFybXN0cm9uZy9vY2d0az4NCg0KDQpXaGF04oCZcyBpbXBsZW1l bnRlZA0K4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM 4pWMDQoNCiAg4oCiIEJpbmRpbmdzIGZvciBHVEsgNCwgR0RLLCBHSU8sIFBhbmdvLCBHZGtQaXhi dWYsIEdTSywgR3JhcGhlbmUsIGFuZA0KICAgIENhaXJvDQogIOKAoiBDbGFzc2VzLCByZWNvcmRz LCBlbnVtZXJhdGlvbnMsIGFuZCBiaXRmaWVsZHMNCiAg4oCiIENvbnN0cnVjdG9ycywgbWV0aG9k cywgYW5kIHByb3BlcnRpZXMNCiAg4oCiIFNpZ25hbHMgKG5vIHJldHVybiB2YWx1ZXMgb3IgcGFy YW1ldGVycykNCiAg4oCiIEEgd29ya2luZyBleGFtcGxlOiBhIEdUSyA0IGNhbGN1bGF0b3IgYXBw bGljYXRpb24NCg0KDQpXaGF04oCZcyBtaXNzaW5nDQrilYzilYzilYzilYzilYzilYzilYzilYzi lYzilYzilYzilYzilYzilYwNCg0KICBUaGlzIGlzIGEgZmlyc3QgbWlsZXN0b25lLCBub3QgYSBw cm9kdWN0aW9uLXJlYWR5IHJlbGVhc2UuIFNldmVyYWwNCiAgaW1wb3J0YW50IGZlYXR1cmVzIGFy ZSBub3QgeWV0IHN1cHBvcnRlZDoNCg0KICDigKIgKkludGVyZmFjZXMqOiBHT2JqZWN0IGludGVy ZmFjZXMgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkLiBUaGlzIGhhcyBhDQogICAgYnJvYWRlciBpbXBh Y3QgdGhhbiBpdCBtaWdodCBhcHBlYXI6IG5vdCBvbmx5IGFyZSBpbnRlcmZhY2UgdHlwZXMNCiAg ICB0aGVtc2VsdmVzIGFic2VudCwgYnV0IGFueSBtZXRob2Qgb24gYSBjbGFzcyB0aGF0IHRha2Vz IGFuIGludGVyZmFjZQ0KICAgIGFzIGEgcGFyYW1ldGVyIG9yIHJldHVybnMgYW4gaW50ZXJmYWNl IHR5cGUgaXMgYWxzbyBzdXBwcmVzc2VkLiBUaGlzDQogICAgbWVhbnMgc29tZSBtZXRob2RzIG9u IG90aGVyd2lzZS1zdXBwb3J0ZWQgY2xhc3NlcyB3aWxsIGJlIG1pc3NpbmcNCiAgICBmcm9tIHRo ZSBiaW5kaW5ncy4NCiAg4oCiICpDYWxsYmFja3MqOiBGdW5jdGlvbnMgdGhhdCBhY2NlcHQgT0Nh bWwgY2FsbGJhY2tzIGFzIGFyZ3VtZW50cw0KICAgIChiZXlvbmQgc2lnbmFscykgYXJlIG5vdCB5 ZXQgc3VwcG9ydGVkLiBUaGlzIGxpbWl0cyB1c2Ugb2YgbWFueQ0KICAgIGFzeW5jaHJvbm91cyBH SU8gQVBJcyBhbmQgc29tZSBHVEsgcGF0dGVybnMuDQogIOKAoiAqRnJlZSBmdW5jdGlvbnM6KiBU b3AtbGV2ZWwgZnVuY3Rpb25zIChub3QgYXR0YWNoZWQgdG8gYSBjbGFzcykgYXJlDQogICAgbm90 IHlldCBnZW5lcmF0ZWQuIFNvbWUgdXRpbGl0eSBBUElzIGFyZSB0aGVyZWZvcmUgdW5hdmFpbGFi bGUuDQogIOKAoiAqTm9uLW9wYXF1ZSByZWNvcmQgZmllbGQgYWNjZXNzOiogRmllbGRzIG9mIG5v bi1vcGFxdWUgR0xpYi9HREsNCiAgICByZWNvcmRzIGNhbm5vdCB5ZXQgYmUgcmVhZCBkaXJlY3Rs eS4NCiAg4oCiICpNdWx0aS1wYXJhbWV0ZXIgc2lnbmFsczoqIE9ubHkgc2lnbmFscyB3aXRoIHpl cm8gcGFyYW1ldGVycyBhbmQgbm8NCiAgICAgcmV0dXJuIHZhbHVlIGFyZSBzdXBwb3J0ZWQ7IHNp Z25hbHMgd2l0aCBjb21wbGV4IHNpZ25hdHVyZXMgYXJlDQogICAgIHNpbGVudGx5IHNraXBwZWQu DQogIOKAoiAqR0xpYiB0eXBlcyo6IG1vc3QgR0xpYiB0eXBlcyBhcmUgbm90IGJvdW5kLCB3aGlj aCBtZWFucyB0aGF0DQogICAgIHNldmVyYWwgdXNlZnVsIEFQSXMgdGhhdCB1c2UgbGlzdHMsIGJ5 dGUgYXJyYXlzLCBHVmFyaWFudHMgKGhlYXZpbHkNCiAgICAgdXNlZCBieSBEQnVzKSBhcmUgbm90 IGF2YWlsYWJsZS4NCg0KICBUaGVzZSBnYXBzIG1lYW4geW91IGNhbiBidWlsZCBiYXNpYyBHVEsg YXBwbGljYXRpb25zLCBidXQgZXhwZWN0IHRvDQogIGhpdCB3YWxscyB3aXRoIG1vcmUgYWR2YW5j ZWQgd2lkZ2V0IHVzYWdlLCBhc3luY2hyb25vdXMgSS9PLCBvciBhbnkNCiAgQVBJIHRoYXQgcmVs aWVzIGhlYXZpbHkgb24gaW50ZXJmYWNlcy4NCg0KICBUaGVyZSBpcyBhIFtST0FETUFQLm1kXSB0 aGF0IGxpc3RzIHRoZSByb3VnaCBwbGFuIHRvIGRlYWwgd2l0aCBtdWNoIG9mDQogIHRoZSBhYm92 ZS4NCg0KDQpbUk9BRE1BUC5tZF0NCjxodHRwczovL2dpdGh1Yi5jb20vY2hyaXMtYXJtc3Ryb25n L29jZ3RrL2Jsb2IvbWFpbi9ST0FETUFQLm1kPg0KDQoNCkRvY3VtZW50YXRpb24NCuKVjOKVjOKV jOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjA0KDQogIEFQSSByZWZlcmVuY2UgZG9jdW1l bnRhdGlvbiBpcyBjdXJyZW50bHkgZGVmaWNpZW50LiBBY2N1cmF0ZWx5DQogIGdlbmVyYXRpbmcg ZG9jdW1lbnRhdGlvbiBmcm9tIEdJUiBkZWZpbml0aW9ucyBpcyBhbiB1bnNvbHZlZCBwcm9ibGVt DQogIGZvciB0aGlzIHByb2plY3QsIHNvIGZvciBub3cgdGhlIGdlbmVyYXRlZCBtb2R1bGVzIGFy ZSBsYXJnZWx5DQogIHVuZG9jdW1lbnRlZC4gSW4gdGhlIG1lYW50aW1lLCB0aGUgR1RLIDQgZG9j dW1lbnRhdGlvbiBpcyB0aGUgYmVzdA0KICByZWZlcmVuY2UgZm9yIHVuZGVyc3RhbmRpbmcgd2hh dCBlYWNoIGJpbmRpbmcgY29ycmVzcG9uZHMgdG8sIGFuZCB0aGUNCiAgZXhhbXBsZXMgaW4gdGhl IHJlcG9zaXRvcnkgaWxsdXN0cmF0ZSBwcmFjdGljYWwgdXNhZ2Ug4oCUIGluIHBhcnRpY3VsYXIN CiAgdGhlIGNhbGN1bGF0b3IgZXhhbXBsZSwgd2hpY2ggZGVtb25zdHJhdGVzIGEgbm9uLXRyaXZp YWwgR1RLIDQNCiAgYXBwbGljYXRpb24uDQoNCg0KU3RhYmlsaXR5DQrilYzilYzilYzilYzilYzi lYzilYzilYzilYwNCg0KICBUaGlzIGNvZGUgaXMgdW50ZXN0ZWQgaW4gcHJvZHVjdGlvbiBlbnZp cm9ubWVudHMuIFRoZSBnZW5lcmF0ZWQNCiAgYmluZGluZ3MgY292ZXIgYSBsYXJnZSBzdXJmYWNl IGFyZWEsIGJ1dCB0ZXN0IGNvdmVyYWdlIGlzIG5vdCB5ZXQNCiAgY29tcHJlaGVuc2l2ZS4gSSB3 b3VsZCBjYXV0aW9uIGFnYWluc3QgdXNlIGluIGFueSBwcm9kdWN0aW9uIG9yDQogIHNhZmV0eS1z ZW5zaXRpdmUgY29udGV4dCBhdCB0aGlzIHN0YWdlLiBDb21tZW50cyBvciBNUnMgYXJlIHdlbGNv bWUuDQoNCiAgVGhpcyBjb2RlIGhhcyBub3QgYmVlbiB0ZXN0ZWQgb3V0c2lkZSBvZiBMaW51eCBl bnZpcm9ubWVudHMuDQoNCg0KSW5zdGFsbGF0aW9uIGFuZCBVc2FnZQ0K4pWM4pWM4pWM4pWM4pWM 4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWMDQoNCiAg RG93bmxvYWQgYW5kIHBpbiB0aGUgc291cmNlIGNvZGUgZm9yIG5vdyAoSeKAmW0gaW4gdGhlIHBy b2Nlc3Mgb2YNCiAgcHJlcGFyaW5nIGFuIG9wYW0gcmVsZWFzZS4gVGhpcyBpcyB0YWtpbmcgYSBz b21lIHRpbWUgdG8gc29ydCB0aHJvdWdoDQogIGNyb3NzLXBsYXRmb3JtIGlzc3Vlcywgc28gSeKA mWxsIHVwZGF0ZSBoZXJlIHdpdGggYSBjb21tZW50IHdoZW4gdGhhdCBpcw0KICBhdmFpbGFibGUp Lg0KDQogIFRoZSBiaW5kaW5ncyBoYXZlIGJlZW4gZ2VuZXJhdGVkIGFnYWluc3QgR1RLIDQuMTQu NSAoVWJ1bnR1IDI0LjA0KS4gSWYNCiAgeW91IGhhdmUgYW4gb2xkZXIgdmVyc2lvbiwgaXQgc2hv dWxkIHN0aWxsIGNvbXBpbGUgKGluIHRoZW9yeSksIGJ1dA0KICB5b3Ugd2lsbCByZWNlaXZlIHJ1 bnRpbWUgZXJyb3JzIG9uIEFQSXMgbm90IGF2YWlsYWJsZSBpbiB5b3VyIHZlcnNpb24uDQoNCiAg MS4gRG93bmxvYWQgdGhlIHJlcG9zaXRvcnk6PGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpcy1hcm1z dHJvbmcvb2NndGs+DQogICAgICh5b3UgY2FuIHVzZSB0aGUgdjAuMS1wcmV2aWV3MCB0YWcgdG8g Z2V0IHdoYXQgSeKAmXZlIG1lbnRpb25lZCBoZXJlKQ0KICAyLiBQaW4gdGhlIGNvbmYtZ3RrNCBh bmQgb2NndGsgcGFja2FnZXMgaW4gdGhlaXIgcmVzcGVjdGl2ZQ0KICAgICBzdWJkaXJlY3Rvcmll cw0KICAgICAxLiBgb3BhbSBwaW4gY29uZi1ndGsnDQogICAgIDIuIGBvcGFtIHBpbiBvY2d0aycN CiAgMy4gUnVuIGBvcGFtIGluc3RhbGwgb2NndGsnDQoNCiAgRWFjaCBsaWJyYXJ5IGlzIGV4cG9z ZWQgYXQgdGhlIG9jYW1sZmluZCBsZXZlbCBhcyBgb2NndGsuPGxpYm5hbWU+JyAtDQogIGZvciBl eGFtcGxlLCBhZGQgYG9jZ3RrLmd0aycgb3IgYG9jZ3RrLmdkaycgdG8geW91ciBkdW5lIGZpbGUs IHdoaWxlDQogIGRlcGVuZGluZyBvbiBgb2NndGsnIGluIHlvdXIgYG9wYW0nIC8gYGR1bmUtcHJv amVjdCcgZmlsZS4NCg0KICAqU291cmNlIGFuZCBpc3N1ZSB0cmFja2VyKjogPGh0dHBzOi8vZ2l0 aHViLmNvbS9jaHJpcy1hcm1zdHJvbmcvb2NndGs+DQoNCiAgRmVlZGJhY2sgYW5kIGJ1ZyByZXBv cnRzIHdlbGNvbWUuDQoNCg0Kb3V0LWNoYW5uZWwtcmVkaXJlY3QgMC4xIOKAlCBSZWRpcmVjdCBh bmQgY2FwdHVyZSBvdXRfY2hhbm5lbCBvdXRwdXQNCuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kA0KDQogIEFyY2hpdmU6DQogIDxodHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3QvYW5uLW91dC1j aGFubmVsLXJlZGlyZWN0LTAtMS1yZWRpcmVjdC1hbmQtY2FwdHVyZS1vdXQtY2hhbm5lbC1vdXRw dXQvMTc5NDUvMT4NCg0KDQpIaHVnbyBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIEnigJltIGhhcHB5IHRvIGFubm91bmNlIHRoZSBm aXJzdCByZWxlYXNlIG9mIFtvdXQtY2hhbm5lbC1yZWRpcmVjdF0sIGENCiAgbGlicmFyeSBmb3Ig cmVkaXJlY3RpbmcgYW5kIGNhcHR1cmluZyBvdXRwdXQgd3JpdHRlbiB0byBvdXRfY2hhbm5lbHMu DQoNCg0KW291dC1jaGFubmVsLXJlZGlyZWN0XSA8aHR0cHM6Ly9naXRodWIuY29tL2hodWdvL291 dC1jaGFubmVsLXJlZGlyZWN0Pg0KDQpGZWF0dXJlczoNCuKVjOKVjOKVjOKVjOKVjOKVjOKVjOKV jOKVjA0KDQogIOKAoiBDYXB0dXJlIGFueSBvdXRfY2hhbm5lbCBpbnRvIGEgc3RyaW5nICh3aXRo IGNvbnZlbmllbmNlIHNob3J0aGFuZHMNCiAgICBmb3Igc3Rkb3V0IGFuZCBzdGRlcnIpDQogIOKA oiBSZWRpcmVjdCBvbmUgY2hhbm5lbCBpbnRvIGFub3RoZXINCiAg4oCiIFdvcmtzIG9uIG5hdGl2 ZSAodmlhIGR1cC9kdXAyKSwgSmF2YVNjcmlwdCAoanNfb2Zfb2NhbWwpLCBhbmQNCiAgICBXZWJB c3NlbWJseSAod2FzbV9vZl9vY2FtbCkNCiAg4oCiIEV4cGVydCBBUEkgZm9yIG1hbnVhbCByZWRp cmVjdGlvbiBsaWZldGltZSBjb250cm9sDQoNCg0KSW5zdGFsbGF0aW9uOg0K4pWM4pWM4pWM4pWM 4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWMDQoNCiAg4pSM4pSA4pSA4pSA4pSADQogIOKUgiBv cGFtIGluc3RhbGwgb3V0LWNoYW5uZWwtcmVkaXJlY3QNCiAg4pSU4pSA4pSA4pSA4pSADQoNCg0K UXVpY2sgZXhhbXBsZToNCuKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKV jA0KDQogIOKUjOKUgOKUgOKUgOKUgA0KICDilIIgbGV0IG91dHB1dCwgcmVzdWx0ID0NCiAg4pSC ICAgT3V0X2NoYW5uZWxfcmVkaXJlY3QuY2FwdHVyZV9jaGFubmVsIHNvbWVfY2hhbm5lbCB+Zjoo ZnVuICgpIOKGkiANCiAg4pSCICAgICBQcmludGYuZnByaW50ZiBzb21lX2NoYW5uZWwg4oCcaGVs bG/igJ07DQogIOKUgiAgICAgNDIpDQogIOKUgiAoKiBvdXRwdXQgPSDigJxoZWxsb+KAnSwgcmVz dWx0ID0gNDIgKikNCiAg4pSU4pSA4pSA4pSA4pSADQoNCg0KcHB4bGliLjAuMzguMA0K4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZTogPGh0dHBzOi8v ZGlzY3Vzcy5vY2FtbC5vcmcvdC9hbm4tcHB4bGliLTAtMzgtMC8xNzk0OC8xPg0KDQoNCk5hdGhh biBSZWJvdXJzIGFubm91bmNlZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgVGhlIHBweGxpYiB0ZWFt IGlzIGhhcHB5IHRvIGFubm91bmNlIHRoZSByZWxlYXNlIG9mIHBweGxpYi4wLjM4LjAuDQoNCiAg VGhlIG1haW4gZmVhdHVyZXMgb2YgdGhpcyByZWxlYXNlIGFyZSBzdXBwb3J0IGZvciBPQ2FtbCA1 LjUgYW5kDQogIGltcHJvdmVkIHN1cHBvcnQgb2YgT0NhbWwgNS40IGFuZCA1LjMuIEl0IGFsc28g Y29tZXMgd2l0aCBhIGZldyBidWcNCiAgZml4ZXMgYW5kIGEgY291cGxlIG5ldyBBUEkgZW50cmll cywgeW91IGNhbiByZWFkIHRoZSBleHRlbnNpdmUgcmVsZWFzZQ0KICBub3RlcyBbaGVyZV0uDQoN CiAgVGhpcyBpcyBvdXIgZmlyc3QgcmVsZWFzZSBzaW5jZSB3ZSBhbm5vdW5jZWQgb3VyIG5ldyBh cHByb2FjaCB0bw0KICBzdXBwb3J0aW5nIG5ldyBjb21waWxlcnMgaW4gW3RoaXMgdGhyZWFkXS4g QWxsIHN1cHBvcnQgZm9yIGNvbXBpbGVycw0KICB2ZXJzaW9ucyBgPj0gNS4zJyBpcyBpbXBsZW1l bnRlZCB1c2luZyB0aGlzIHRlY2huaXF1ZSBhbmQgbmV3IGxhbmd1YWdlDQogIGZlYXR1cmVzIGFy ZSBlbmNvZGVkIGludG8gdGhlIEFTVC4gV2UndmUgYWRkZWQgYEFzdF9idWlsZGVyJyBhbmQNCiAg YEFzdF9wYXR0ZXJuJyBmdW5jdGlvbnMgdG8gYWxsb3cgeW91IHRvIG1hbmlwdWxhdGUgc29tZSBv ZiB0aG9zZSwgc3VjaA0KICBhcyBsYWJlbGVkIHR1cGxlcyBvciBlZmZlY3QgcGF0dGVybnMuIFlv dSBjYW4gc2VlIHRob3NlIGluIG91ciBBUEkNCiAgZG9jdW1lbnRhdGlvbiBbaGVyZV0gYW5kIFt0 aGVyZV0uIFdlJ3ZlIGFsc28gaWxsdXN0cmF0ZWQgaG93IHRvIHVzZQ0KICB0aGVtIGluIG91ciBb bmV3IG1hbnVhbCBzZWN0aW9uXS4gSWYgeW91J3JlIGludGVyZXN0ZWQgaW4gcHJvZHVjaW5nIG9y DQogIGNvbnN1bWluZyBvdGhlciBuZXcgbGFuZ3VhZ2UgZmVhdHVyZXMgdGhhdCBjYW5ub3QgYmUg cmVwcmVzZW50ZWQgd2l0aA0KICBvdXIgY3VycmVudCBpbnRlcm5hbCBBU1QgKDUuMiksIHBsZWFz ZSBbb3BlbiBhbiBpc3N1ZV0gc28gd2UgY2FuIGFkZA0KICB0aGUgcmVsZXZhbnQgaGVscGVycy4N Cg0KICBHaXZlbiB0aGUgZWNvc3lzdGVtIGhhc24ndCB5ZXQgcmVjb3ZlcmVkIGZyb20gdGhlIDUu MiBBU1QgYnVtcCBhbmQNCiAgYHBweGxpYi4wLjM2LjAnLCB3ZSdyZSBnbGFkIHRoYXQgd2UgY2Fu IGFkZCBzdXBwb3J0IGZvciBuZXcgY29tcGlsZXJzDQogIHdpdGhvdXQgaW50cm9kdWNpbmcgZnVy dGhlciBicmVha2FnZSBhbmQga2VlcCB0aGUgbWFpbnRlbmFuY2UgYnVyZGVuDQogIHdpdGhpbiBw cHhsaWIncyBib3VuZHMuICBXZSd2ZSBzdGFydGVkIFtkaXNjdXNzaW9uc10gd2l0aCB0aGUgY29t cGlsZXINCiAgdGVhbSB0byBtYWtlIHRoaXMgYXBwcm9hY2ggZXZlbiBtb3JlIHZpYWJsZSBpbiB0 aGUgZnV0dXJlIG9uIG91ciBlbmQuDQoNCiAgV2UnZCBsaWtlIHRvIHRoYW5rIEBjZWFzdGx1bmQg d2hvJ3Mgb3VyIG9ubHkgZXh0ZXJuYWwgY29udHJpYnV0b3IgZm9yDQogIHRoaXMgcmVsZWFzZS4N Cg0KICBJJ2QgcGVyc29uYWxseSBsaWtlIHRvIHRoYW5rIEBwYXRyaWNvZmVycmlzIGZvciBoaXMg aGVscCBnZXR0aW5nIHRoaXMNCiAgb3V0IHRoZSBkb29yIGFzIHdlbGwgYXMgdGhlIE9DYW1sIFNv ZnR3YXJlIEZvdW5kYXRpb24gYW5kIE9DYW1sUHJvIGZvcg0KICBmdW5kaW5nIG15IHdvcmsgb24g cHB4bGliLg0KDQogIFRoYW5rIHlvdSBmb3IgcmVhZGluZyBhbmQgaGFwcHkgcHJlcHJvY2Vzc2lu ZyENCg0KDQpbaGVyZV0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC1wcHgvcHB4bGliL3JlbGVh c2VzL3RhZy8wLjM4LjA+DQoNClt0aGlzIHRocmVhZF0NCjxodHRwczovL2Rpc2N1c3Mub2NhbWwu b3JnL3QvYW5uLXBweGxpYi1zdXBwb3J0LWZvci1mdXR1cmUtY29tcGlsZXJzLzE3NDMwPg0KDQpb aGVyZV0NCjxodHRwczovL29jYW1sLXBweC5naXRodWIuaW8vcHB4bGliL3BweGxpYi9QcHhsaWIv QXN0X2J1aWxkZXIvRGVmYXVsdC9pbmRleC5odG1sI2Z1dHVyZS1hc3RzPg0KDQpbdGhlcmVdDQo8 aHR0cHM6Ly9vY2FtbC1wcHguZ2l0aHViLmlvL3BweGxpYi9wcHhsaWIvUHB4bGliL0FzdF9wYXR0 ZXJuL2luZGV4Lmh0bWwjZnV0dXJlLWFzdHM+DQoNCltuZXcgbWFudWFsIHNlY3Rpb25dDQo8aHR0 cHM6Ly9vY2FtbC1wcHguZ2l0aHViLmlvL3BweGxpYi9wcHhsaWIvY29tcGF0aWJpbGl0eS5odG1s I2Z1dHVyZV9jb21waWxlcnM+DQoNCltvcGVuIGFuIGlzc3VlXSA8aHR0cHM6Ly9naXRodWIuY29t L29jYW1sLXBweC9wcHhsaWIvaXNzdWVzL25ldz4NCg0KW2Rpc2N1c3Npb25zXSA8aHR0cHM6Ly9n aXRodWIuY29tL29jYW1sL29jYW1sL2lzc3Vlcy8xNDY2OD4NCg0KDQpBIFByb3Bvc2FsIGZvciBW b2x1bnRhcnkgQUkgRGlzY2xvc3VyZSBpbiBPQ2FtbCBDb2RlDQrilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOg0KICA8aHR0cHM6Ly9kaXNjdXNz Lm9jYW1sLm9yZy90L2EtcHJvcG9zYWwtZm9yLXZvbHVudGFyeS1haS1kaXNjbG9zdXJlLWluLW9j YW1sLWNvZGUvMTc5NTAvMT4NCg0KDQpBbmlsIE1hZGhhdmFwZWRkeSBhbm5vdW5jZWQNCuKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIERlYXIgYWxsLA0KDQogIEkndmUgcHV0IHRvZ2V0aGVy IGFuICpbb2NhbWwtYWktZGlzY2xvc3VyZV0qIHByb3Bvc2FsIHRvIGFsbG93DQogIHZvbHVudGFy eSBkaXNjbG9zdXJlIG9mIEFJIHVzYWdlIGluIHB1Ymxpc2hlZCBPQ2FtbCBjb2RlLCB1c2luZyBv cGFtDQogIG1ldGFkYXRhIGFuZCBbZXh0ZW5zaW9uIGF0dHJpYnV0ZXNdIGluIHNvdXJjZSBjb2Rl Lg0KDQogIFRoZSByZXBvc2l0b3J5IGFuZCBbYmxvZyBwb3N0XSBoYXZlIG1vcmUgZGV0YWlscywg c29tZSBwcm90b3R5cGUNCiAgdG9vbGluZyB0byBleHRyYWN0IGF0dHJpYnV0ZXMsIGFuZCBhIEZB USwgYnV0IGluIGEgbnV0c2hlbGwgSSdtDQogIHByb3Bvc2luZyBzb21ldGhpbmcgdmVyeSBzaW1p bGFyIHRvIGEgW1czQyBkaXNjbG9zdXJlIHByb3Bvc2FsIGZvcg0KICBIVE1MXS4NCg0KDQpbb2Nh bWwtYWktZGlzY2xvc3VyZV0gPGh0dHBzOi8vZ2l0aHViLmNvbS9hdnNtL29jYW1sLWFpLWRpc2Ns b3N1cmU+DQoNCltleHRlbnNpb24gYXR0cmlidXRlc10gPGh0dHBzOi8vb2NhbWwub3JnL21hbnVh bC81LjMvYXR0cmlidXRlcy5odG1sPg0KDQpbYmxvZyBwb3N0XSA8aHR0cHM6Ly9hbmlsLnJlY29p bC5vcmcvbm90ZXMvb3BhbS1haS1kaXNjbG9zdXJlPg0KDQpbVzNDIGRpc2Nsb3N1cmUgcHJvcG9z YWwgZm9yIEhUTUxdDQo8aHR0cHM6Ly93d3cudzMub3JnL2NvbW11bml0eS9haS1jb250ZW50LWRp c2Nsb3N1cmUvPg0KDQpQYWNrYWdlIERpc2Nsb3N1cmVzDQrilYzilYzilYzilYzilYzilYzilYzi lYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYwNCg0KICBBbiBvcGFtIHBhY2thZ2Ug Y2FuIGRlY2xhcmUgaXRzIGRpc2Nsb3N1cmUgdXNpbmcgZXh0ZW5zaW9uIGZpZWxkczoNCg0KICDi lIzilIDilIDilIDilIANCiAg4pSCIHgtYWktZGlzY2xvc3VyZTogImFpLWFzc2lzdGVkIg0KICDi lIIgeC1haS1tb2RlbDogImNsYXVkZS1vcHVzLTQtNiINCiAg4pSCIHgtYWktcHJvdmlkZXI6ICJB bnRocm9waWMiDQogIOKUlOKUgOKUgOKUgOKUgA0KDQogIC9Ob3RlOiBUaGlzIG1heSBqdXN0IGJl Y29tZSBhIGxpc3Qgb2YgdmFsdWVzIGluIHRoZSBmaW5hbCBwcm9wb3NhbCwNCiAgYnV0IHlvdSBn ZXQgdGhlIGlkZWEuLw0KDQoNCk9DYW1sIE1vZHVsZSBsZXZlbA0K4pWM4pWM4pWM4pWM4pWM4pWM 4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWMDQoNCiAgT0NhbWwgc3VwcG9ydHMg ZXh0ZW5zaW9uIGF0dHJpYnV0ZXMsIHdoaWNoIHdlIHVzZSB2aWEgYSBmbG9hdGluZw0KICBhdHRy aWJ1dGUgdGhhdCBhcHBsaWVzIHRvIHRoZSBlbnRpcmUgY29tcGlsYXRpb24gdW5pdDoNCg0KICDi lIzilIDilIDilIDilIANCiAg4pSCIFtAQEBhaV9kaXNjbG9zdXJlICJhaS1nZW5lcmF0ZWQiXQ0K ICDilIIgW0BAQGFpX21vZGVsICJjbGF1ZGUtb3B1cy00LTYiXQ0KICDilIIgW0BAQGFpX3Byb3Zp ZGVyICJBbnRocm9waWMiXQ0KICDilIIgDQogIOKUgiBsZXQgZm9vID0gLi4uDQogIOKUgiBsZXQg YmFyID0gLi4uDQogIOKUlOKUgOKUgOKUgOKUgA0KDQogIFRoZXNlIGNhbiBhbHNvIGJlIHNjb3Bl ZCBtb3JlIGZpbmVseSB2aWEgZGVjbGFyYXRpb24gYXR0cmlidXRlcyB0aGF0DQogIGFwcGx5IHRv IGEgc2luZ2xlIGJpbmRpbmc6DQoNCiAg4pSM4pSA4pSA4pSA4pSADQogIOKUgiBbQEBAYWlfZGlz Y2xvc3VyZSAiYWktYXNzaXN0ZWQiXQ0KICDilIIgDQogIOKUgiBsZXQgaHVtYW5fd3JpdHRlbiB4 ID0gLi4uDQogIOKUgiANCiAg4pSCIGxldCBhaV9oZWxwZXIgeSA9IC4uLg0KICDilIIgW0BAYWlf ZGlzY2xvc3VyZSAiYWktZ2VuZXJhdGVkIl0NCiAg4pSU4pSA4pSA4pSA4pSADQoNCiAgRGlzY2xv c3VyZSBmb2xsb3dzIGEgbmVhcmVzdC1hbmNlc3RvciBpbmhlcml0YW5jZSBtb2RlbCBsaWtlIHRo ZSBXM0MNCiAgSFRNTCBwcm9wb3NhbCwgd2hlcmVieSBhbiBleHBsaWNpdCBhbm5vdGF0aW9uIG92 ZXJyaWRlcyB0aGUgaW5oZXJpdGVkDQogIHZhbHVlLg0KDQogIEkgd3JvdGUgYSBbYmxvZyBwb3N0 IHdpdGggbW9yZSBkZXRhaWxzXSwgYXMgd2VsbCBhcyBhbiBbRkFRIGluIHRoZQ0KICBwcm9wb3Nh bCByZXBvc2l0b3J5XSBhYm91dCBzb21lIG9mIHRoZSBpbXBsaWNhdGlvbnMuDQoNCiAgSSBjb3Vs ZG4ndCBmaW5kIGFueSBvdGhlciBwcmlvciBhcnQgb2Ygb3RoZXIgbGFuZ3VhZ2UgZWNvc3lzdGVt cw0KICB0cnlpbmcgYW55dGhpbmcgc2ltaWxhciwgc28gSSdkIGJlIGludGVyZXN0ZWQgaW4gaGVh cmluZyBhYm91dCBhbnkNCiAgb3RoZXJzIHlvdSBhbGwga25vdyBhYm91dC4gSWYgdGhlcmUncyBu byBpbnRlcmVzdCBpbiB0aGUgd2lkZXINCiAgZWNvc3lzdGVtIGluIGRvaW5nIHRoaXMsIHRoZW4g SSdsbCBqdXN0IHVzZSBpdCBteXNlbGYsIGJ1dCBJIGZpZ3VyZWQNCiAgdGhlcmUncyBubyBoYXJt IGluIHN0YXJ0aW5nIHRoZSBkaXNjdXNzaW9uIQ0KDQoNCltibG9nIHBvc3Qgd2l0aCBtb3JlIGRl dGFpbHNdDQo8aHR0cHM6Ly9hbmlsLnJlY29pbC5vcmcvbm90ZXMvb3BhbS1haS1kaXNjbG9zdXJl Pg0KDQpbRkFRIGluIHRoZSBwcm9wb3NhbCByZXBvc2l0b3J5XQ0KPGh0dHBzOi8vZ2l0aHViLmNv bS9hdnNtL29jYW1sLWFpLWRpc2Nsb3N1cmU+DQoNCg0KQmxvZzogT0NhbWwgZG9jdW1lbnRhdGlv biBhcyBtYXJrZG93bg0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZToNCiAgPGh0dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcv dC9ibG9nLW9jYW1sLWRvY3VtZW50YXRpb24tYXMtbWFya2Rvd24vMTc5NTEvMT4NCg0KDQpEYXZp ZCBTYW5jaG8gYW5ub3VuY2VkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICBJIHB1Ymxpc2hlZCBhIGJsb2cgcG9z dCBhYm91dCBvZG9jJ3MgbWFya2Rvd24gYmFja2VuZCBhbmQgaG93IEkgdXNlZA0KICBpdCB0byBt YWtlIHRoZSBtZWxhbmdlLnJlIGRvY3VtZW50YXRpb24gYmV0dGVyLCBob3BlIHlvdSBsaWtlIGl0 Og0KDQogIDxodHRwczovL3NhbmNoby5kZXYvYmxvZy9vY2FtbC1kb2N1bWVudGF0aW9uLWFzLW1h cmtkb3duPg0KDQogIFRoYW5rcyB0byBAam9ubHVkbGFtIEByZ3JpbmJlcmcgYW5kIEBBbGl6dGVy IGZvciByZXZpZXdpbmcgdGhlIHdvcmsNCiAgdGhhdCBtYWRlIGl0IHBvc3NpYmxlLg0KDQoNCmhv dHNlYXQgU3F1YXZhIChhIHRpbnkgTGFibEd0azIgZGVtbykNCuKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6DQogIDxodHRw czovL2Rpc2N1c3Mub2NhbWwub3JnL3QvYW5uLWhvdHNlYXQtc3F1YXZhLWEtdGlueS1sYWJsZ3Rr Mi1kZW1vLzE3OTU3LzE+DQoNCg0KRGFtaWVuIEd1aWNoYXJkIGFubm91bmNlZA0K4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSADQoNCiAgPGh0dHBzOi8vcGFzdGViaW4uY29tL053dTJhQzdBPg0KDQogIFRoZSBb U3F1YXZhIGJvYXJkIGdhbWVdLg0KDQogIDxodHRwczovL3VzMS5kaXNjb3Vyc2UtY2RuLmNvbS9m bGV4MDIwL3VwbG9hZHMvb2NhbWwvb3JpZ2luYWwvMlgvOC84N2MzMWQ5ZjEyN2Y5OWYxMmU5NmVj ZmY2YzU3OWI3MTA5MjZmOTQ1LnBuZz4NCg0KICBTcXVhdmEgMS4xIGhhcyBubyB2ZWN0b3IgZ3Jh cGhpY3MsIGhvd2V2ZXIgeW91IGNhbiBlZGl0L3Nocmluay9zdHJldGNoDQogIGAuL3NxdWF2YS5w bmcnIGFuZCB0aGUgcHJvZ3JhbSB3aWxsIGFkYXB0IHRoZSBib2FyZCB1c2luZyB0aGUgbmV3DQog IHBpeG1hcC4NCg0KICA8aHR0cHM6Ly91czEuZGlzY291cnNlLWNkbi5jb20vZmxleDAyMC91cGxv YWRzL29jYW1sL29yaWdpbmFsLzJYLzYvNjZjYzQxMmU4MDRmN2QxZTgxYTZkMTFlYTVjNDY0NWYz ZWRmYzg3MS5qcGVnPg0KDQoNCltTcXVhdmEgYm9hcmQgZ2FtZV0gPGh0dHBzOi8vYm9hcmRnYW1l Z2Vlay5jb20vYm9hcmRnYW1lLzExMjc0NS9zcXVhdmE+DQoNCg0Kb3BlbnRlbGVtZXRyeSAwLjkw IChhbmQgYXNzb2NpYXRlZCBsaWJyYXJpZXMpDQrilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZANCg0KICBB cmNoaXZlOg0KICA8aHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90L2Fubi1vcGVudGVsZW1ldHJ5 LTAtOTAtYW5kLWFzc29jaWF0ZWQtbGlicmFyaWVzLzE3OTU4LzE+DQoNCg0KU2ltb24gQ3J1YW5l cyBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIEhlbGxvLA0KDQogIEknbSB0aHJpbGxlZCB0 byBhbm5vdW5jZSBbb3BlbnRlbGVtZXRyeSAwLjkwXSAoYXMgd2VsbCBhcw0KICBgb3BlbnRlbGVt ZXRyeS1jbGllbnQnLCBgb3BlbnRlbGVtZXRyeS1jbGllbnQtY29odHRwLWx3dCcsIGV0Yy4pLg0K DQogIE9wZW50ZWxlbWV0cnkgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgPGh0dHBzOi8vb3BlbnRl bGVtZXRyeS5pby8+IGZvcg0KICBPQ2FtbDsgaXQgY292ZXJzIGJvdGggdGhlIGNvcmUgX2NsaWVu dCBBUElfIChmb3IgaW5zdHJ1bWVudGF0aW9uIG9mDQogIGxpYnJhcmllcywgZXRjLikgYW5kIHRo ZSBmdWxsIFNESyB3aXRoIHZhcmlvdXMgX2V4cG9ydGVyc18uIEl0IGlzDQogIGNvbXBhdGlibGUg d2l0aCBbVHJhY2VdLg0KDQogIFRoaXMgcmVsZWFzZSBpcyB0aGUgcmVzdWx0IG9mIG1vbnRocyBv ZiB3b3JrIGFuZCBpcyBob3BlZnVsbHkgb25lIG9mDQogIHRoZSBsYXN0IGJlZm9yZSAxLjAuIFRo ZSBbY2hhbmdlbG9nXSBpcyBwcmV0dHkgYmlnLCBJIHJld29ya2VkIGEgbG90DQogIG9mIHRoaW5n czsgYW1vbmcgb3RoZXJzOg0KICDigKIgbW92ZSB0byBvY2FtbC1wcm90b2MvcGJydCA0LjAgKHdp dGggbXV0YWJsZSBmaWVsZHMgYW5kIGEgZGlmZmVyZW50DQogICAgY29kZWdlbiBmb3IgcHJvdG9i dWZzKQ0KICDigKIgdGhlIEFQSSBpcyBjbG9zZXIgdG8gZ3VpZGVsaW5lcyBmcm9tIDxodHRwczov L29wZW50ZWxlbWV0cnkuaW8+IChub3QNCiAgICBmdWxseSB0aGVyZSB5ZXQgYnV0IGJldHRlcikN CiAg4oCiIG1vZHVsYXJpdHkgb2YgdGhlIGludGVybmFsIHByb2Nlc3Npbmcgb2Ygc2lnbmFscyBp cyBtdWNoIGltcHJvdmVkLA0KICAgIHdpdGggYmV0dGVyIGNvZGUgcmV1c2UsIHBsdWdnYWJsZSB+ ZXZlcnl0aGluZywgYmV0dGVyDQogICAgcXVldWVpbmcvYmF0Y2hpbmcsIEhUVFAgcmV0cmllcw0K ICDigKIgc3VwcG9ydCBmb3IgZXhwb3J0aW5nIGFzIEpTT04gaW5zdGVhZCBvZiBwcm90b2J1Zg0K ICDigKIgc3VwcG9ydCBmb3IgdHJhY2UgMC4xMSwgd2hpY2ggYWxsb3dzIGBvcGVudGVsZW1ldHJ5 LnRyYWNlJyB0byBlc2NoZXcNCiAgICBhbGwgaXRzIGdsb2JhbCBzdGF0ZSBleGNlcHQgZm9yIHRo ZSBnbG9iYWwgT1RFTCBleHBvcnRlcg0KICDigKIgYmV0dGVyIGxpZmVjeWNsZSBhbmQgY2xlYW51 cA0KDQogIEFQSSBkb2N1bWVudGF0aW9uIGNhbiBiZSBmb3VuZCBbaGVyZV0uIEFzIGFsd2F5cywg ZmVlZGJhY2ssIGJ1Zw0KICByZXBvcnRzLCBldGMgYXJlIHZlcnkgd2VsY29tZS4NCg0KDQpbb3Bl bnRlbGVtZXRyeSAwLjkwXQ0KPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC10cmFjaW5nL29jYW1s LW9wZW50ZWxlbWV0cnkvcmVsZWFzZXMvdGFnL3YwLjkwPg0KDQpbVHJhY2VdIDxodHRwczovL2dp dGh1Yi5jb20vb2NhbWwtdHJhY2luZy9vY2FtbC10cmFjZS8+DQoNCltjaGFuZ2Vsb2ddDQo8aHR0 cHM6Ly9naXRodWIuY29tL29jYW1sLXRyYWNpbmcvb2NhbWwtb3BlbnRlbGVtZXRyeS9ibG9iL21h aW4vQ0hBTkdFUy5tZCMwOTA+DQoNCltoZXJlXSA8aHR0cHM6Ly9vY2FtbC10cmFjaW5nLmdpdGh1 Yi5pby9vY2FtbC1vcGVudGVsZW1ldHJ5Lz4NCg0KDQpEdW5lIDMuMjINCuKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6IDxodHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3Qv YW5uLWR1bmUtMy0yMi8xNzkxMi8yPg0KDQoNCkNvbnRpbnVpbmcgdGhpcyB0aHJlYWQsIFNob24g YW5ub3VuY2VkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIANCg0KICBUaGUgRHVuZSB0ZWFtIGlzIHBsZWFzZWQgdG8gYW5ub3VuY2UgW3Ro ZSByZWxlYXNlIG9mIGR1bmUgMy4yMi4xXS4NCg0KICBJZiB5b3UgZW5jb3VudGVyIGEgcHJvYmxl bSB3aXRoIHRoaXMgcmVsZWFzZSwgcGxlYXNlIHJlcG9ydCBpdCBpbiBbb3VyDQogIGlzc3VlIHRy YWNrZXJdLg0KDQoNClt0aGUgcmVsZWFzZSBvZiBkdW5lIDMuMjIuMV0NCjxodHRwczovL2dpdGh1 Yi5jb20vb2NhbWwvZHVuZS9yZWxlYXNlcy90YWcvMy4yMi4xPg0KDQpbb3VyIGlzc3VlIHRyYWNr ZXJdIDxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwvZHVuZS9pc3N1ZXM+DQoNCkZpeGVkDQrilYzi lYzilYzilYzilYwNCg0KICDigKIgUmVzdG9yZSBjb21wYXRpYmlsaXR5IHdpdGggV2luZG93cyA3 ICgjMTM5MDUsIEBub2piKQ0KDQogIOKAoiBgZHVuZSB0ZXN0JyBub3cgcnVucyB0ZXN0cyBpbiB0 aGUgZGVmYXVsdCBjb250ZXh0IG9ubHkuIFdoZW4gdGhlcmUNCiAgICBpcyBhIHNpbmdsZSBjb250 ZXh0LCBpdCBpcyB0cmVhdGVkIGFzIHRoZSBkZWZhdWx0LiBUaGlzIGZpeGVzIGENCiAgICBjcmFz aCB3aGVuIHRoZSB3b3Jrc3BhY2UgaGFzIG5vIGNvbnRleHQgbmFtZWQgImRlZmF1bHQiLiAoIzEz OTMwLA0KICAgIGZpeGVzICMxMzkwNCwgQEFsaXp0ZXIpDQoNCiAg4oCiIEZpeCBgZHVuZSB0cmFj ZSBjYXQgLS1jaHJvbWUtdHJhY2UnIHRvIGFkaGVyZSB0byB0aGUgQ2hyb21lIFRyYWNlDQogICAg RXZlbnQgRm9ybWF0IGJ5IHByb3ZpZGluZyB0aW1lc3RhbXBzIGFuZCBkdXJhdGlvbnMgYXQgbWlj cm9zZWNvbmQNCiAgICBncmFudWxhcml0eSAoIzEzOTExLCBmaXhlcyAjMTM5MDYsIEBBbGl6dGVy KQ0KDQoNCk9sZCBDV04NCuKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIElmIHlvdSBoYXBwZW4g dG8gbWlzcyBhIENXTiwgeW91IGNhbiBbc2VuZCBtZSBhIG1lc3NhZ2VdIGFuZCBJJ2xsIG1haWwN CiAgaXQgdG8geW91LCBvciBnbyB0YWtlIGEgbG9vayBhdCBbdGhlIGFyY2hpdmVdIG9yIHRoZSBb UlNTIGZlZWQgb2YgdGhlDQogIGFyY2hpdmVzXS4NCg0KICBJZiB5b3UgYWxzbyB3aXNoIHRvIHJl Y2VpdmUgaXQgZXZlcnkgd2VlayBieSBtYWlsLCB5b3UgbWF5IHN1YnNjcmliZQ0KICB0byB0aGUg W2NhbWwtbGlzdF0uDQoNCiAgW0FsYW4gU2NobWl0dF0NCg0KDQpbc2VuZCBtZSBhIG1lc3NhZ2Vd IDxtYWlsdG86YWxhbi5zY2htaXR0QHBvbHl0ZWNobmlxdWUub3JnPg0KDQpbdGhlIGFyY2hpdmVd IDxodHRwczovL2FsYW4ucGV0aXRlcG9tbWUubmV0L2N3bi8+DQoNCltSU1MgZmVlZCBvZiB0aGUg YXJjaGl2ZXNdIDxodHRwczovL2FsYW4ucGV0aXRlcG9tbWUubmV0L2N3bi9jd24ucnNzPg0KDQpb Y2FtbC1saXN0XSA8aHR0cHM6Ly9zeW1wYS5pbnJpYS5mci9zeW1wYS9pbmZvL2NhbWwtbGlzdD4N Cg0KW0FsYW4gU2NobWl0dF0gPGh0dHBzOi8vYWxhbi5wZXRpdGVwb21tZS5uZXQvPg0KDQo= --==-=-= 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 March 31 to April 07,= 2026.

restricted 2.0.0 limit which system operations and which parts= of the filesystem your program can access

removewingman announced

Hello,

I am happy to announce a new version of restricted.

This library lets you limit which system operations and which parts of the = filesystem your program can access. Call it as early as possible in your pr= ogram so that the rest of the code runs with reduced privileges. Currently,= actual enforced restrictions are implemented for these operating systems:

  • OpenBSD
  • Linux (only filesystem view)

Even on other operating systems, you can still use restricted to document which privil= eges your program needs. Users can then test if your program respects these= promises with tools such as pledge= on Linux. Enjoy :slight_smile:

CHANGELOG:

  • tested on:
    • x86_64 openbsd (16/16 Tests passed)
    • x86_64-alpine-linux (Landlock ABI version: 7) (4/12 Tests passed: file_= read_unv, file_write_unv, file_create_unv_linux, file_cwrr_unv_linux)

Added

  • API: exec promises and accesses optional
  • OpenBSD: exec promises

Removed

  • SystemOperation.TmpPath (deprecated see: pledge (2))

Job offer: compiler engineer for Catala @ CNAF (social benefit= s agency)

Denis Merigoux announced

[The following is in French since this is a job offer in the French public = sector]

Candidatez ici : https://www.lasecurecrute.fr/offre-emploi/ingenieur-expert-en-comp= ilation-langages-de-programmation--f-h/normandie/1065497

La CNAF (Caisse Nationale des Allocations Familiales), t=C3=AAte de = r=C3=A9seau des 101 CAF, repr=C3=A9sente la branche Famille de la S=C3=A9cu= rit=C3=A9 sociale et a pour mission de piloter la politique familiale et l= =E2=80=99aide aux populations en situation de pr=C3=A9carit=C3=A9 ainsi que= la politique d=E2=80=99action sociale.

Au sein de la Direction des Syst=C3=A8mes d=E2=80=99Information (DSI), comp= tant environ 880 collaborateurs, la Direction Prestations Flux et D=C3= =A9cisionnel (DPFD) est d=C3=A9coup=C3=A9e en 4 d=C3=A9partements et vo= us serez rattach=C3=A9 au d=C3=A9partement =C2=AB Prestations Individuel= les et R=C3=A9f=C3=A9rentiels M=C3=A9tiers =C2=BB qui est pr=C3=A9sent = sur les sites de Caen, Le Mans et Rennes.

Ce d=C3=A9partement a pour mission principale de concevoir, d=C3=A9velopper= et maintenir le syst=C3=A8me d=E2=80=99information li=C3=A9 aux prestation= s individuelles (prestations vers=C3=A9es aux allocataires telles que l=E2= =80=99allocation familiale, l=E2=80=99allocation logement, la prime =C3=A0 = la naissance, le RSA, la prime d=E2=80=99activit=C3=A9, =E2=80=A6). Le d=C3= =A9partement fournit ainsi des moteurs de r=C3=A8gles, ainsi que les sp=C3= =A9cifications fonctionnelles associ=C3=A9es afin de calculer le bon droit,= au bon moment, pour les allocations vers=C3=A9es par les CAF.

Dans le cadre de projets strat=C3=A9giques pour la branche famille, la ou l= e candidat int=C3=A9grera le centre technique Catala de la CNAF.

Catala est un langage de programmation d=C3=A9di=C3=A9 d=C3=A9velopp=C3=A9 = par l=E2=80=99Institut National de Recherche en Informatique et en Automati= que (Inria), sp=C3=A9cialement adapt=C3=A9 =C3=A0 la transformation de sp= =C3=A9cifications juridiques et r=C3=A9glementaires en code informatique. L= a CNAF ayant d=C3=A9cid=C3=A9 de s=E2=80=99appuyer sur Catala pour les proj= ets de modernisation de son syst=C3=A8me de calcul des prestations sociales= , elle souhaite =C3=A9galement internaliser des comp=C3=A9tences de mainten= ance sur l=E2=80=99outillage de Catala au travers de ce poste.

Le centre technique Catala a ainsi vocation =C3=A0 produire des contributio= ns open-source sur Catala, mais aussi =C3=A0 r=C3=A9pondre aux besoins d=E2= =80=99expertise technique du d=C3=A9partement =C2=AB Prestations Individuel= les et R=C3=A9f=C3=A9rentiels M=C3=A9tiers =C2=BB pour ses projets li=C3=A9= s aux moteurs de calcul des prestations sociales.

La personne recrut=C3=A9e travaillera avec l=E2=80=99=C3=A9quipe Catala de = l=E2=80=99Inria (Louis Gesbert, Vincent Botbol, Romain Primet et moi-m=C3= =AAme) ! N=E2=80=99h=C3=A9sitez pas =C3=A0 me contacter si vous avez des qu= estions sur le job :slight_smile:

Un petit aper=C3=A7u des choses faites et =C3=A0 faire en compilation sur C= atala : https://blog.merigoux.ovh/en/2026/02/19/building-proper-pl.html

ocgtk 0.1: OCaml bindings for GTK 4 (preview release)

Chris Armstrong announced

I=E2=80=99m pleased to announce the first preview release of ocgtk, OCaml b= indings for GTK 4 (v0.1-preview0).

What is it?

ocgtk provides OCa= ml bindings for the GTK 4 widget toolkit and its associated libraries (GDK,= GIO, Pango, GdkPixbuf, GSK, Graphene, Cairo). It targets OCaml >=3D5.3 (for n= ow).

It is inspired by, and draws some core common code and many design ideas fr= om, lablgtk3 =E2=80=94 the long-standing GTK 3 bindings library. However, t= he APIs are not compatible: whereas lablgtk3=E2=80=99s bindings are largely= hand-written, ocgtk uses a code generator that reads GObject Introspection= (GIR) definition files to produce both C stubs and OCaml wrappers. This me= ans binding coverage tracks the GIR definitions rather than hand-written ef= fort, and the generated code follows a consistent procedural structure.

A note on tooling: the code generator itself was developed with heav= y assistance from LLMs. However, the output (the C stubs and OCaml modules = that form the actual library) is programmatically generated from the GIR de= finitions, not written by an LLM.

What=E2=80=99s implemented

  • Bindings for GTK 4, GDK, GIO, Pango, GdkPixbuf, GSK, Graphene, and Cair= o
  • Classes, records, enumerations, and bitfields
  • Constructors, methods, and properties
  • Signals (no return values or parameters)
  • A working example: a GTK 4 calculator application

What=E2=80=99s missing

This is a first milestone, not a production-ready release. Several importan= t features are not yet supported:

  • Interfaces: GObject interfaces are not yet supported. This has a= broader impact than it might appear: not only are interface types themselves absent, but any method on a= class that takes an interface as a parameter or returns an interface type = is also suppressed. This means some methods on otherwise-supported classes = will be missing from the bindings.
  • Callbacks: Functions that accept OCaml callbacks as arguments (b= eyond signals) are not yet supported. This limits use of many asynchronous GIO APIs and some GTK patte= rns.
  • Free functions: Top-level functions (not attached to a class) ar= e not yet generated. Some utility APIs are therefore unavailable.
  • Non-opaque record field access: Fields of non-opaque GLib/GDK re= cords cannot yet be read directly.
  • Multi-parameter signals: Only signals with zero parameters and = no return value are supported; signals with complex signatures are silentl= y skipped.
  • GLib types: most GLib types are not bound, which means that seve= ral useful APIs that use lists, byte arrays, GVariants (heavily used by DBu= s) are not available.

These gaps mean you can build basic GTK applications, but expect to hit wal= ls with more advanced widget usage, asynchronous I/O, or any API that relie= s heavily on interfaces.

There is a ROADMAP.md that lists the rough plan to deal with much of the= above.

Documentation

API reference documentation is currently deficient. Accurately generating d= ocumentation from GIR definitions is an unsolved problem for this project, so for now the generat= ed modules are largely undocumented. In the meantime, the GTK 4 documentation is the best referenc= e for understanding what each binding corresponds to, and the examples in the repository illust= rate practical usage =E2=80=94 in particular the calculator example, which demonstrates a non-trivial GTK = 4 application.

Stability

This code is untested in production environments. The generated bindings co= ver a large surface area, but test coverage is not yet comprehensive. I would caution a= gainst use in any production or safety-sensitive context at this stage. Comments or MRs are w= elcome.

This code has not been tested outside of Linux environments.

Installation and Usage

Download and pin the source code for now (I=E2=80=99m in the process of pre= paring an opam release. This is taking a some time to sort through cross-pl= atform issues, so I=E2=80=99ll update here with a comment when that is avai= lable).

The bindings have been generated against GTK 4.14.5 (Ubuntu 24.04). If you = have an older version, it should still compile (in theory), but you will re= ceive runtime errors on APIs not available in your version.

  1. Download the repository:https://github.com/chris-armstrong/ocgtk (you can use the v0.1-pr= eview0 tag to get what I=E2=80=99ve mentioned here)
  2. Pin the conf-gtk4 and ocgtk packages in their respective subdirectories
    1. opam pin conf-gtk
    2. opam pin ocgtk
  3. Run opam install ocgtk

Each library is exposed at the ocamlfind level as ocgtk.<libname&g= t; - for example, add ocgtk.gtk or ocgtk.gdk to your dune file, while depending on ocgtk in your o= pam / dune-project file.

Source and issue tracker: https://github.com/chris-armstrong/ocgtk

Feedback and bug reports welcome.

out-channel-redirect 0.1 =E2=80=94 Redirect and capture out_ch= annel output

Hhugo announced

I=E2=80=99m happy to announce the first release of out-channel-redirect, a library for r= edirecting and capturing output written to out_channels.

Features:

  • Capture any out_channel into a string (with convenience shorthands for = stdout and stderr)
  • Redirect one channel into another
  • Works on native (via dup/dup2), JavaScript (js_of_ocaml), and WebAssemb= ly (wasm_of_ocaml)
  • Expert API for manual redirection lifetime control

Installation:

opam install out-channel-redirect

Quick example:

let output, result =3D
  Out_channel_redirect.<=
/span>capture_channel some_channel ~f:(fu=
n () →=20
    Printf.fprintf so=
me_channelhello”=
;;
    42)
(* output =3D “hello”, result =3D<=
span style=3D"color: #8f6f4a; font-style: italic;"> 42 *)

ppxlib.0.38.0

Nathan Rebours announced

The ppxlib team is happy to announce the release of ppxlib.0.38.0.

The main features of this release are support for OCaml 5.5 and improved su= pport of OCaml 5.4 and 5.3. It also comes with a few bug fixes and a couple= new API entries, you can read the extensive release notes here.

This is our first release since we announced our new approach to supporting= new compilers in this thread. All support for compilers ver= sions >=3D 5.3 is implemented using this technique and new = language features are encoded into the AST. We've added Ast_builder and Ast_pattern functions to allow you to manipulate som= e of those, such as labeled tuples or effect patterns. You can see those in= our API documentation here and there. We've also illustrated how to use them in our new manual section. If you're interested in producing or consum= ing other new language features that cannot be represented with our current= internal AST (5.2), please open an issue so we can add the relevant helpers.

Given the ecosystem hasn't yet recovered from the 5.2 AST bump and pp= xlib.0.36.0, we're glad that we can add support for new compilers wi= thout introducing further breakage and keep the maintenance burden within p= pxlib's bounds. We've started discu= ssions with the compiler team to make this approach even more viable in= the future on our end.

We'd like to thank @ceastlund who's our only external contributor for this = release.

I'd personally like to thank @patricoferris for his help getting this out t= he door as well as the OCaml Software Foundation and OCamlPro for funding m= y work on ppxlib.

Thank you for reading and happy preprocessing!

A Proposal for Voluntary AI Disclosure in OCaml Code

Anil Madhavapeddy announced

Dear all,

I've put together an ocaml-ai-disclosure proposal to allow voluntary disclosure of = AI usage in published OCaml code, using opam metadata and extension attributes in source = code.

The repository and blog post have more details, some prototype tooling to extract att= ributes, and a FAQ, but in a nutshell I'm proposing something very similar = to a W3C di= sclosure proposal for HTML.

Package Disclosures

An opam package can declare its disclosure using extension fields:

x-ai-disclosure: "ai-assisted"
x-ai-model: "claude-opus-4-6"
x-ai-provider: "Anthropic"

Note: This may just become a list of values in the final proposal, but y= ou get the idea.

OCaml Module level

OCaml supports extension attributes, which we use via a floating attribute = that applies to the entire compilation unit:

[@@@ai_d=
isclosure "ai-generated"]
[@@@ai_model "claude-opus-4-6"]
[@@@ai_provider "Anthropic"]

let foo =3D ...
let bar =3D ...

These can also be scoped more finely via declaration attributes that apply = to a single binding:

[@@@ai_d=
isclosure "ai-assisted"]

let human_written x=
 =3D ...

let ai_helper y =3D ...
[@@ai_disclosure "ai-generated"]

Disclosure follows a nearest-ancestor inheritance model like the W3C HTML p= roposal, whereby an explicit annotation overrides the inherited value.

I wrote a blog= post with more details, as well as an FAQ in the proposal repository about some of th= e implications.

I couldn't find any other prior art of other language ecosystems trying any= thing similar, so I'd be interested in hearing about any others you all kno= w about. If there's no interest in the wider ecosystem in doing this, then = I'll just use it myself, but I figured there's no harm in starting the disc= ussion!

Blog: OCaml documentation as markdown

David Sancho announced

I published a blog post about odoc's markdown backend and how I used it to = make the melange.re documentation better, hope you like it:

https:/= /sancho.dev/blog/ocaml-documentation-as-markdown

Thanks to @jonludlam @rgrinberg and @Alizter for reviewing the work that ma= de it possible.

hotseat Squava (a tiny LablGtk2 demo)

Damien Guichard announced

https://pastebin.com/Nwu2aC7A

The Squava bo= ard game.

3D"87c31d9f127f99f1=

Squava 1.1 has no vector graphics, however you can edit/shrink/stretch ./squava.png and the program will adapt the board using the new pi= xmap.

3D"66cc412e804f7d1=

opentelemetry 0.90 (and associated libraries)

Simon Cruanes announced

Hello,

I'm thrilled to announce opentelemetry 0.90 (as well as = opentelemetry-client, opentelemetry-client-cohttp-lwt, = etc.).

Opentelemetry is an implementation of https://opentelemetry.io/ for OCaml; it covers both the core client API (for instrumentation of libraries, etc.)= and the full SDK with various exporters. = It is compatible with Trace.

This release is the result of months of work and is hopefully one of the la= st before 1.0. The changelog is pretty big, I reworked a= lot of things; among others:

  • move to ocaml-protoc/pbrt 4.0 (with mutable fields and a different code= gen for protobufs)
  • the API is closer to guidelines from https://opentelemetry.io (not fully there yet but better)
  • modularity of the internal processing of signals is much improved, with= better code reuse, pluggable ~everything, better queueing/batching, HTTP r= etries
  • support for exporting as JSON instead of protobuf
  • support for trace 0.11, which allows opentelemetry.trace t= o eschew all its global state except for the global OTEL exporter
  • better lifecycle and cleanup

API documentation can be found here. As always, feedback, bug reports, etc are ve= ry welcome.

Dune 3.22

Continuing this thread, Shon announced

The Dune team is pleased to announce the release of dune 3.22.1.

If you encounter a problem with this release, please report it in our issue tracker.

Fixed

  • Restore compatibility with Windows 7 (#13905, @nojb)
  • dune test now runs tests in the default context only. When= there is a single context, it is treated as the default. This fixes a cras= h when the workspace has no context named "default". (#13930, fixes #13904,= @Alizter)
  • Fix dune trace cat --chrome-trace to adhere to the Chrome = Trace Event Format by providing timestamps and durations at microsecond gra= nularity (#13911, fixes #13906, @Alizter)

Old CWN

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

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

--==-=-=-- --=-=-=-- --===-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQFvBAEBCABZFiEE6lXof/BsSVW56ZmGBA0KO07S5ccFAmnUzysbFIAAAAAABAAO bWFudTIsMi41KzEuMTIsMCwzHxxhbGFuLnNjaG1pdHRAcG9seXRlY2huaXF1ZS5v cmcACgkQBA0KO07S5cerMQgA0k0MgCJbP+FHKjPNsUpKo2vOhNu38KRw58INQPmQ Uo05NFShu9/pLmasE1meRpaa8vpvt0Fxvmc7V5DhJixe++e+/ynpPtp1Ei35cjyy 4zQVSrV9vY7nhfLG5qJFMlhBh/Y0wGJ9nmlR2c7FqncvQiMoGGS1RSJf03JJAXri 0KHnvq1ZFiGrO94QLIxxwg6gLbQ3rurGtVwB31gHwWVUFpYRW4eJiEvKwhsZ3Z57 9nY/Aa0JRZXMDFsMe21odLeycRPRvFuhoAoY/Jf532/43g4zLvW0XFJKhsz/AKez 5Yqf1O2MaRseN9VOQQUtBcPiZqMtnlxBuT2OZ37mudayAQ== =f1fC -----END PGP SIGNATURE----- --===-=-=--