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=AZWMvqFu; 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 4FE31400A7 for ; Tue, 24 Feb 2026 13:37:11 +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=OOHgZDall2oAFHsqhY5dTQbqrxxvRRtwnuVGZVmu87c=; b=AZWMvqFuDP2NtMWZhjuVtg0p9DZ5kJXBRB5pdBcgX3V38bDlLD7gv2vr tJUN8iLDn/RZM42ktMX5aS4bukyvE7GSVB8ec6CMk9A9Wb0QDnji1cmMc VF2bPxWY9qu5m77pFvXCOLKANgfO82GZl3bMuARB+Sxk4ne1/UBJhA/8J w=; X-CSE-ConnectionGUID: 5UirxDr9T9+LVZOBjHbPfQ== X-CSE-MsgGUID: VTMRyDsMTVq5UMcLyTHs5A== 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 include:mailout.safebrands.com a:basic-mail.safebrands.com a:basic-mail01.safebrands.com a:basic-mail02.safebrands.com ip4:128.93.142.0/24 ip4:192.134.164.0/24 ip4:128.93.162.160 ip4: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.21,308,1763420400"; d="scan'208,217";a="264935717" Received: from prod-sympa-app.inria.fr ([128.93.162.27]) by mail2-relais-roc.national.inria.fr with ESMTP; 24 Feb 2026 14:37:07 +0100 Received: by prod-sympa-app.inria.fr (Postfix, from userid 990) id 6DC5F83704; Tue, 24 Feb 2026 14:37:07 +0100 (CET) Received: from mail3-relais-sop.national.inria.fr (mail3-relais-sop.national.inria.fr [192.134.164.104]) by prod-sympa-app.inria.fr (Postfix) with ESMTP id 35B60805B4 for ; Tue, 24 Feb 2026 14:36:59 +0100 (CET) X-CSE-ConnectionGUID: gn4ZI2KgSimHy+CdAr9TiA== X-CSE-MsgGUID: O9cP1sFET2ua34WPv77/3Q== X-IronPort-AV: E=Sophos;i="6.21,308,1763420400"; d="scan'208,217";a="139663849" Received: from mac-03220211.irisa.fr ([131.254.21.249]) by mail3-relais-sop.national.inria.fr with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Feb 2026 14:36:59 +0100 From: Alan Schmitt To: "lwn" , caml-list@inria.fr Date: Tue, 24 Feb 2026 14:36:57 +0100 Message-ID: MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="=-=-=" Subject: [Caml-list] Attn: Development Editor, Latest OCaml Weekly News Reply-To: Alan Schmitt X-Loop: caml-list@inria.fr X-Sequence: 19458 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 ZWsgb2YgRmVicnVhcnkgMTcgdG8gMjQsDQoyMDI2Lg0KDQpUYWJsZSBvZiBDb250ZW50cw0K4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCk9TRUMt MjAyNi0wMSBpbiB0aGUgT0NhbWwgcnVudGltZTogQnVmZmVyIE92ZXItUmVhZCBpbiBPQ2FtbCBN YXJzaGFsIERlc2VyaWFsaXphdGlvbg0KT0NhbWwgNS40LjEgYW5kIDQuMTQuMyByZWxlYXNlZA0K QW5uOiBPY2hhdCDigJQgVHJ5IE9jaGF0IGZvciB0ZXJtaW5hbC1iYXNlZCBMTE0gd29ya2Zsb3dz DQpTZXJpYWxwb3J0IC0gbmV3IHNlcmlhbCBjb21tdW5pY2F0aW9uIGxpYnJhcnkNClNsaXBzaG93 IQ0KUmVtb3RlIE9DYW1sIERpc3RyaWJ1dGVkIFN5c3RlbXMgRW5naW5lZXIgKExpbnV4IC8gU3Rv cmFnZSAvIE5ldHdvcmtpbmcpIOKAkyB3aGl0ZXNreS5jbG91ZCDigJMgRU1FQS9Bc2lhDQpHcmFj ZSAwLjMuMCDwn5KFLCBmYW5jeSBkaWFnbm9zdGljcyBsaWJyYXJ5IGZvciBjb21waWxlcnMNCkpz X29mX29jYW1sIC8gV2FzbV9vZl9vY2FtbCA2LjMNCmtxdWV1ZS1tbCAwLjUuMA0KRHVuZSAzLjIx LjANCk90aGVyIE9DYW1sIE5ld3MNCk9sZCBDV04NCg0KDQpPU0VDLTIwMjYtMDEgaW4gdGhlIE9D YW1sIHJ1bnRpbWU6IEJ1ZmZlciBPdmVyLVJlYWQgaW4gT0NhbWwgTWFyc2hhbCBEZXNlcmlhbGl6 YXRpb24NCuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6DQogIDxodHRwczov L2luYm94LmNpLmRldi9jYW1sLWxpc3QvYzMyOTgzMDktYTA2ZC00YWM4LTg3NGMtZmUyMTA0MDc4 ZTYxQG1laG5lcnQub3JnL1QvPg0KDQoNCkhhbm5lcyBNZWhuZXJ0IGFubm91bmNlZA0K4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSADQoNCiAgRGVhciBldmVyeW9uZSwNCg0KICBpdCBpcyBteSBwbGVhc3VyZSB0byBh bm5vdW5jZSB0aGUgZmlyc3Qgc2VjdXJpdHkgYW5ub3VuY2VtZW50IG9mIHRoaXMNCiAgeWVhciwg YW5kIHRoZSBmaXJzdCBjb29yZGluYXRlZCBieSB0aGUgbmV3IE9DYW1sIHNlY3VyaXR5IHJlc3Bv bnNlDQogIHRlYW0gKDxodHRwczovL29jYW1sLm9yZy9zZWN1cml0eT4pLg0KDQogIFBsZWFzZSBz dWJzY3JpYmUgdG8gdGhlIE9DYW1sIHNlY3VyaXR5IGFubm91bmNlbWVudCBtYWlsaW5nIGxpc3QN CiAgKDxodHRwczovL3N5bXBhLmlucmlhLmZyL3N5bXBhL2luZm8vb2NzZi1vY2FtbC1zZWN1cml0 eS1hbm5vdW5jZW1lbnRzPikNCiAgdG8gcmVjZWl2ZSBhbGwgc2VjdXJpdHkgYWR2aXNvcmllcy4g VG8gdGhpcyBtYWlsaW5nIGxpc3QgSSdsbCBvbmx5DQogIGNvcHkgdGhvc2UgYWZmZWN0aW5nIHRo ZSBjb3JlIG9mIE9DYW1sIGRpc3RyaWJ1dGlvbi4NCg0KICBJdCBzaG91bGQgYW55IG1vbWVudCBu b3cgYWxzbyBhcHBlYXIgYXQNCiAgPGh0dHBzOi8vb3N2LmRldi9saXN0P3E9T1NFQy0yMDI2LTAx Pg0KDQogIEh1bWFuIGxpbms6DQogIDxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwvc2VjdXJpdHkt YWR2aXNvcmllcy90cmVlL21haW4vYWR2aXNvcmllcy8yMDI2L09TRUMtMjAyNi0wMS5tZD4NCg0K ICDilIzilIDilIDilIDilIANCiAg4pSCIGlkOiBPU0VDLTIwMjYtMDENCiAg4pSCIG1vZGlmaWVk OiAiMjAyNi0wMi0xN1QxMzozMDowMFoiDQogIOKUgiBwdWJsaXNoZWQ6ICIyMDI2LTAyLTE3VDEz OjMwOjAwWiINCiAg4pSCIGFsaWFzZXM6IFsgIEdIU0EtajI2ai1tNXhyLWcyM2MgR0hTQS1tMzRy LWNncTctamhmbSBdDQogIOKUgiBzZXZlcml0eTogIkNWU1M6My4xL0FWOkwvQUM6TC9QUjpOL1VJ Ok4vUzpVL0M6SC9JOkwvQTpOIg0KICDilIIgc2V2ZXJpdHlfc2NvcmU6ICI2LjgiDQogIOKUgiBh ZmZlY3RlZDogIm9jYW1sIiB7PCAiNC4xNC4zIiB8ICg+PSAiNSIgJiA8ICI1LjQuMSIpfQ0KICDi lIIgZXZlbnRzOiBbDQogIOKUgiAgICBbDQogIOKUgiAgICAgIGdpdCAiaHR0cHM6Ly9naXRodWIu Y29tL29jYW1sL29jYW1sIiBbDQogIOKUgiAgICAgICAgW2ZpeGVkICJiMGEyNjE0Njg0YTUyYWNk ZWQ3ODRlYzIxM2YxNGRkZmUwODVkMTQ2Il0NCiAg4pSCICAgICAgXQ0KICDilIIgICAgXQ0KICDi lIIgICAgWw0KICDilIIgICAgICBnaXQgImh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vY2FtbCIg Ww0KICDilIIgICAgICAgIFtmaXhlZCAiZTM5MTlmZWY0MzZmODkyNzFiYzMwYmJlODU5Mjg1MWY3 Mjg5ZmI2OCJdDQogIOKUgiAgICAgIF0NCiAg4pSCICAgIF0NCiAg4pSCIF0NCiAg4pSCIHJlZmVy ZW5jZXM6IFsNCiAg4pSCICAgIFtyZXBvcnQgDQogIOKUgiAiaHR0cHM6Ly9naXRodWIuY29tL29j YW1sL3NlY3VyaXR5LWFkdmlzb3JpZXMvc2VjdXJpdHkvYWR2aXNvcmllcy9HSFNBLWoyNmotbTV4 ci1nMjNjIl0NCiAg4pSCIF0NCiAg4pSCIGNyZWRpdHM6IFsNCiAg4pSCICAgIFtyZXBvcnRlciAi SnVzdGluIFRpbXBlcmlvIl0NCiAg4pSCICAgIFtyZW1lZGlhdGlvbl9kZXZlbG9wZXIgIk5pY29s w6FzIE9qZWRhIELDpHIiXQ0KICDilIIgICAgW3JlbWVkaWF0aW9uX2RldmVsb3BlciAiWGF2aWVy IExlcm95Il0NCiAg4pSCICAgIFtyZW1lZGlhdGlvbl9kZXZlbG9wZXIgIkdhYnJpZWwgU2NoZXJl ciJdDQogIOKUgiAgICBbcmVtZWRpYXRpb25fcmV2aWV3ZXIgIlhhdmllciBMZXJveSJdDQogIOKU giAgICBbcmVtZWRpYXRpb25fcmV2aWV3ZXIgIk9saXZpZXIgTmljb2xlIl0NCiAg4pSCICAgIFty ZW1lZGlhdGlvbl92ZXJpZmllciAiTWluZHkgUHJlc3RvbiJdDQogIOKUgiAgICBbcmVtZWRpYXRp b25fdmVyaWZpZXIgIkVkd2luIFTDtnLDtmsiXQ0KICDilIIgICAgW2Nvb3JkaW5hdG9yICJIYW5u ZXMgTWVobmVydCJdDQogIOKUgiBdDQogIOKUgiBjd2U6IFsgQ1dFLTEyNiBDV0UtNTAyIENXRS03 NTQgXQ0KICDilJTilIDilIDilIDilIANCg0KICAqQnVmZmVyIE92ZXItUmVhZCBpbiBPQ2FtbCBN YXJzaGFsIERlc2VyaWFsaXphdGlvbioNCg0KDQpTdW1tYXJ5DQrilYzilYzilYzilYzilYzilYzi lYwNCg0KICBBIGNyaXRpY2FsIGJ1ZmZlciBvdmVyLXJlYWQgdnVsbmVyYWJpbGl0eSBpbiBPQ2Ft bCdzIE1hcnNoYWwNCiAgZGVzZXJpYWxpemF0aW9uIChydW50aW1lL2ludGVybi5jKSBlbmFibGVz IHJlbW90ZSBjb2RlIGV4ZWN1dGlvbg0KICB0aHJvdWdoIGEgbXVsdGktcGhhc2UgYXR0YWNrIGNo YWluLiBUaGUgdnVsbmVyYWJpbGl0eSBzdGVtcyBmcm9tDQogIG1pc3NpbmcgYm91bmRzIHZhbGlk YXRpb24gaW4gdGhlIHJlYWRibG9jaygpIGZ1bmN0aW9uLCB3aGljaCBwZXJmb3Jtcw0KICB1bmJv dW5kZWQgbWVtY3B5KCkgb3BlcmF0aW9ucyB1c2luZyBhdHRhY2tlci1jb250cm9sbGVkIGxlbmd0 aHMgZnJvbQ0KICBtYWxpY2lvdXMgTWFyc2hhbCBkYXRhLg0KDQogIFBsZWFzZSBub3RlIHRoYXQg TWFyc2hhbCBpcyBub3QgdHlwZSBzYWZlLCBhbmQgeW91IGhhdmUgdG8gYmUgY2FyZWZ1bA0KICBp ZiB5b3UgdXNlIHRoZSBkZXNlcmlhbGl6YXRpb24gb24gdW50cnVzdGVkIGlucHV0IChkdWUgdG8g dHlwZQ0KICBjb25mdXNpb24sIGFuZCByZW1vdGUgY29kZSBleGVjdXRpb24gYnkgZGVzaWduIC0g eW91IGNhbiB1c2UgTWFyc2hhbA0KICBmb3IgY29kZSkuDQoNCiAgQWZmZWN0ZWQgZnVuY3Rpb25z OiBgTWFyc2hhbC5mcm9tX2NoYW5uZWwnLCBgTWFyc2hhbC5mcm9tX2J5dGVzJywNCiAgYE1hcnNo YWwuZnJvbV9zdHJpbmcnLCBgU3RkbGliLmlucHV0X3ZhbHVlJywgYFBlcnZhc2l2ZXMuaW5wdXRf dmFsdWUnDQogIHdoZW4gcmVhZGluZyBkYXRhIGZyb20gYW4gdW50cnVzdGVkIHNvdXJjZS4NCg0K DQpWdWxuZXJhYmlsaXR5IEF0dGFjayBWZWN0b3INCuKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKV jOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjA0K DQogIENvcnJ1cHRlZCBvciBtYWxpY2lvdXMgbWFyc2hhbGVkIGRhdGEgdGhhdCBjYXVzZXMgdW5k ZWZpbmVkIGJlaGF2aW91cg0KICBpbiB0aGUgcnVudGltZSBzeXN0ZW0gd2hlbiB1bm1hcnNoYWxl ZC4gIGBpbnB1dF92YWx1ZScgc2hvdWxkIGVpdGhlcg0KICBmYWlsIGNsZWFubHkgb3IgcHJvZHVj ZSBhIHdlbGwtZm9ybWVkIE9DYW1sIG9iamVjdCwgd2l0aG91dCBjb3JydXB0aW5nDQogIHRoZSBy dW50aW1lIHN5c3RlbS4NCg0KICBDb25zZXF1ZW50bHksIHRoaXMgZXhjbHVkZXM6DQoNCiAg4oCi IHdlbGwtZm9ybWVkIG1hcnNoYWxlZCBkYXRhIHRoYXQgcHJvZHVjZXMgYW4gT0NhbWwgb2JqZWN0 IHRoYXQgaXMgbm90DQogICAgb2YgdGhlIHR5cGUgZXhwZWN0ZWQgYnkgdGhlIE9DYW1sIGNvZGUg YW5kIGNhdXNlcyB0aGUgT2NhbWwgY29kZSB0bw0KICAgIGNyYXNoIG9yIG1pc2JlaGF2ZQ0KDQog IOKAoiBtaXN1c2VzIG9mIHRoZSBPQ2FtbCBydW50aW1lIHN5c3RlbSBieSB0aGUgcHJvZ3JhbSBw ZXJmb3JtaW5nDQogICAgaW5wdXRfdmFsdWUsIHN1Y2ggYXMgc2V0dGluZyBgRGVidWdnZXIuZnVu Y3Rpb25fcGxhY2Vob2xkZXInIHRvIHRoZQ0KICAgIHdyb25nIGZ1bmN0aW9uLg0KDQogIFRoZSBm b3JtZXIgaXNzdWUgbWF5IGJlIGFkZHJlc3NlZCBhdCBzb21lIHBvaW50IGJ5IHZhbGlkYXRpbmcg dGhlDQogIHVubWFyc2hhbGVkIE9DYW1sIHZhbHVlIGFnYWluc3QgdGhlIGV4cGVjdGVkIHR5cGUs IHVzaW5nIHRoZSBmdW5jdGlvbnMNCiAgZnJvbSBtb2R1bGUgYE9iaicgYW5kIHNvbWUga2luZCBv ZiBydW4tdGltZSB0eXBlIGRlc2NyaXB0aW9uLg0KDQogIFRoZSBsYXR0ZXIgaXNzdWUgaXMgYSBi dWcgaW4gdGhlIHByb2dyYW0gdGhhdCB1bm1hcnNoYWxzIHRoZSBkYXRhLg0KDQoNCkZpeA0K4pWM 4pWM4pWMDQoNCuKXiiBPQ2FtbCBydW50aW1lDQoNCiAgVGhlIE9DYW1sIHJ1bnRpbWUgaGFzIGJl ZW4gaGFyZGVuZWQgd2l0aCBhZGRpdGlvbmFsIGJvdW5kcyBjaGVja3MuIEFuDQogIGV4Y2VwdGlv biBpcyByYWlzZWQgb24gYmFkIGlucHV0Lg0KDQoNCuKXiiBUaGlyZCBwYXJ0eSBsaWJyYXJpZXMN Cg0KICBUaGlyZCBwYXJ0eSBsaWJyYXJpZXMgdGhhdCB3YW50IHRvIGhhcmRlbiB0aGVpciBjdXN0 b20gTWFyc2hhbA0KICBkZXNlcmlhbGl6YXRpb24gY29kZSBjYW4gZm9sbG93IHRoZSBleGFtcGxl IGZpeCBmb3IgYmlnYXJyYXlzIGZyb20gdGhlDQogIHN0YW5kYXJkIGxpYnJhcnkuICBUaGVyZSBh cmUgbmV3IG1hY3JvcyBpbiBgY3VzdG9tLmgnIGNhbGxlZA0KICBgV3NpemVfY3VzdG9tX2RhdGEn IGFuZCBgQnNpemVfY3VzdG9tX2RhdGEnIHRoYXQgcmV0dXJuIHRoZSBzaXplIGluDQogIHdvcmRz IG9yIGJ5dGVzIG9mIHRoZSBhbGxvY2F0ZWQgY3VzdG9tIGRlc3RpbmF0aW9uIGJsb2NrLiBUaGUN CiAgZGVzZXJpYWxpemVyIG5lZWRzIHRvIGVuc3VyZSBpdCBvbmx5IHdyaXRlcyBkYXRhIHdpdGhp biB0aG9zZSBib3VuZHMuDQoNCiAgVGhpcyBvbmx5IG5lZWRzIHRvIGJlIGRvbmUgaWYgdGhlIGxp YnJhcnkgZGVmaW5lcyBhIGN1c3RvbSB0eXBlIGluIGEgQw0KICBiaW5kaW5nLCBhbmQgYHN0cnVj dCBjdXN0b21fb3BlcmF0aW9ucycncyBgZGVzZXJpYWxpemUnIGZpZWxkIGlzIG5vdA0KICBzZXQg dG8gYE5VTEwnIG9yIGBjdXN0b21fZGVzZXJpYWxpemVfZGVmYXVsdCcsIGFuZCBgc3RydWN0DQog IGN1c3RvbV9vcGVyYXRpb25zJydzIGBmaXhlZF9sZW5ndGgnIGZpZWxkIGlzIHNldCB0byBgTlVM TCcgb3INCiAgYGN1c3RvbV9maXhlZF9sZW5ndGhfZGVmYXVsdCcNCg0KICBTaW5jZSBgTWFyc2hh bC5mcm9tKicgYW5kIGBpbnB1dF92YWx1ZScgcmVtYWluIHVuc2FmZSB0byB1c2UsIHRoZSBmaXgN CiAgZm9yIHRoZSBPQ2FtbCBydW50aW1lIGlzIHJlbGVhc2VkLCBhbmQgd2Ugd291bGRuJ3QgYXR0 ZW1wdCB0bw0KICBjb29yZGluYXRlIHVwZGF0aW5nIGFsbCBkZXNlcmlhbGl6YXRpb24gZnVuY3Rp b25zIGluIHRoZSBlY29zeXN0ZW0uDQoNCg0KVGltZWxpbmUNCuKVjOKVjOKVjOKVjOKVjOKVjOKV jOKVjA0KDQogIOKAoiBOb3YgNHRoIDIwMjU6IERpc2NvdmVyeSBEYXRlOiBEaXNjb3ZlcmVkIGZp cnN0IGluIE94Q2FtbA0KICDigKIgTm92IDV0aCAyMDI1OiBGaXJzdCBEaXNjbG9zdXJlIERhdGUg KEphbmUgU3RyZWV0IFRlYW0pOiBFbWFpbGVkIHRvcA0KICAgIG1haW50YWluZXJzLCBubyByZXNw b25zZS4NCiAg4oCiIE5vdiA5dGggMjAyNTogU2Vjb25kIERpc2Nsb3N1cmUgRGF0ZSAoT0NhbWwg VGVhbSk6IFN1Ym1pdHRlZCB0bw0KICAgIE9DYW1sL29jYW1sIEdpdEh1YiBSZXBvIGFzIGEgU2Vj dXJpdHkgQWR2aXNvcnkuDQogIOKAoiBOb3YgMTF0aCAyMDI1OiBFbWFpbGVkIE9DYW1sIFNlY3Vy aXR5IE1haWwgTGlzdDogU3VibWl0dGVkIHRvIE9DYW1sDQogICAgb3ZlciBlbWFpbCwgcmVzcG9u ZGVkIGFza2luZyBmb3IgZGV0YWlscy4NCiAg4oCiIE5vdiAxMXRoIDIwMjU6IFRoaXJkIERpc2Ns b3N1cmUgKE9DYW1sIFNlY3VyaXR5IFJlc3BvbnNlIFRlYW0pOg0KICAgIFN1Ym1pdHRlZCB0byBv Y2FtbC9zZWN1cml0eS1hZHZpc29yaWVzIEdpdEh1YiBSZXBvIGFzIGEgU2VjdXJpdHkNCiAgICBB ZHZpc29yeS4NCiAg4oCiIERlYyAxNnRoIDIwMjU6IEluaXRpYWwgcGF0Y2ggaXMgZGV2ZWxvcGVk DQogIOKAoiBEZWMgMTd0aCAyMDI1OiBGdXp6IHRlc3RpbmcgZm91bmQgZnVydGhlciBpc3N1ZXMN CiAg4oCiIERlYyAyNHRoIDIwMjU6IEZpbmFsIHBhdGNoIGZvciBPQ2FtbCBpcyBkZXZlbG9wZWQN CiAg4oCiIERlYyAyNXRoIDIwMjU6IEZ1enogdGVzdGluZyBjb3VsZG4ndCBmaW5kIGFueSBmdXJ0 aGVyIGlzc3Vlcw0KICDigKIgSmFuIDJuZCAyMDI2OiBQYXRjaCBnb3QgcmV2aWV3ZWQgYnkgT0Nh bWwgbWFpbnRhaW5lcnMNCiAg4oCiIEphbiA0dGggMjAyNjogQmVuY2htYXJraW5nIG9mIHRoZSBw YXRjaCB3aXRoIGdvb2QgcmVzdWx0cw0KICDigKIgSmFuIDZ0aCAyMDI2OiBSZXBvcnRlciBnb3Qg Y29udGFjdGVkIHRvIGNvbmZpcm0NCiAg4oCiIEphbiAyNXRoIDIwMjY6IEZ1cnRoZXIgcmVsYXRl ZCBpc3N1ZXMgZGlzY292ZXJlZCBieSBmdXp6aW5nDQogIOKAoiBGZWIgMTd0aCAyMDI2OiBmaXhl ZCBPQ2FtbCByZWxlYXNlcyBhcmUgcHVibGlzaGVkLCBzZWN1cml0eSBhZHZpc29yeQ0KICAgIGlz IHB1Ymxpc2hlZA0KDQoNCk9DYW1sIDUuNC4xIGFuZCA0LjE0LjMgcmVsZWFzZWQNCuKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6DQogIDxodHRwczovL2Rp c2N1c3Mub2NhbWwub3JnL3Qvb2NhbWwtNS00LTEtYW5kLTQtMTQtMy1yZWxlYXNlZC8xNzgyMi8x Pg0KDQoNCm9jdGFjaHJvbiBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIFdlIGhhdmUgdGhlIHBsZWFzdXJlIG9m IGFubm91bmNpbmcgdGhlIGR1YWwgcmVsZWFzZXMgb2YgT0NhbWwgNC4xNC4zDQogIGFuZCBPQ2Ft bCA1LjQuMSwgZGVkaWNhdGVkIHRvIHRoZSBtZW1vcnkgb2YgTmljb2xhYXMgR292ZXJ0IGRlIEJy dWlqbg0KICBvbiB0aGUgYW5uaXZlcnNhcnkgb2YgaGlzIGRlYXRoLg0KDQogIFRob3NlIHJlbGVh c2VzIGFyZSBhIGNvbGxlY3Rpb24gb2Ygc2FmZSBhbmQgdmFsdWFibGUgcnVudGltZSBidWdmaXhl cy4NCiAgVGhlIE9DYW1sIDUuNC4xIHJlbGVhc2UgYWxzbyBjb250YWlucyBhIGZpeCBmb3IgdGhl IGAtcGFjaycgbW9kZSBmb3INCiAgbWFjT3MgYW5kIHZhcmlvdXMgVFNBTiBmaXhlcy4NCg0KICBN b3JlIGltcG9ydGFudGx5LCB0aG9zZSBuZXcgdmVyc2lvbnMgaGFyZGVuIHRoZSBNYXJzaGFsIG1v ZHVsZSBhZ2FpbnN0DQogIG1hbGljaW91cyBpbnB1dHMgYXMgZGVzY3JpYmVkIGluIHRoZSBzZWN1 cml0eSBhbm5vdW5jZW1lbnQNCiAgW09TRUMtMjAyNi0wMV0uDQoNCiAgV2UgYXJlIGVuY291cmFn aW5nIHlvdSB0byBzd2l0Y2ggdG8gdGhvc2UgbmV3IHJlbGVhc2VzIHdoZW5ldmVyDQogIHBvc3Np YmxlLg0KDQogIERvbid0IGhlc2l0YXRlIHRvIHJlcG9ydCBhbnkgYnVncyBvbiB0aGUgW09DYW1s IGlzc3VlIHRyYWNrZXJdLg0KDQogIFNlZSB0aGUgbGlzdCBvZiBjaGFuZ2VzIGJlbG93IGZvciBt b3JlIGRldGFpbHMuDQoNCiAgSGFwcHkgaGFja2luZywg4oCTIEZsb3JpYW4gQW5nZWxldHRpIGZv ciB0aGUgT0NhbWwgdGVhbS4NCg0KDQogICpJbnN0YWxsYXRpb24gSW5zdHJ1Y3Rpb25zKg0KDQog IFRoZSBiYXNlIGNvbXBpbGVycyB3aWxsIGJlIHNvb24gaW5zdGFsbGFibGUgYXMgYW4gb3BhbSBz d2l0Y2ggd2l0aCB0aGUNCiAgZm9sbG93aW5nIGNvbW1hbmRzOg0KDQogIOKUjOKUgOKUgOKUgOKU gA0KICDilIIgb3BhbSB1cGRhdGUNCiAg4pSCIG9wYW0gc3dpdGNoIGNyZWF0ZSA0LjE0LjMNCiAg 4pSCIG9wYW0gc3dpdGNoIGNyZWF0ZSA1LjQuMQ0KICDilJTilIDilIDilIDilIANCg0KDQogIFRo ZSBzb3VyY2UgY29kZSBmb3IgdGhlIHJlbGVhc2UgY2FuZGlkYXRlIGlzIGFsc28gZGlyZWN0bHkg YXZhaWxhYmxlDQogIG9uOg0KDQogIOKAoiBHaXRIdWI6DQogICAg4oCiIDxodHRwczovL2dpdGh1 Yi5jb20vb2NhbWwvb2NhbWwvYXJjaGl2ZS80LjE0LjMudGFyLmd6Pg0KICAgIOKAoiA8aHR0cHM6 Ly9naXRodWIuY29tL29jYW1sL29jYW1sL2FyY2hpdmUvNS40LjEudGFyLmd6Pg0KDQogIOKAoiBJ bnJpYSBhcmNoaXZlOg0KICAgIOKAoiA8aHR0cHM6Ly9jYW1sLmlucmlhLmZyL3B1Yi9kaXN0cmli L29jYW1sLTQuMTQvb2NhbWwtNC4xNC4zLnRhci5nej4NCiAgICDigKIgPGh0dHBzOi8vY2FtbC5p bnJpYS5mci9wdWIvZGlzdHJpYi9vY2FtbC01LjQvb2NhbWwtNS40LjEudGFyLmd6Pg0KDQoNCiAg Kk9DYW1sIDQuMTQuMyAoMTcgRmVicnVhcnkgMjAyNikqDQoNCiAg4oCiIFsjMTIwNzBdLCBbIzEy MDc1XSwgWyMxMzIwOV06IGF1dG8tZGV0ZWN0IHdoZXRoZXIgYGFyJyBzdXBwb3J0IEBGSUxFDQog ICAgYXJndW1lbnRzIGF0IGNvbmZpZ3VyZS10aW1lIHRvIGF2b2lkIHVzaW5nIHRoaXMgZmVhdHVy ZSB3aXRoDQogICAgdG9vbGNoYWlucyB0aGF0IGRvIG5vdCBzdXBwb3J0IGl0IChlZyBGcmVlQlNE L0Rhcndpbik7IGJhY2twb3J0IGZyb20NCiAgICA1LjMuICAoYmFja3BvcnQgYnkgQm9yaXMgRG9i cm9zbGF2b3YsIG9yaWdpbmFsIGZpeCBieSBOaWNvbMOhcyBPamVkYQ0KICAgIELDpHIsIHJldmll dyBieSBYYXZpZXIgTGVyb3ksIERhdmlkIEFsbHNvcHAsIEphdmllciBDaMOhdmFycmksIEFuaWwN CiAgICBNYWRoYXZhcGVkZHkpDQoNCiAg4oCiIFsjMTIyMDddLCBbIzEyMjIyXTogTWFrZSBjbG9z dXJlIGNvbXB1dGF0aW9uIGxpbmVhciBpbiB0aGUgbnVtYmVyIG9mDQogICAgcmVjdXJzaXZlIGZ1 bmN0aW9ucyBpbnN0ZWFkIG9mIHF1YWRyYXRpYyAoVmluY2VudCBMYXZpcm9uLCByZXBvcnQgYnkN CiAgICBGcmFuw6dvaXMgUG90dGllciwgcmV2aWV3IGJ5IE5hdGhhbmHDq2xsZSBDb3VyYW50IGFu ZCBHYWJyaWVsIFNjaGVyZXIpDQoNCiAg4oCiIFsjMTM0MzBdLCBbIzEzNDM0XTogcHJvdGVjdCBt ZW1vcnktc2FmZXR5IG9uIExhenkuZm9yY2UgcmFjZXMNCiAgICAoR2FicmllbCBTY2hlcmVyIGFu ZCBWaW5jZW50IExhdmlyb24sIHJlcG9ydCBieSBFZHdpbiBUw7Zyw7ZrLCByZXZpZXcNCiAgICBi eSBWaW5jZW50IExhdmlyb24pDQoNCiAg4oCiIFsjMTM0NDhdLCBbIzEzNDQ5XTogZml4IGEgY29k ZS1nZW5lcmF0aW9uIGJ1ZyBvbiB1bnNhZmUgYXJyYXkNCiAgICBhY2Nlc3NlcyBhdCB0eXBlIGlu dDMyLCBpbnQ2NCwgbmF0aXZlaW50LCB3aGljaCBoYXMgYmVlbiBpbnRyb2R1Y2VkDQogICAgaW4g T0NhbWwgNC4wNC4gIChHYWJyaWVsIFNjaGVyZXIsIHJldmlldyBieSBOaWNvbMOhcyBPamVkYSBC w6RyIGFuZA0KICAgIFZpbmNlbnQgTGF2aXJvbiwgcmVwb3J0IGJ5IFNpbW9uIENydWFuZXMpDQoN CiAg4oCiIFsjMTM1MTZdOiBGaXggcmVncmVzc2lvbiB3aGVyZSBlcnJvciBjb25kaXRpb25zIGR1 cmluZyBieXRlY29kZQ0KICAgIGluaXRpYWxpc2F0aW9uIGNhdXNlZCBhIHNlZ21lbnRhdGlvbiBm YXVsdCByYXRoZXIgdGhhbiBiZWluZw0KICAgIHByb3Blcmx5IHJlcG9ydGVkIChyZWdyZXNzaW9u IG9mIFsjNTExNV0gaW4gWyMxMTc4OF0pIChEYXZpZA0KICAgIEFsbHNvcHAsIHJldmlldyBieSBO aWNvbMOhcyBPamVkYSBCw6RyKQ0KDQogIOKAoiBbIzEzODQ3XTogT24gV2luZG93cywgbWFpbnRh aW4gYSBudW1iZXIgb2YgdGhyZWFkcyB3YWl0aW5nIG9uIHRoZQ0KICAgIG1hc3RlciBsb2NrIHRv IGF2b2lkIHVubmVjZXNzYXJ5IGNvbnRleHQgc3dpdGNoZXMgKERtaXRyeSBCZWx5LA0KICAgIHJl dmlldyBieSBBbnRvbmluIETDqWNpbW8pDQoNCiAg4oCiIFsjMTQwMDddLCBbIzE0MDE1XTogRml4 IG1lbW9yeSBjb3JydXB0aW9uIHdoZW4gYW4gZXhjZXB0aW9uIGlzDQogICAgcmFpc2VkIGR1cmlu ZyBkZW1hcnNoYWxpbmcuICAoQmVub8OudCBWYXVnb24sIHJldmlldyBieSBEYXZpZCBBbGxzb3Bw DQogICAgYW5kIEdhYnJpZWwgU2NoZXJlcikNCg0KICDigKIgW09TRUMtMjAyNi0wMV06IHJvYnVz dGlmeSBpbnRlcm4uYyAoWGF2aWVyIExlcm95LCByZXZpZXcgYnkgRGFtaWVuDQogICAgRG9saWdl eiBhbmQgT2xpdmllciBOaWNvbGUpDQoNCiAgKk9DYW1sIDUuNC4xICgxNyBGZWJydWFyeSAyMDI2 KSoNCg0KDQpbT1NFQy0yMDI2LTAxXSA8aHR0cHM6Ly9vc3YuZGV2L3Z1bG5lcmFiaWxpdHkvT1NF Qy0yMDI2LTAxPg0KDQpbT0NhbWwgaXNzdWUgdHJhY2tlcl0gPGh0dHBzOi8vZ2l0aHViLmNvbS9v Y2FtbC9vY2FtbC9pc3N1ZXM+DQoNClsjMTIwNzBdIDxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwv b2NhbWwvaXNzdWVzLzEyMDcwPg0KDQpbIzEyMDc1XSA8aHR0cHM6Ly9naXRodWIuY29tL29jYW1s L29jYW1sL2lzc3Vlcy8xMjA3NT4NCg0KWyMxMzIwOV0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2Ft bC9vY2FtbC9pc3N1ZXMvMTMyMDk+DQoNClsjMTIyMDddIDxodHRwczovL2dpdGh1Yi5jb20vb2Nh bWwvb2NhbWwvaXNzdWVzLzEyMjA3Pg0KDQpbIzEyMjIyXSA8aHR0cHM6Ly9naXRodWIuY29tL29j YW1sL29jYW1sL2lzc3Vlcy8xMjIyMj4NCg0KWyMxMzQzMF0gPGh0dHBzOi8vZ2l0aHViLmNvbS9v Y2FtbC9vY2FtbC9pc3N1ZXMvMTM0MzA+DQoNClsjMTM0MzRdIDxodHRwczovL2dpdGh1Yi5jb20v b2NhbWwvb2NhbWwvaXNzdWVzLzEzNDM0Pg0KDQpbIzEzNDQ4XSA8aHR0cHM6Ly9naXRodWIuY29t L29jYW1sL29jYW1sL2lzc3Vlcy8xMzQ0OD4NCg0KWyMxMzQ0OV0gPGh0dHBzOi8vZ2l0aHViLmNv bS9vY2FtbC9vY2FtbC9pc3N1ZXMvMTM0NDk+DQoNClsjMTM1MTZdIDxodHRwczovL2dpdGh1Yi5j b20vb2NhbWwvb2NhbWwvaXNzdWVzLzEzNTE2Pg0KDQpbIzUxMTVdIDxodHRwczovL2dpdGh1Yi5j b20vb2NhbWwvb2NhbWwvaXNzdWVzLzUxMTU+DQoNClsjMTE3ODhdIDxodHRwczovL2dpdGh1Yi5j b20vb2NhbWwvb2NhbWwvaXNzdWVzLzExNzg4Pg0KDQpbIzEzODQ3XSA8aHR0cHM6Ly9naXRodWIu Y29tL29jYW1sL29jYW1sL2lzc3Vlcy8xMzg0Nz4NCg0KWyMxNDAwN10gPGh0dHBzOi8vZ2l0aHVi LmNvbS9vY2FtbC9vY2FtbC9pc3N1ZXMvMTQwMDc+DQoNClsjMTQwMTVdIDxodHRwczovL2dpdGh1 Yi5jb20vb2NhbWwvb2NhbWwvaXNzdWVzLzE0MDE1Pg0KDQpCdWcgZml4ZXM6DQrilYzilYzilYzi lYzilYzilYzilYzilYzilYzilYwNCg0KICDigKIgWyMxNDAxMF06IEZpeCBtaXNjb21waWxhdGlv biAvIGxpdmVuZXNzIGVycm9ycyBmb3Igc3RyaW5nIG9wZXJhdGlvbnMNCiAgICAoTWFyayBTaGlu d2VsbCwgWGF2aWVyIENsZXJjLCByZXZpZXcgYnkgWGF2aWVyIExlcm95IGFuZCBHYWJyaWVsDQog ICAgU2NoZXJlcikNCg0KICDigKIgWyMxNDA2NV06IEZpeCBmdW5jdGlvbiBzaWduYXR1cmUgbWlz bWF0Y2ggb2YgYF9fdHNhbl9mdW5jX2V4aXQnIHdpdGgNCiAgICBHQ0MgMTUuICBDaGVjayBpbiB0 aGUgY29uZmlndXJlIHN0ZXAgaWYgdGhlIFRTYW4gcHJvdmlkZWQgaW50ZXJuYWwNCiAgICBidWls dGlucyBhcmUgdGhlIHNhbWUgYXMgd2hhdCB3ZSBleHBlY3QsIGludHJvZHVjZSBgY2FtbF90c2Fu XyonDQogICAgd3JhcHBlcnMgZm9yIHRoZSBgX190c2FuXyonIGZ1bmN0aW9ucyB3ZSB1c2UuICAo SGFyaSBIYXJhIE5hdmVlbiBTLA0KICAgIHJlcG9ydCBieSBIYXJpIEhhcmEgTmF2ZWVuIFMsIHJl dmlldyBieSBHYWJyaWVsIFNjaGVyZXIsIEFudG9uaW4NCiAgICBEw6ljaW1vLCBPbGl2aWVyIE5p Y29sZSkNCg0KICDigKIgWyMxNDQxN106IEZpeCBpc3N1ZSB3aXRoIG5lc3RlZCBwYWNrcyBvbiBt YWNPUy4gIChWaW5jZW50IExhdmlyb24sDQogICAgcmVwb3J0IGJ5IEthdGUgRGVwbGFpeCwgcmV2 aWV3IGJ5IEdhYnJpZWwgU2NoZXJlcikNCg0KICDigKIgWyMxNDIxM106IEZpeCBzaGFkb3ctc3Rh Y2stcmVsYXRlZCBjcmFzaGVzIHdpdGggVFNhbiAoT2xpdmllcg0KICAgIE5pY29sZSwgcmVwb3J0 IGJ5IE5hdGhhbiBUYXlsb3IsIHJldmlldyBieSBHYWJyaWVsIFNjaGVyZXIgYW5kDQogICAgU3Rl ZmFuIE11ZW56ZWwpDQoNCiAg4oCiIFsjMTQyNTVdOiBGaXggVFNhbiBidWcgd2l0aCBDIGNhbGxz IHRoYXQgdGFrZSBtYW55IGFyZ3VtZW50cw0KICAgIChPbGl2aWVyIE5pY29sZSBhbmQgTWlvZCBW YWxsYXQsIHJlcG9ydCBieSBOYXRoYW4gVGF5bG9yLCByZXZpZXcgYnkNCiAgICBHYWJyaWVsIFNj aGVyZXIpDQoNCiAg4oCiIFtPU0VDLTIwMjYtMDFdOiByb2J1c3RpZnkgaW50ZXJuLmMgKFhhdmll ciBMZXJveSBhbmQgTmljb2zDoXMgT2plZGENCiAgICBCw6RyLCByZXZpZXcgYnkgT2xpdmllciBO aWNvbGUsIE1pbmR5IFByZXN0b24sIEVkd2luIFTDtnLDtmssIGFuZA0KICAgIEdhYnJpZWwgU2No ZXJlcikNCg0KDQpbIzE0MDEwXSA8aHR0cHM6Ly9naXRodWIuY29tL29jYW1sL29jYW1sL2lzc3Vl cy8xNDAxMD4NCg0KWyMxNDA2NV0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vY2FtbC9pc3N1 ZXMvMTQwNjU+DQoNClsjMTQ0MTddIDxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwvb2NhbWwvaXNz dWVzLzE0NDE3Pg0KDQpbIzE0MjEzXSA8aHR0cHM6Ly9naXRodWIuY29tL29jYW1sL29jYW1sL2lz c3Vlcy8xNDIxMz4NCg0KWyMxNDI1NV0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vY2FtbC9p c3N1ZXMvMTQyNTU+DQoNCltPU0VDLTIwMjYtMDFdIDxodHRwczovL29zdi5kZXYvdnVsbmVyYWJp bGl0eS9PU0VDLTIwMjYtMDE+DQoNCg0KQW5uOiBPY2hhdCDigJQgVHJ5IE9jaGF0IGZvciB0ZXJt aW5hbC1iYXNlZCBMTE0gd29ya2Zsb3dzDQrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOg0KICA8aHR0cHM6Ly9kaXNjdXNzLm9j YW1sLm9yZy90L2Fubi1vY2hhdC10cnktb2NoYXQtZm9yLXRlcm1pbmFsLWJhc2VkLWxsbS13b3Jr Zmxvd3MvMTc4MjkvMT4NCg0KDQpEYWtvdGEgTXVycGh5IGFubm91bmNlZA0K4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA DQoNCiAgSGkgYWxsIOKAlCBJ4oCZZCBsaWtlIHRvIHNoYXJlIGEgcHJvamVjdCBJ4oCZdmUgYmVl biBidWlsZGluZzogKk9jaGF0Ki4NCg0KICDigKIgUmVwbzogKltodHRwczovL2dpdGh1Yi5jb20v ZGFrb3RhbXVycGh5dWNmL29jaGF0XSoNCiAg4oCiIERlbW86ICpbaHR0cHM6Ly95b3V0dS5iZS9l R2dtVWRaZm54TV0qDQoNCg0KW2h0dHBzOi8vZ2l0aHViLmNvbS9kYWtvdGFtdXJwaHl1Y2Yvb2No YXRdDQo8aHR0cHM6Ly9naXRodWIuY29tL2Rha290YW11cnBoeXVjZi9vY2hhdD4NCg0KW2h0dHBz Oi8veW91dHUuYmUvZUdnbVVkWmZueE1dIDxodHRwczovL3lvdXR1LmJlL2VHZ21VZFpmbnhNPg0K DQoqV2hhdCBpdCBpcyoNCuKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjA0KDQog IE9jaGF0IGlzIGEgdG9vbGtpdCBmb3IgYnVpbGRpbmcgTExNIHdvcmtmbG93cyBhcyAqcGxhaW4g ZmlsZXMqLiBUaGUNCiAgY29yZSBmb3JtYXQgaXMgKkNoYXRNYXJrZG93biAoQ2hhdE1EKSo6IE1h cmtkb3duIHBsdXMgYSBzbWFsbCwgY2xvc2VkDQogIFhNTCB2b2NhYnVsYXJ5Lg0KDQogIEEgc2lu Z2xlIENoYXRNRCBmaWxlIGlzIGJvdGg6DQoNCiAg4oCiIHRoZSAqcHJvbXB0L3Byb2dyYW0qICht b2RlbCBjb25maWcsIHRvb2wgYWxsb3dsaXN0LCBpbnN0cnVjdGlvbnMsDQogICAgY29udGV4dCks IGFuZA0KICDigKIgdGhlICphdWRpdGFibGUgdHJhbnNjcmlwdCogKGFzc2lzdGFudCByZXBsaWVz ICsgdG9vbCBjYWxscyArIHRvb2wNCiAgICBvdXRwdXRzKQ0KDQogIEJlY2F1c2UgZXZlcnl0aGlu ZyBpcyBwbGFpbiB0ZXh0LCB3b3JrZmxvd3MgYXJlIHJlcHJvZHVjaWJsZSBhbmQNCiAgZGlmZmFi bGUgaW4gZ2l0Lg0KDQoNCipQcm9tcHQgcGFja3M6IGJ1aWxkaW5nIGxhcmdlciB3b3JrZmxvd3Mg ZnJvbSBzbWFsbCBhZ2VudHMqDQrilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzi lYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzi lYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzi lYzilYzilYzilYzilYzilYzilYzilYzilYwNCg0KICBPY2hhdCBzdXBwb3J0cyAqYWdlbnQtYXMt dG9vbCo6IHlvdSBjYW4gbW91bnQgb25lIENoYXRNRCBwcm9tcHQgYXMgYQ0KICBjYWxsYWJsZSB0 b29sIGluc2lkZSBhbm90aGVyLiBUaGlzIGxldHMgeW91IGJ1aWxkICpwcm9tcHQgcGFja3MqDQog IChwbGFubmVyL2NvZGVyL3Jldmlld2VyL2RvY3MvdGVzdCB0cmlhZ2UvZXRjLikgYW5kIG9yY2hl c3RyYXRlIHRoZW0NCiAgZnJvbSBhIHRvcC1sZXZlbCBwcm9tcHQsIHdpdGhvdXQgd3JpdGluZyBh IGN1c3RvbSDigJxhZ2VudCBhcHDigJ0uDQoNCg0KKmNoYXRfdHVpOiBhIE5vdHR5LWJhc2VkIHRl cm1pbmFsIFVJIChydW50aW1lIHVzZXMgRWlvKSoNCuKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKV jOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKV jOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKV jOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjA0KDQogIE9jaGF0IHNoaXBzIGFuIGludGVyYWN0 aXZlIHRlcm1pbmFsIFVJIGNhbGxlZCAqY2hhdF90dWkqLg0KDQogIOKAoiBUaGUgVUkgaXMgYnVp bHQgd2l0aCAqTm90dHkqDQogIOKAoiBUaGUgdW5kZXJseWluZyBydW50aW1lIHVzZXMgKkVpbyog KHN0cnVjdHVyZWQgY29uY3VycmVuY3kgKyBJL08pDQoNCiAgQSBDaGF0TUQgZmlsZSBjYW4gYmUg dHJlYXRlZCBhcyBhIOKAnHRlcm1pbmFsIGFnZW504oCdOiB5b3UgYXV0aG9yIGFuDQogIGFnZW50 IHByb21wdCBhcyBhIC5tZCwgb3BlbiBpdCBpbiBjaGF0X3R1aSwgYW5kIHJ1bi9pdGVyYXRlIG9u IGl0DQogIHdoaWxlIHRoZSB0cmFuc2NyaXB0IChpbmNsdWRpbmcgdG9vbCB0cmFjZXMpIGlzIHBl cnNpc3RlZC4NCg0KICBTb21lIGNoYXRfdHVpIGZlYXR1cmVzOg0KDQogIOKAoiBzdHJlYW1pbmcg b3V0cHV0IChhc3Npc3RhbnQgdGV4dCArIHRvb2wgY2FsbHMgKyB0b29sIG91dHB1dHMpDQogIOKA oiBwZXJzaXN0ZW50IHNlc3Npb25zIHlvdSBjYW4gcmVzdW1lL2JyYW5jaC9leHBvcnQNCiAg4oCi IG1hbnVhbCBjb250ZXh0IGNvbXBhY3Rpb24gKDpjb21wYWN0KSBmb3IgbG9uZyBoaXN0b3JpZXMN CiAg4oCiIHN5bnRheCBoaWdobGlnaHRpbmcgKGluY2x1ZGluZyBPQ2FtbCkNCiAg4oCiIEFJIGNv bXBsZXRpb25zIGluIHRoZSB0ZXh0IGlucHV0ICh0byBzcGVlZCB1cCBkcmFmdGluZykNCiAg4oCi IFZpbS1pc2ggZWRpdGluZyBtb2RlcyBhbmQgbWVzc2FnZSBzZWxlY3Rpb24veWFuay9lZGl0L3Jl c3VibWl0DQogICAgd29ya2Zsb3dzDQoNCg0KKlVzZWZ1bCBidWlsdC1pbiB0b29scyAoZXNwZWNp YWxseSBmb3IgY29kZSB3b3JrZmxvd3MpKg0K4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM 4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM 4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM 4pWM4pWM4pWM4pWM4pWM4pWM4pWMDQoNCiAgT2NoYXQgaW5jbHVkZXMgYnVpbHQtaW4gdG9vbHMg dGhhdCBjb3ZlciBtb3N0IOKAnGFnZW50ICsgcmVwb+KAnSBsb29wczoNCg0KICDigKIgcmVhZF9m aWxlIC8gcmVhZF9kaXIgZm9yIHNhZmUgcmVwbyBuYXZpZ2F0aW9uDQogIOKAoiBhcHBseV9wYXRj aCBmb3IgYXRvbWljLCByZXBvLXNhZmUgZWRpdHMNCiAg4oCiIHdlYnBhZ2VfdG9fbWFya2Rvd24g Zm9yIGhpZ2gtc2lnbmFsIGluZ2VzdGlvbiAoaW5jbC4gR2l0SHViIGJsb2INCiAgICBmYXN0LXBh dGgpDQogIOKAoiBpbmRleGluZy9yZXRyaWV2YWwgdG9vbHMgZm9yIGdyb3VuZGluZyBvdmVyIGRv Y3MgYW5kIGNvZGUNCiAg4oCiIG9wdGlvbmFsIHZpc2lvbiBpbnB1dHMgdmlhIGltcG9ydF9pbWFn ZQ0KDQoNCipNQ1AgdG9vbCBpbXBvcnQgKG9wdGlvbmFsKSoNCuKVjOKVjOKVjOKVjOKVjOKVjOKV jOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKV jOKVjOKVjA0KDQogIE9jaGF0IGNhbiBhbHNvIG1vdW50IGV4dGVybmFsIHRvb2xzIHZpYSBNQ1Ag KHN0ZGlvIG9yIEhUVFApLiBGb3INCiAgZXhhbXBsZSwgaW1wb3J0aW5nIEJyYXZlIFNlYXJjaCBv dmVyIHN0ZGlvOg0KDQogIOKUjOKUgOKUgOKUgOKUgA0KICDilIIgPHRvb2wgbWNwX3NlcnZlcj0i c3RkaW86bnB4IC15IGJyYXZlLXNlYXJjaC1tY3AiIG5hbWU9ImJyYXZlX3dlYl9zZWFyY2giIC8+ DQogIOKUlOKUgOKUgOKUgOKUgA0KDQoNCipRdWljayBleGFtcGxlOiBhIOKAnGN1c3RvbSB0ZXJt aW5hbCBvcmNoZXN0cmF0b3IgYWdlbnTigJ0qDQrilYzilYzilYzilYzilYzilYzilYzilYzilYzi lYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzi lYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzi lYzilYzilYzilYzilYzilYzilYzilYwNCg0KICBUaGlzIGlzIGEgY29tcGxldGUgYWdlbnQgZGVm aW5pdGlvbiAoYW5kIGJlY29tZXMgdGhlIHJ1bm5hYmxlIOKAnGFwcOKAnQ0KICB3aGVuIG9wZW5l ZCBpbiBjaGF0X3R1aSk6DQoNCg0KICDilIzilIDilIDilIDilIANCiAg4pSCIDxjb25maWcgbW9k ZWw9ImdwdC01LjIiIHJlYXNvbmluZ19lZmZvcnQ9Im1lZGl1bSIgLz4NCiAg4pSCIA0KICDilIIg PCEtLSBjb3JlIGJ1aWx0LWlucyAtLT4NCiAg4pSCIDx0b29sIG5hbWU9InJlYWRfZGlyIi8+DQog IOKUgiA8dG9vbCBuYW1lPSJyZWFkX2ZpbGUiLz4NCiAg4pSCIDx0b29sIG5hbWU9ImFwcGx5X3Bh dGNoIi8+DQogIOKUgiA8dG9vbCBuYW1lPSJ3ZWJwYWdlX3RvX21hcmtkb3duIi8+DQogIOKUgiAN CiAg4pSCIDwhLS0gb3B0aW9uYWw6IGltcG9ydCBhbiBleHRlcm5hbCB0b29sIHZpYSBNQ1AgLS0+ DQogIOKUgiA8dG9vbCBtY3Bfc2VydmVyPSJzdGRpbzpucHggLXkgYnJhdmUtc2VhcmNoLW1jcCIg bmFtZT0iYnJhdmVfd2ViX3NlYXJjaCIgLz4NCiAg4pSCIA0KICDilIIgPCEtLSBwcm9tcHQtcGFj ayB0b29scyAoYWdlbnRzIGFzIHRvb2xzKSAtLT4NCiAg4pSCIDx0b29sIG5hbWU9InBsYW4iICAg YWdlbnQ9InByb21wdHMvcGFjay9wbGFuLm1kIiBsb2NhbC8+DQogIOKUgiA8dG9vbCBuYW1lPSJj b2RlIiAgIGFnZW50PSJwcm9tcHRzL3BhY2svY29kZS5tZCIgbG9jYWwvPg0KICDilIIgPHRvb2wg bmFtZT0icmV2aWV3IiBhZ2VudD0icHJvbXB0cy9wYWNrL3Jldmlldy5tZCIgbG9jYWwvPg0KICDi lIIgDQogIOKUgiA8ZGV2ZWxvcGVyPg0KICDilIIgWW91IGFyZSB0aGUgb3JjaGVzdHJhdG9yLiBD YWxsIHBsYW4gZmlyc3QuDQogIOKUgiBLZWVwIGVkaXRzIHNtYWxsLiBCZWZvcmUgYXBwbHlfcGF0 Y2g6IGV4cGxhaW4gdGhlIGRpZmYgYW5kIHdhaXQgZm9yIGNvbmZpcm1hdGlvbi4NCiAg4pSCIDwv ZGV2ZWxvcGVyPg0KICDilIIgDQogIOKUgiA8dXNlcj4NCiAg4pSCIEFkZCBhIFF1aWNrc3RhcnQg c2VjdGlvbiB0byBSRUFETUUubWQuDQogIOKUgiA8L3VzZXI+DQogIOKUlOKUgOKUgOKUgOKUgA0K DQogIFJ1biBpdCBmcm9tIHRoZSByZXBvIHdpdGg6DQoNCiAg4pSM4pSA4pSA4pSA4pSADQogIOKU giBkdW5lIGV4ZWMgY2hhdF90dWkgLS0gLWZpbGUgcHJvbXB0cy9yZWZhY3Rvci5tZA0KICDilJTi lIDilIDilIDilIANCg0KDQoqU3RhdHVzIC8gY2F2ZWF0cyoNCuKVjOKVjOKVjOKVjOKVjOKVjOKV jOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjA0KDQogIOKAoiBQcm92aWRlciBzdXBw b3J0IHRvZGF5IGlzICpPcGVuQUktb25seSouDQogIOKAoiBUaGUgcHJvamVjdCBpcyBtb3Zpbmcg cXVpY2tseS4NCg0KDQoqRmVlZGJhY2sgLyBjb250cmlidXRvcnMqDQrilYzilYzilYzilYzilYzi lYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzi lYwNCg0KICBJ4oCZZCBhcHByZWNpYXRlIGFueSBmZWVkYmFjayBvciBjb250cmlidXRpb25zDQoN CiAgSWYgeW91IHRyeSBpdCBhbmQgYW55dGhpbmfigJlzIGNvbmZ1c2luZyBvciByb3VnaCwgcGxl YXNlIG9wZW4gYW4gaXNzdWUuDQoNCg0KU2VyaWFscG9ydCAtIG5ldyBzZXJpYWwgY29tbXVuaWNh dGlvbiBsaWJyYXJ5DQrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOg0KICA8aHR0 cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90L2Fubi1zZXJpYWxwb3J0LW5ldy1zZXJpYWwtY29tbXVu aWNhdGlvbi1saWJyYXJ5LzE3NTk0LzM+DQoNCg0KQ29udGludWluZyB0aGlzIHRocmVhZCwgTWlr aGFpbCBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIFtBZGRlZF0gKGFrYSBpbXBsZW1lbnRlZCkg V2luMzIgc3VwcG9ydCwgd2hpY2ggaGFzIG5vdCBiZWVuIHRob3JvdWdobHkNCiAgdGVzdGVkLCBi dXQgbWF5IGJlIHVzZWZ1bCBmb3IgY2VydGFpbiB0YXJnZXQgdXNlIGNhc2VzLg0KDQoNCltBZGRl ZF0NCjxodHRwczovL2dpdGh1Yi5jb20vZHgzbW9kL3NlcmlhbHBvcnQvY29tbWl0L2QwNTdhMDA0 YzA1MDIzNGI2NGU0ZWRiZWUyYzEzYTA0YmY0YzI3MzQ+DQoNCg0KU2xpcHNob3chDQrilZDilZDi lZDilZDilZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOiA8aHR0cHM6Ly9kaXNjdXNzLm9jYW1s Lm9yZy90L2Fubi1zbGlwc2hvdy8xNjMzNy8xOD4NCg0KDQpDb250aW51aW5nIHRoaXMgdGhyZWFk LCBQYXVsLUVsbGlvdCBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIEl0IGlz IHdpdGggZXh0cmF0ZXJyZXN0cmlhbCBleGNpdGVtZW50IHRoYXQgSSBhbm5vdW5jZSB0aGUgbmV4 dA0KICByZWxlYXNlIG9mIFNsaXBzaG93Og0KDQogICpTbGlwc2hvdyAwLjkuMDogTWFuaW0gQmxh Y2sqDQoNCiAgVGhlIGZlYXR1cmVkIG5ldyBmZWF0dXJlIG9mIHRoaXMgcmVsZWFzZSBpcyB0aGUg YWJpbGl0eSB0byBlYXNpbHkNCiAgaW50ZWdyYXRlIFtNYW5pbV0gdmlkZW9zIGluIHlvdXIgcHJl c2VudGF0aW9uLg0KDQogIDxodHRwczovL2dpdGh1Yi5jb20vdXNlci1hdHRhY2htZW50cy9hc3Nl dHMvZjY3YmI4ZmMtYzI4OC00ZmYzLWI2YmMtZTcyYzEyZTYzNmE3Pg0KDQogIE5vdGUgdGhhdCwg Y29tcGFyZWQgdG8ganVzdCBwbGF5aW5nIGEgdmlkZW8sIHlvdSBjYW4gc2NoZWR1bGUgcGF1c2Vz LA0KICBnbyBmYXN0ZXIgdG8gdGhlIG5leHQgcGF1c2UsIGFuZCBnbyBiYWNrIHRvIHRoZSBwcmV2 aW91cyBwYXVzZXMsIGFzDQogIHNob3djYXNlZCBiZWxvdy4NCg0KDQpbTWFuaW1dIDxodHRwczov L3d3dy5tYW5pbS5jb21tdW5pdHkvPg0KDQpTa2lwcGluZyBzdGVwcyBhbmQgZ29pbmcgYmFja3dh cmQgZGVtbw0K4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM 4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM 4pWM4pWM4pWMDQoNCiAgPGh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0 cy9jZjFhZDI2NC1hNWUyLTQyZDItOWY1Ny0wOTU1MWYzYTM1ZTg+DQoNCiAgVGhpcyByZWxlYXNl IGZlYXR1cmVzIG1hbnkgbW9yZSBjaGFuZ2VzLCBzdWNoIGFzIFRpa1ogYW5kIE1lcm1haWRKUw0K ICBpbnRlZ3JhdGlvbiEgSGVyZSBpcyB0aGUgZnVsbCBjaGFuZ2Vsb2c6DQoNCg0KQWRkZWQNCuKV jOKVjOKVjOKVjOKVjA0KDQogIOKAoiBTdXBwb3J0IGZvciBNZXJtYWlkIEpTIChbIzIwNV0pDQog IOKAoiBTdXBwb3J0IGZvciBzeW50YXggaGlnaGxpZ2h0aW5nIG9mIGFsbCBoaWdobGlnaHRqcy1z dXBwb3J0ZWQNCiAgICBsYW5ndWFnZXMgYW5kIHRoZW1lcyAoWyMyMDBdLCBbIzIwOF0pDQogIOKA oiBTdXBwb3J0IGZvciBNYXRoSmF4IGV4dGVuc2lvbnMsIGVzcGVjaWFsbHkgdGhlIGh0bWwgZXh0 ZW5zaW9uIHRvDQogICAgYWxsb3cgYWN0aW9ucyB0byB0YXJnZXQgbWF0aCBlbGVtZW50cyAoWyMy MDJdKQ0KICDigKIgQWRkIEthVGVYIGFzIGEgcG9zc2libGUgYWx0ZXJuYXRlIHJlbmRlcmVyIChb IzIwMl0pDQogIOKAoiBBZGRlZCBgY2Fyb3VzZWwtZml4ZWQtc2l6ZScgdG8gaGF2ZSBjYXJvdXNl bCBub3QgY2hhbmdlIHNpemUNCiAgICAoWyMyMDddKQ0KDQoNClsjMjA1XSA8aHR0cHM6Ly9naXRo dWIuY29tL3BhbmdsZXNkL3NsaXBzaG93L3B1bGwvMjA1Pg0KDQpbIzIwMF0gPGh0dHBzOi8vZ2l0 aHViLmNvbS9wYW5nbGVzZC9zbGlwc2hvdy9wdWxsLzIwMD4NCg0KWyMyMDhdIDxodHRwczovL2dp dGh1Yi5jb20vcGFuZ2xlc2Qvc2xpcHNob3cvcHVsbC8yMDg+DQoNClsjMjAyXSA8aHR0cHM6Ly9n aXRodWIuY29tL3BhbmdsZXNkL3NsaXBzaG93L3B1bGwvMjAyPg0KDQpbIzIwN10gPGh0dHBzOi8v Z2l0aHViLmNvbS9wYW5nbGVzZC9zbGlwc2hvdy9wdWxsLzIwNz4NCg0KDQpGaXgNCuKVjOKVjOKV jA0KDQogIOKAoiBGaXggaW1wb3NzaWJpbGl0eSB0byByZW9wZW4gc3BlYWtlciB2aWV3IGFmdGVy IGNsb3NpbmcgaXQgb24gRmlyZWZveA0KICAgIChbIzE5OF0sIGlzc3VlIFsjMTk0XSkNCiAg4oCi IEZpeCBpbXBvc3NpYmlsaXR5IHRvIG9wZW4gc3BlYWtlciB2aWV3IGluIHNlcnZlIG1vZGUgKFsj MTk4XSwgaXNzdWUNCiAgICBbIzE5N10pDQogIOKAoiBGaXggbGlua3Mgb3BlbmluZyBpbnNpZGUg aWZyYW1lIChbIzE5OF0pDQogIOKAoiBGaXggZW5kaW5nIGV4Y3Vyc2lvbnMgd2l0aCBgaWprbCcg b25seSB3aGVuIG5lZWRlZCAoWyMyMDddKQ0KICDigKIgRml4ZWQgdmlkZW8gbG9uZy1zdGVwIGhh bmRsaW5nIChbIzIwN10pDQogIOKAoiBSZW1vdmVkIGNvbmZ1c2luZyBhdXRvLWdlbmVyYXRlZCBJ RHMgKFsjMjA5XSkNCiAg4oCiIEZpeCBgcGxheS1tZWRpYScgYmVoYXZpb3Igd2hlbiBmYWNpbmcg ZXJyb3JzIChbIzIxMF0pDQoNCg0KWyMxOThdIDxodHRwczovL2dpdGh1Yi5jb20vcGFuZ2xlc2Qv c2xpcHNob3cvcHVsbC8xOTg+DQoNClsjMTk0XSA8aHR0cHM6Ly9naXRodWIuY29tL3BhbmdsZXNk L3NsaXBzaG93L2lzc3Vlcy8xOTQ+DQoNClsjMTk3XSA8aHR0cHM6Ly9naXRodWIuY29tL3Bhbmds ZXNkL3NsaXBzaG93L2lzc3Vlcy8xOTc+DQoNClsjMjA3XSA8aHR0cHM6Ly9naXRodWIuY29tL3Bh bmdsZXNkL3NsaXBzaG93L3B1bGwvMjA3Pg0KDQpbIzIwOV0gPGh0dHBzOi8vZ2l0aHViLmNvbS9w YW5nbGVzZC9zbGlwc2hvdy9wdWxsLzIwOT4NCg0KWyMyMTBdIDxodHRwczovL2dpdGh1Yi5jb20v cGFuZ2xlc2Qvc2xpcHNob3cvcHVsbC8yMTA+DQoNCg0KRG9jcw0K4pWM4pWM4pWM4pWMDQoNCiAg 4oCiIEFkZCBob3cgdG8gaW5jbHVkZSBUaWtaIGZpZ3VyZXMgaW4geW91ciBTbGlwc2hvdyBwcmVz ZW50YXRpb24NCiAgICAoWyMyMDZdKQ0KICDigKIgQWRkIGhvdyB0byBpbmNsdWRlIE1hbmltIHZp ZGVvcyBpbiB5b3VyIFNsaXBzaG93IHByZXNlbnRhdGlvbg0KICAgIChbIzIwN10pDQoNCiAgQ3Jl ZGl0OiBAdmRzIGZvciB0aGUgbmFtZSBvZiB0aGUgcmVsZWFzZS4NCg0KICBUaGFua3MgYWdhaW4g dG8gTkxOZXQgZm9yIFtzdXBwb3J0aW5nXSB0aGUgZGV2ZWxvcG1lbnQgb2YgU2xpcHNob3chDQoN Cg0KWyMyMDZdIDxodHRwczovL2dpdGh1Yi5jb20vcGFuZ2xlc2Qvc2xpcHNob3cvcHVsbC8yMDY+ DQoNClsjMjA3XSA8aHR0cHM6Ly9naXRodWIuY29tL3BhbmdsZXNkL3NsaXBzaG93L3B1bGwvMjA3 Pg0KDQpbc3VwcG9ydGluZ10gPGh0dHBzOi8vbmxuZXQubmwvcHJvamVjdC9TbGlwc2hvdy8+DQoN Cg0KUmVtb3RlIE9DYW1sIERpc3RyaWJ1dGVkIFN5c3RlbXMgRW5naW5lZXIgKExpbnV4IC8gU3Rv cmFnZSAvIE5ldHdvcmtpbmcpIOKAkyB3aGl0ZXNreS5jbG91ZCDigJMgRU1FQS9Bc2lhDQrilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOg0KICA8aHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9y Zy90L3JlbW90ZS1vY2FtbC1kaXN0cmlidXRlZC1zeXN0ZW1zLWVuZ2luZWVyLWxpbnV4LXN0b3Jh Z2UtbmV0d29ya2luZy13aGl0ZXNreS1jbG91ZC1lbWVhLWFzaWEvMTc4MzIvMT4NCg0KDQpHZWVy dCBBdWRlbmFlcnQgYW5ub3VuY2VkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICBXZSBhcmUgbG9v a2luZyBmb3IgYW4gT0NhbWwgZW5naW5lZXIgdG8gam9pbiAqd2hpdGVza3kuY2xvdWQqIHRvIHdv cmsNCiAgb24gbG93LWxldmVsIGRpc3RyaWJ1dGVkIGluZnJhc3RydWN0dXJlIGNvbXBvbmVudHMu DQoNCiAgKkFib3V0IHRoZSB3b3JrKg0KDQogIFlvdSB3aWxsIHdvcmsgb24gY29yZSBidWlsZGlu ZyBibG9ja3Mgb2YgYSBzb3ZlcmVpZ24gY2xvdWQgcGxhdGZvcm0sDQogIGluY2x1ZGluZyBkaXN0 cmlidXRlZCBzdG9yYWdlIGFuZCBjb29yZGluYXRpb24gc2VydmljZXMuDQoNCiAgRXhhbXBsZXMg b2YgcmVsYXRlZCBwcm9qZWN0czoNCg0KICDigKIgW2h0dHBzOi8vZ2l0aHViLmNvbS9vcGVudnN0 b3JhZ2UvYWxiYV0NCiAg4oCiIFtodHRwczovL2dpdGh1Yi5jb20vb3BlbnZzdG9yYWdlL2FyYWtv b25dDQoNCiAgVGhlIHdvcmsgaW52b2x2ZXM6DQoNCiAg4oCiIERpc3RyaWJ1dGVkIHN5c3RlbXMg ZGVzaWduIGFuZCBpbXBsZW1lbnRhdGlvbg0KICDigKIgSGlnaC1wZXJmb3JtYW5jZSBuZXR3b3Jr aW5nIGFuZCBJL08NCiAg4oCiIExpbnV4IHN5c3RlbXMgcHJvZ3JhbW1pbmcNCiAg4oCiIERlYnVn Z2luZyBhbmQgb3B0aW1pemluZyBiZWhhdmlvciB1bmRlciByZWFsIHByb2R1Y3Rpb24gbG9hZA0K ICDigKIgTG9uZy1ydW5uaW5nIHNlcnZpY2VzIHdoZXJlIHJlbGlhYmlsaXR5IGFuZCBjb3JyZWN0 bmVzcyBtYXR0ZXINCg0KICBUaGlzIGlzICppbmZyYXN0cnVjdHVyZSB3b3JrKiwgbm90IHdlYiBk ZXZlbG9wbWVudC4NCg0KICDigJQNCg0KICAqV2hhdCB3ZSBhcmUgbG9va2luZyBmb3IqDQoNCiAg 4oCiIFN0cm9uZyBPQ2FtbCBleHBlcmllbmNlICpvciogc3Ryb25nIHN5c3RlbXMgcHJvZ3JhbW1p bmcgYmFja2dyb3VuZA0KICAgIHdpdGggd2lsbGluZ25lc3MgdG8gd29yayBpbiBPQ2FtbA0KICDi gKIgR29vZCB1bmRlcnN0YW5kaW5nIG9mOg0KICAgIOKAoyBMaW51eCBpbnRlcm5hbHMNCiAgICDi gKMgTmV0d29ya2luZyAvIFRDUC9JUA0KICAgIOKAoyBDb25jdXJyZW5jeSBhbmQgcGVyZm9ybWFu Y2UNCiAg4oCiIEludGVyZXN0IGluIGRpc3RyaWJ1dGVkIHN5c3RlbXMsIHN0b3JhZ2UsIG9yIGNv bnNlbnN1cyBhbGdvcml0aG1zDQoNCiAgV2UgY2FyZSBtb3JlIGFib3V0ICpzeXN0ZW1zIHRoaW5r aW5nIGFuZCBlbmdpbmVlcmluZyBkZXB0aCogdGhhbiBhYm91dA0KICBzcGVjaWZpYyBmcmFtZXdv cmtzLg0KDQogIOKAlA0KDQogICpQcmFjdGljYWwgZGV0YWlscyoNCg0KICDigKIgRnVsbC10aW1l IHBvc2l0aW9uDQogIOKAoiBGdWxseSByZW1vdGUNCiAg4oCiIExvY2F0aW9uOiBFTUVBIG9yIEFz aWENCiAg4oCiIFNhbGFyeTogYXJvdW5kICrigqwzMDAwL21vbnRoKiAoZGVwZW5kaW5nIG9uIGV4 cGVyaWVuY2UgYW5kIGxvY2F0aW9uKQ0KDQogIFdlIGtub3cgdGhpcyBpcyBub3QgYSBiaWctdGVj aCBzYWxhcnkuIFdlIGFyZSBhIHNtYWxsDQogIGVuZ2luZWVyaW5nLWRyaXZlbiBjb21wYW55LCBh bmQgdGhlIHJvbGUgaXMgYWltZWQgYXQgZW5naW5lZXJzIHdobw0KICBlbmpveSB3b3JraW5nIGNs b3NlIHRvIHRoZSBzeXN0ZW0sIHNvbHZpbmcgcmVhbCBpbmZyYXN0cnVjdHVyZQ0KICBwcm9ibGVt cywgYW5kIGhhdmluZyBhIGRpcmVjdCBpbXBhY3QuDQoNCiAg4oCUDQoNCiAgKkFib3V0IHdoaXRl c2t5Kg0KDQogIHdoaXRlc2t5IGJ1aWxkcyBhIGNvbXBsZXRlIGNsb3VkIHBsYXRmb3JtIGJhc2Vk IG9uIExpbnV4IGFuZCBLVk0sDQogIGZvY3VzZWQgb24gc292ZXJlaWdudHkgYW5kIGNvbnRyb2wu ICBUaGUgcGxhdGZvcm0gaXMgdXNlZCBieSBNU1BzLA0KICBTYWFTIHByb3ZpZGVycyBhbmQgZW50 ZXJwcmlzZXMgdG8gcnVuIHRoZWlyIG93biBjbG91ZCBpbmZyYXN0cnVjdHVyZS4NCg0KICBZb3Ug d2lsbCBiZSB3b3JraW5nIG9uIGNvbXBvbmVudHMgdGhhdCBydW4gaW4gcHJvZHVjdGlvbiBlbnZp cm9ubWVudHMNCiAgYW5kIGZvcm0gcGFydCBvZiBhIGRpc3RyaWJ1dGVkIGNsb3VkIHN0YWNrLg0K DQogIOKAlA0KDQogIElmIHRoaXMgc291bmRzIGludGVyZXN0aW5nLCBwbGVhc2UgY29udGFjdDoN Cg0KICAqZ2VlcnQuYXVkZW5hZXJ0QHdoaXRlc2t5LmNsb3VkKg0KDQogIG9yIHNlbmQgYSBETS4N Cg0KICBXZSBhcmUgaGFwcHkgdG8gYW5zd2VyIHF1ZXN0aW9ucyBvciBkaXNjdXNzIHdoZXRoZXIg dGhpcyBjb3VsZCBiZSBhDQogIGdvb2QgZml0Lg0KDQoNCltodHRwczovL2dpdGh1Yi5jb20vb3Bl bnZzdG9yYWdlL2FsYmFdDQo8aHR0cHM6Ly9naXRodWIuY29tL29wZW52c3RvcmFnZS9hbGJhPg0K DQpbaHR0cHM6Ly9naXRodWIuY29tL29wZW52c3RvcmFnZS9hcmFrb29uXQ0KPGh0dHBzOi8vZ2l0 aHViLmNvbS9vcGVudnN0b3JhZ2UvYXJha29vbj4NCg0KDQpHcmFjZSAwLjMuMCDwn5KFLCBmYW5j eSBkaWFnbm9zdGljcyBsaWJyYXJ5IGZvciBjb21waWxlcnMNCuKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6DQogIDxodHRwczov L2Rpc2N1c3Mub2NhbWwub3JnL3QvYW5uLWdyYWNlLTAtMy0wLWZhbmN5LWRpYWdub3N0aWNzLWxp YnJhcnktZm9yLWNvbXBpbGVycy8xNzgzMy8xPg0KDQoNCiJBbGlzdGFpciBPJ0JyaWVuIiBhbm5v dW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIEnigJltIGV4Y2l0ZWQgdG8g YW5ub3VuY2UgdGhlIHJlbGVhc2Ugb2YgW2dyYWNlIDAuMy4wXSwgYW4gT0NhbWwgbGlicmFyeQ0K ICBmb3IgYnVpbGRpbmcsIHJlcG9ydGluZyBhbmQgcmVuZGVyaW5nIGJlYXV0aWZ1bCBjb21waWxl ciBkaWFnbm9zdGljcw0KICA6Y2FtZWw6IDpwYWludGJydXNoOi4gTm93IGF2YWlsYWJsZSBvbiBb b3BhbS1yZXBvc2l0b3J5XS4NCg0KICBUaGlzIHJlbGVhc2UgaW5jbHVkZXM6DQoNCiAg4oCiIDp3 aW5kb3c6ICpXaW5kb3dzIHN1cHBvcnQqOiBHcmFjZSBub3cgd29ya3Mgb24gV2luZG93cywgYQ0K ICAgIGxvbmctYXdhaXRlZCBmZWF0dXJlIHNpbmNlIGl0cyAwLjEuMCByZWxlYXNlISA6cm9ja2V0 Og0KICDigKIgOmtleWJvYXJkOiAqVFRZIGF1dG8tZGV0ZWN0aW9uKjogYEdyYWNlX2Fuc2lfcmVu ZGVyZXInIGNhbiBub3cNCiAgICBhdXRvbWF0aWNhbGx5IGNvbmZpZ3VyZSBpdHNlbGYgYmFzZWQg b24gd2hldGhlciB0aGUgb3V0cHV0IGNoYW5uZWwNCiAgICBpcyBhIFRUWS4gIE5ldyBmdW5jdGlv bnM6IGBwcl9kaWFnbm9zdGljJywgYGVwcl9kaWFnbm9zdGljJywgYW5kDQogICAgYG91dHB1dF9k aWFnbm9zdGljJy4NCiAg4oCiIDplbGVwaGFudDogKkxpbmUgZWxpc2lvbio6IGBHcmFjZV9hbnNp X3JlbmRlcmVyJyBub3cgZWxpZGVzDQogICAgdW5uZWNlc3NhcnkgbGluZXMgaW4gZGlhZ25vc3Rp Y3MsIHByb2R1Y2luZyBtb3JlIGZvY3VzZWQgb3V0cHV0Lg0KICDigKIgOnplcm86ICpaZXJvLXdp ZHRoIHJhbmdlcyo6IGBHcmFjZV9hbnNpX3JlbmRlcmVyJyBjYW4gbm93IGhhbmRsZQ0KICAgIHpl cm8td2lkdGggcmFuZ2VzIHdpdGhpbiBsaW5lcywgYXMgd2VsbCBhcyBhdCBlbmQtb2YtbGluZSAo RU9MKSBhbmQNCiAgICBlbmQtb2YtZmlsZSAoRU9GKSBwb3NpdGlvbnMuDQoNCiAgTWFueSB0aGFu a3MgdG8gQGdpbHRobyBmb3IgdGhlaXIgY29udHJpYnV0aW9ucyB0byB0aGlzIHJlbGVhc2UhDQog IDpmbGV4ZWRfYmljZXBzOg0KDQoNCltncmFjZSAwLjMuMF0gPGh0dHBzOi8vZ2l0aHViLmNvbS9q b2hueW9iL2dyYWNlL3JlbGVhc2VzL3RhZy8wLjMuMD4NCg0KW29wYW0tcmVwb3NpdG9yeV0gPGh0 dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vcGFtLXJlcG9zaXRvcnkvcHVsbC8yOTM3OT4NCg0KQ0hB TkdFUw0K4pWM4pWM4pWM4pWM4pWM4pWM4pWMDQoNCiAg4oCiIGZlYXQocmVuZGVyZXIpOiBhZGQg YnJlYWtzIGluIGxhcmdlIGRpYWdub3N0aWNzIChbIzYzXSkNCiAg4oCiIGZlYXQocmVuZGVyZXIp OiBjaGVjayBmb3IgdHR5IHdoZW4gcmVuZGVyaW5nIChbIzYwXSkNCiAg4oCiIGZpeChyZW5kZXJl cik6IG9mZi1ieS1vbmUgaW4gYGxpbmVzX29mX2xhYmVscycgKFsjNjVdKQ0KICDigKIgZml4KHJl bmRlcmVyKTogY3JlYXRlIDAtc2l6ZWQgc2VnbWVudCBvbiBlbXB0eSBsYWJlbCByYW5nZSAoWyM2 NF0pDQogIOKAoiBmaXgocmVuZGVyZXIpOiByZW5kZXJlciBtdWx0aS1saW5lIGxhYmVscyB3aGVu IG1lc3NhZ2UgaXMgZW1wdHkNCiAgICAoWyM1M10pDQogIOKAoiBmaXgocmVuZGVyZXIpOiBmaXgg ZXJyb3JzIHRoYXQgb2NjdXIgd2l0aCBzcGVjaWFsIHplcm8td2lkdGgNCiAgICBzZWdtZW50cyAo WyM0MV0pDQogIOKAoiBmaXgocmVuZGVyZXIpOiB1c2UgYEZvcm1hdC5wcF9pbmZpbml0eScgaW4g YE1lc3NhZ2UudG9fc3RyaW5nJyBmb3INCiAgICBPQ2FtbCA+NS4yIChbIzQwXSkNCiAg4oCiIHJl ZmFjdG9yITogcmVtb3ZlcyBiYXNlL2NvcmUgZGVwZW5kZW5jeSAoWyM1OF0pDQoNCg0KWyM2M10g PGh0dHBzOi8vZ2l0aHViLmNvbS9qb2hueW9iL2dyYWNlL3B1bGwvNjM+DQoNClsjNjBdIDxodHRw czovL2dpdGh1Yi5jb20vam9obnlvYi9ncmFjZS9wdWxsLzYwPg0KDQpbIzY1XSA8aHR0cHM6Ly9n aXRodWIuY29tL2pvaG55b2IvZ3JhY2UvcHVsbC82NT4NCg0KWyM2NF0gPGh0dHBzOi8vZ2l0aHVi LmNvbS9qb2hueW9iL2dyYWNlL3B1bGwvNjQ+DQoNClsjNTNdIDxodHRwczovL2dpdGh1Yi5jb20v am9obnlvYi9ncmFjZS9wdWxsLzUzPg0KDQpbIzQxXSA8aHR0cHM6Ly9naXRodWIuY29tL2pvaG55 b2IvZ3JhY2UvcHVsbC80MT4NCg0KWyM0MF0gPGh0dHBzOi8vZ2l0aHViLmNvbS9qb2hueW9iL2dy YWNlL3B1bGwvNDA+DQoNClsjNThdIDxodHRwczovL2dpdGh1Yi5jb20vam9obnlvYi9ncmFjZS9w dWxsLzU4Pg0KDQoNCkJSRUFLSU5HIENIQU5HRQ0K4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM 4pWM4pWM4pWM4pWM4pWM4pWMDQoNCiAg4oCiIE1hbnkgYmFzZS9jb3JlIGludGVyZmFjZXMgZnJv bSBgR3JhY2UnIGhhdmUgYmVlbiByZXBsYWNlZCB3aXRoDQogICAgY3VzdG9tIG9uZXMuDQogIOKA oiBgU291cmNlLnJlYWRlcicgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGBTb3VyY2UuUmVhZGVyLnQn IGluc3RlYWQuDQoNCg0KSnNfb2Zfb2NhbWwgLyBXYXNtX29mX29jYW1sIDYuMw0K4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZToNCiAgPGh0dHBzOi8vZGlz Y3Vzcy5vY2FtbC5vcmcvdC9hbm4tanMtb2Ytb2NhbWwtd2FzbS1vZi1vY2FtbC02LTMvMTc4MzQv MT4NCg0KDQpKw6lyw7RtZSBWb3VpbGxvbiBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0K DQogIEknbSBwbGVhc2VkIHRvIGFubm91bmNlIHRoZSBqb2ludCByZWxlYXNlIG9mIGpzX29mX29j YW1sIGFuZA0KICB3YXNtX29mX29jYW1sIDYuMy4NCg0KICBKc19vZl9vY2FtbCBpcyBhIGNvbXBp bGVyIGZyb20gT0NhbWwgYnl0ZWNvZGUgdG8gSmF2YVNjcmlwdC4gSXQgbWFrZXMNCiAgaXQgcG9z c2libGUgdG8gcnVuIHB1cmUgT0NhbWwgcHJvZ3JhbXMgaW4gSmF2YVNjcmlwdCBlbnZpcm9ubWVu dCBsaWtlDQogIGJyb3dzZXJzIGFuZCBOb2RlLmpzLg0KDQogIFdhc21fb2Zfb2NhbWwgaXMgYSBj b21waWxlciBmcm9tIE9DYW1sIGJ5dGVjb2RlIHRvIFdlYkFzc2VtYmx5LiBJdCBpcw0KICBoaWdo bHkgY29tcGF0aWJsZSB3aXRoIEpzX29mX29jYW1sLCBzbyB5b3UgY2FuIGNvbXBpbGUgeW91ciBw cm9ncmFtcw0KICB3aXRoIHdhc21fb2Zfb2NhbWwgaW5zdGVhZCBvZiBqc19vZl9vY2FtbCBhbmQg ZXhwZXJpZW5jZSBvdmVyYWxsDQogIGJldHRlciBwZXJmb3JtYW5jZS4NCg0KICBNb3N0IHNpZ25p ZmljYW50IGNoYW5nZXMgKHNpbmNlIDYuMSk6DQoNCiAg4oCiICpOdW1iZXIgdW5ib3hpbmcgZm9y IHdhc21fb2Zfb2NhbWwqOiBhIHR5cGUgYW5hbHlzaXMgcGFzcyBub3cgdHJhY2tzDQogICAgIHdo aWNoIHZhbHVlcyBhcmUgZmxvYXRzLCBpbnRlZ2Vycywgb3IgbmF0aXZlaW50cywgZW5hYmxpbmcg dGhlDQogICAgIGNvbXBpbGVyIHRvIHVuYm94IHRoZW0gYW5kIHVzZSBuYXRpdmUgV2FzbSBpbnN0 cnVjdGlvbnMNCiAgICAgZGlyZWN0bHkuIFRoaXMgYWxzbyBlbmFibGVzIHNwZWNpYWxpc2F0aW9u IG9mIG51bWJlciBjb21wYXJpc29ucw0KICAgICBhbmQgYmlnYXJyYXkgb3BlcmF0aW9ucywgYXZv aWRpbmcgY29zdGx5IGdlbmVyaWMgcnVudGltZSBjYWxscy4NCiAg4oCiICpDb25zdGFudCBzaW5r aW5nIGZvciBqc19vZl9vY2FtbCo6IGEgbmV3IG9wdGltaXNhdGlvbiBwYXNzIG1vdmVzDQogICAg IGNvbnN0YW50cyBjbG9zZXIgdG8gdGhlaXIgdXNlIHNpdGVzLCByZWR1Y2luZyByZWdpc3Rlcg0K ICAgICBwcmVzc3VyZS4gTWFueSBjb25zdGFudHMgZW5kIHVwIGlubGluZWQsIHJlc3VsdGluZyBp biBzbWFsbGVyIGNvZGUNCiAgICAgc2l6ZS4NCiAg4oCiICpKUyBwYXJzZXIgaW1wcm92ZW1lbnRz Kjogc3VwcG9ydCBmb3IgaW1wb3J0L2V4cG9ydCBhdHRyaWJ1dGVzLA0KICAgICBkZWNvcmF0b3Jz LCBgdXNpbmcnIGRlY2xhcmF0aW9ucyAocmVzb3VyY2UgbWFuYWdlbWVudCksIGFuZCBIVE1MDQog ICAgIGNvbW1lbnRzLg0KICDigKIgTWFueSBidWcgZml4ZXMgYWNyb3NzIHRoZSBjb21waWxlciwg cnVudGltZSwgbGlicmFyeSBiaW5kaW5ncywgYW5kDQogICAgUFBYLg0KDQogIFNlZSB0aGUgW0No YW5nZWxvZ10gZm9yIHRoZSBmdWxsIGxpc3Qgb2YgY2hhbmdlcy4NCg0KDQpbQ2hhbmdlbG9nXQ0K PGh0dHBzOi8vZ2l0aHViLmNvbS9vY3NpZ2VuL2pzX29mX29jYW1sL2Jsb2IvbWFzdGVyL0NIQU5H RVMubWQ+DQoNCg0Ka3F1ZXVlLW1sIDAuNS4wDQrilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOiA8aHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9y Zy90L2Fubi1rcXVldWUtbWwtMC01LTAvMTc4MzUvMT4NCg0KDQpBbnVyYWcgU29uaSBhbm5vdW5j ZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgA0KDQogIEhpLA0KDQogIEknZCBsaWtlIHRvIGFubm91bmNlIGEgbmV3IHJlbGVh c2UgZm9yIFtrcXVldWUtbWwgdmVyc2lvbiAwLjUuMF0NCg0KICAqS3F1ZXVlLW1sOiogVGhpbiBi aW5kaW5ncyB0byBrcXVldWUgZXZlbnQgbm90aWZpY2F0aW9uIHN5c3RlbS4NCg0KICBDaGFuZ2Vz IHNpbmNlIHRoZSBsYXN0IHJlbGVhc2U6DQoNCiAg4oCiIE1vdmVkIGRldmVsb3BtZW50IHRvIFtj b2RlYmVyZ10NCiAg4oCiIFJlbW92ZSBkZXBlbmRlbmNpZXMgb24gYHBweF9vcHRjb21wJyBhbmQg YHBweF9leHBlY3QnIChEZXBlbmRlbmNpZXMNCiAgICBhcmUgbGltaXRlZCB0byB0aGUgb2NhbWwg c3RhbmRhcmQgbGlicmFyeSBhbmQgZHVuZSkNCg0KICBCZXN0LCBBbnVyYWcNCg0KDQpba3F1ZXVl LW1sIHZlcnNpb24gMC41LjBdDQo8aHR0cHM6Ly9vcGFtLm9jYW1sLm9yZy9wYWNrYWdlcy9rcXVl dWUva3F1ZXVlLjAuNS4wLz4NCg0KW2NvZGViZXJnXSA8aHR0cHM6Ly9jb2RlYmVyZy5vcmcvYW51 cmFnc29uaS9rcXVldWUtbWwvPg0KDQoNCkR1bmUgMy4yMS4wDQrilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOiA8aHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90 L2Fubi1kdW5lLTMtMjEtMC8xNzcwMC8yPg0KDQoNCkNvbnRpbnVpbmcgdGhpcyB0aHJlYWQsIFNo b24gYW5ub3VuY2VkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIANCg0KICBUaGUgRHVuZSB0ZWFtIGFubm91bmNlcyBbdGhlIHJlbGVhc2Ug b2YgZHVuZSAzLjIxLjFdLg0KDQogIFRoaXMgaXMgYSBzbWFsbCBwYXRjaCByZWxlYXNlIGNvbnNp c3Rpbmcgb2YgYSBmZXcgYnVnIGZpeGVzLiBTZWUgW3RoZQ0KICBmdWxsIGNoYW5nZWxvZ10gZm9y IGFsbCB0aGUgY2hhbmdlcy4NCg0KICBJZiB5b3UgZW5jb3VudGVyIGEgcHJvYmxlbSB3aXRoIHRo aXMgcmVsZWFzZSwgcGxlYXNlIHJlcG9ydCBpdCBpbiBbb3VyDQogIGlzc3VlIHRyYWNrZXJdLg0K DQoNClt0aGUgcmVsZWFzZSBvZiBkdW5lIDMuMjEuMV0NCjxodHRwczovL2dpdGh1Yi5jb20vb2Nh bWwvZHVuZS9yZWxlYXNlcy90YWcvMy4yMS4xPg0KDQpbdGhlIGZ1bGwgY2hhbmdlbG9nXSA8aHR0 cHM6Ly9naXRodWIuY29tL29jYW1sL2R1bmUvcmVsZWFzZXMvdGFnLzMuMjEuMT4NCg0KW291ciBp c3N1ZSB0cmFja2VyXSA8aHR0cHM6Ly9naXRodWIuY29tL29jYW1sL2R1bmUvaXNzdWVzPg0KDQoN Ck90aGVyIE9DYW1sIE5ld3MNCuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkA0KDQpGcm9tIHRoZSBvY2FtbC5vcmcgYmxvZw0K4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAg SGVyZSBhcmUgbGlua3MgZnJvbSBtYW55IE9DYW1sIGJsb2dzIGFnZ3JlZ2F0ZWQgYXQgW3RoZSBv Y2FtbC5vcmcNCiAgYmxvZ10uDQoNCiAg4oCiIFtBdCB0aGUgQUkgSW1wYWN0IFN1bW1pdCBpbiBE ZWxoaTogcGVvcGxlLCBwbGFuZXQsIHByb2dyZXNzXQ0KICDigKIgW09CdWlsZGVyIG9uIFdpbmRv d3M6IEJyaW5naW5nIE5hdGl2ZSBDb250YWluZXIgQnVpbGRzIHdpdGggdGhlIEhDUw0KICAgIEJh Y2tlbmRdDQogIOKAoiBbMXN0IFRFU1NFUkEvQ29SRSBoYWNrYXRob24gYXQgdGhlIEluZGlhbiBB SSBTdW1taXRdDQoNCg0KW3RoZSBvY2FtbC5vcmcgYmxvZ10gPGh0dHBzOi8vb2NhbWwub3JnL2Js b2cvPg0KDQpbQXQgdGhlIEFJIEltcGFjdCBTdW1taXQgaW4gRGVsaGk6IHBlb3BsZSwgcGxhbmV0 LCBwcm9ncmVzc10NCjxodHRwczovL2FuaWwucmVjb2lsLm9yZy9ub3Rlcy9pbmRpYS1haS1zdW1t aXQ+DQoNCltPQnVpbGRlciBvbiBXaW5kb3dzOiBCcmluZ2luZyBOYXRpdmUgQ29udGFpbmVyIEJ1 aWxkcyB3aXRoIHRoZSBIQ1MNCkJhY2tlbmRdIDxodHRwczovL3d3dy50dW5idXJ5Lm9yZy8yMDI2 LzAyLzE5L29idWlsZGVyLWhjcy8+DQoNClsxc3QgVEVTU0VSQS9Db1JFIGhhY2thdGhvbiBhdCB0 aGUgSW5kaWFuIEFJIFN1bW1pdF0NCjxodHRwczovL2FuaWwucmVjb2lsLm9yZy9ub3Rlcy9maXJz dC10ZXNzZXJhLWhhY2thdGhvbj4NCg0KDQpPbGQgQ1dODQrilZDilZDilZDilZDilZDilZDilZAN Cg0KICBJZiB5b3UgaGFwcGVuIHRvIG1pc3MgYSBDV04sIHlvdSBjYW4gW3NlbmQgbWUgYSBtZXNz YWdlXSBhbmQgSSdsbCBtYWlsDQogIGl0IHRvIHlvdSwgb3IgZ28gdGFrZSBhIGxvb2sgYXQgW3Ro ZSBhcmNoaXZlXSBvciB0aGUgW1JTUyBmZWVkIG9mIHRoZQ0KICBhcmNoaXZlc10uDQoNCiAgSWYg eW91IGFsc28gd2lzaCB0byByZWNlaXZlIGl0IGV2ZXJ5IHdlZWsgYnkgbWFpbCwgeW91IG1heSBz dWJzY3JpYmUNCiAgdG8gdGhlIFtjYW1sLWxpc3RdLg0KDQogIFtBbGFuIFNjaG1pdHRdDQoNCg0K W3NlbmQgbWUgYSBtZXNzYWdlXSA8bWFpbHRvOmFsYW4uc2NobWl0dEBwb2x5dGVjaG5pcXVlLm9y Zz4NCg0KW3RoZSBhcmNoaXZlXSA8aHR0cHM6Ly9hbGFuLnBldGl0ZXBvbW1lLm5ldC9jd24vPg0K DQpbUlNTIGZlZWQgb2YgdGhlIGFyY2hpdmVzXSA8aHR0cHM6Ly9hbGFuLnBldGl0ZXBvbW1lLm5l dC9jd24vY3duLnJzcz4NCg0KW2NhbWwtbGlzdF0gPGh0dHBzOi8vc3ltcGEuaW5yaWEuZnIvc3lt cGEvaW5mby9jYW1sLWxpc3Q+DQoNCltBbGFuIFNjaG1pdHRdIDxodHRwczovL2FsYW4ucGV0aXRl cG9tbWUubmV0Lz4NCg0K --=-=-= 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 February 17 to 24, 20= 26.

OSEC-2026-01 in the OCaml runtime: Buffer Over-Read in OCaml M= arshal Deserialization

Hannes Mehnert announced

Dear everyone,

it is my pleasure to announce the first security announcement of this=20 year, and the first coordinated by the new OCaml security response team=20 (https://ocaml.org/security).

Please subscribe to the OCaml security announcement mailing list=20 (https://sympa.inria.fr/sympa/info/ocsf-ocaml-security-announcements) to=20 receive all security advisories. To this mailing list I'll only copy=20 those affecting the core of OCaml distribution.

It should any moment now also appear at https://osv.dev/list?q=3DOSEC-2026-01

Human link:=20 https://github.com/ocaml/security-advisories/tree/m= ain/advisories/2026/OSEC-2026-01.md

id: OSEC-2026-01
modified: "2026-02-17T13:30:00Z"
published: "2026-02-17T13:30:00Z"
aliases: [  GHSA-j26j-m5xr-g23c GHSA-m34r-cgq7-jhfm ]
severity: "CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:N"
severity_score: "6.8"
affected: "ocaml" {< "4.14.3" | (>=3D "5" & < "5.4.1")}
events: [
   [
     git "https://github.com/ocaml/ocaml" [
       [fixed "b0a2614684a52acded784ec213f14ddfe085d146"]
     ]
   ]
   [
     git "https://github.com/ocaml/ocaml" [
       [fixed "e3919fef436f89271bc30bbe8592851f7289fb68"]
     ]
   ]
]
references: [
   [report=20
"https://github.com/ocaml/security-advisories/security/advisories/GHSA-j26j=
-m5xr-g23c"]
]
credits: [
   [reporter "Justin Timperio"]
   [remediation_developer "Nicol=C3=A1s Ojeda B=C3=A4r"]
   [remediation_developer "Xavier Leroy"]
   [remediation_developer "Gabriel Scherer"]
   [remediation_reviewer "Xavier Leroy"]
   [remediation_reviewer "Olivier Nicole"]
   [remediation_verifier "Mindy Preston"]
   [remediation_verifier "Edwin T=C3=B6r=C3=B6k"]
   [coordinator "Hannes Mehnert"]
]
cwe: [ CWE-126 CWE-502 CWE-754 ]

Buffer Over-Read in OCaml Marshal Deserialization

Summary

A critical buffer over-read vulnerability in OCaml's Marshal=20 deserialization (runtime/intern.c) enables remote code execution through=20 a multi-phase attack chain. The vulnerability stems from missing bounds=20 validation in the readblock() function, which performs unbounded=20 memcpy() operations using attacker-controlled lengths from malicious=20 Marshal data.

Please note that Marshal is not type safe, and you have to be careful if=20 you use the deserialization on untrusted input (due to type confusion,=20 and remote code execution by design - you can use Marshal for code).

Affected functions: Marshal.from_channel, Marshal.from_b= ytes,=20 Marshal.from_string, Stdlib.input_value, Pe= rvasives.input_value=20 when reading data from an untrusted source.

Vulnerability Attack Vector

Corrupted or malicious marshaled data that causes undefined behaviour in=20 the runtime system when unmarshaled. input_value should either fail cleanly or produce a well-forme= d OCaml=20 object, without corrupting the runtime system.

Consequently, this excludes:

  • well-formed marshaled data that produces an OCaml object that is not of= the type expected by the OCaml code and causes the Ocaml code to crash or = misbehave
  • misuses of the OCaml runtime system by the program performing input_val= ue, such as setting Debugger.function_placeholder to the wrong= function.

The former issue may be addressed at some point by validating the=20 unmarshaled OCaml value against the expected type, using the functions=20 from module Obj and some kind of run-time type description.

The latter issue is a bug in the program that unmarshals the data.

Fix

  • OCaml runtime

    The OCaml runtime has been hardened with additional bounds checks. An=20 exception is raised on bad input.

  • Third party libraries

    Third party libraries that want to harden their custom Marshal=20 deserialization code can follow the example fix for bigarrays from the=20 standard library. There are new macros in custom.h called Wsize_custom_dat= a and=20 Bsize_custom_data that return the size in words or bytes of th= e=20 allocated custom destination block. The deserializer needs to ensure it=20 only writes data within those bounds.

    This only needs to be done if the library defines a custom type in a C=20 binding, and struct custom_operations's deserialize field is not set=20 to NULL or custom_deserialize_default, and = struct=20 custom_operations's fixed_length field is set to = NULL or=20 custom_fixed_length_default

    Since Marshal.from* and input_value remain unsafe= to use, the fix=20 for the OCaml runtime is released, and we wouldn't attempt to coordinate=20 updating all deserialization functions in the ecosystem.

Timeline

  • Nov 4th 2025: Discovery Date: Discovered first in OxCaml
  • Nov 5th 2025: First Disclosure Date (Jane Street Team): Emailed top mai= ntainers, no response.
  • Nov 9th 2025: Second Disclosure Date (OCaml Team): Submitted to OCaml/o= caml GitHub Repo as a Security Advisory.
  • Nov 11th 2025: Emailed OCaml Security Mail List: Submitted to OCaml ove= r email, responded asking for details.
  • Nov 11th 2025: Third Disclosure (OCaml Security Response Team): Submitt= ed to ocaml/security-advisories GitHub Repo as a Security Advisory.
  • Dec 16th 2025: Initial patch is developed
  • Dec 17th 2025: Fuzz testing found further issues
  • Dec 24th 2025: Final patch for OCaml is developed
  • Dec 25th 2025: Fuzz testing couldn't find any further issues
  • Jan 2nd 2026: Patch got reviewed by OCaml maintainers
  • Jan 4th 2026: Benchmarking of the patch with good results
  • Jan 6th 2026: Reporter got contacted to confirm
  • Jan 25th 2026: Further related issues discovered by fuzzing
  • Feb 17th 2026: fixed OCaml releases are published, security advisory is= published

OCaml 5.4.1 and 4.14.3 released

octachron announced

We have the pleasure of announcing the dual releases of OCaml 4.14.3 and OC= aml 5.4.1, dedicated to the memory of Nicolaas Govert de Bruijn on the anni= versary of his death.

Those releases are a collection of safe and valuable runtime bugfixes. The OCaml 5.4.1 release also contains a fix for the -pack mode= for macOs and various TSAN fixes.

More importantly, those new versions harden the Marshal module against mali= cious inputs as described in the security announcement OSEC-2026-01.

We are encouraging you to switch to those new releases whenever possible.

Don't hesitate to report any bugs on the OCaml issue tracker.

See the list of changes below for more details.

Happy hacking, – Florian Angeletti for the OCaml team.

Installation Instructions

The base compilers will be soon installable as an opam switch with the foll= owing commands:

opam update
opam switch create 4.14.3
opam switch create 5.4.1

The source code for the release candidate is also directly available on:

OCaml 4.14.3 (17 February 2026)

  • #12070, #12075, #13209: auto-detect wheth= er ar support @FILE arguments at configure-time to avoid using this feature with toolchains that do not supp= ort it (eg FreeBSD/Darwin); backport from 5.3. (backport by Boris Dobroslavov, original fix by Nicol=C3=A1s Ojeda B=C3=A4r= , review by Xavier Leroy, David Allsopp, Javier Ch=C3=A1varri, Anil Madhavapeddy)
  • #12207, #12222: Make closu= re computation linear in the number of recursive functions instead of quadratic (Vincent Laviron, report by Fran=C3=A7ois Pottier, review by Nathana=C3=ABl= le Courant and Gabriel Scherer)
  • #13430, #13434: protect me= mory-safety on Lazy.force races (Gabriel Scherer and Vincent Laviron, report by Edwin T=C3=B6r=C3=B6k, review by Vincent Laviron)
  • #13448, #13449: fix a code= -generation bug on unsafe array accesses at type int32, int64, nativeint, which has been introduced in OCaml 4.04. (Gabriel Scherer, review by Nicol=C3=A1s Ojeda B=C3=A4r and Vincent Laviron, report by Simon Cruanes)
  • #13516: Fix= regression where error conditions during bytecode initialisation caused a segmentation fault rather than being properly reported (regression= of #5115 in #11788) (David Allsopp, review by Nicol=C3=A1s Ojeda B=C3=A4r)
  • #13847: On = Windows, maintain a number of threads waiting on the master lock to avoid unnecessary context switches (Dmitry Bely, review by Antonin D=C3=A9cimo)
  • #14007, #14015: Fix memory= corruption when an exception is raised during demarshaling. (Beno=C3=AEt Vaugon, review by David Allsopp and Gabriel Scherer)
  • OSEC-2026-01= : robustify intern.c (Xavier Leroy, review by Damien Doligez and Olivier Nicole)

OCaml 5.4.1 (17 February 2026)

Bug fixes:

  • #14010: Fix= miscompilation / liveness errors for string operations (Mark Shinwell, Xavier Clerc, review by Xavier Leroy and Gabriel Scherer)
  • #14065: Fix= function signature mismatch of __tsan_func_exit with GCC 15. Check in the configure step if the TSan provided internal builtins are the same as what we expect, introduce caml_tsan_* wrappers for the= __tsan_* functions we use. (Hari Hara Naveen S, report by Hari Hara Naveen S, review by Gabriel Scherer, Antonin D=C3=A9cimo, Olivier Nicole)
  • #14417: Fix= issue with nested packs on macOS. (Vincent Laviron, report by Kate Deplaix, review by Gabriel Scherer)
  • #14213: Fix= shadow-stack-related crashes with TSan (Olivier Nicole, report by Nathan Taylor, review by Gabriel Scherer and Stefan Muenzel)
  • #14255: Fix= TSan bug with C calls that take many arguments (Olivier Nicole and Miod Vallat, report by Nathan Taylor, review by Gabriel Scherer)
  • OSEC-2026-01= : robustify intern.c (Xavier Leroy and Nicol=C3=A1s Ojeda B=C3=A4r, review by Olivier Nicole, Mi= ndy Preston, Edwin T=C3=B6r=C3=B6k, and Gabriel Scherer)

Ann: Ochat =E2=80=94 Try Ochat for terminal-based LLM workflow= s

Dakota Murphy announced

Hi all =E2=80=94 I=E2=80=99d like to share a project I=E2=80=99ve been buil= ding: Ochat.

What it is

Ochat is a toolkit for building LLM workflows as plain files. The co= re format is ChatMarkdown (ChatMD): Markdown plus a small, closed XM= L vocabulary.

A single ChatMD file is both:

  • the prompt/program (model config, tool allowlist, instructions, = context), and
  • the auditable transcript (assistant replies + tool calls + tool = outputs)

Because everything is plain text, workflows are reproducible and diffable i= n git.

Prompt packs: building larger workflows from small= agents

Ochat supports agent-as-tool: you can mount one ChatMD prompt as a c= allable tool inside another. This lets you build prompt packs (plann= er/coder/reviewer/docs/test triage/etc.) and orchestrate them from a top-le= vel prompt, without writing a custom =E2=80=9Cagent app=E2=80=9D.

chat_tui: a Notty-based terminal UI (runtime uses = Eio)

Ochat ships an interactive terminal UI called chat_tui.

  • The UI is built with Notty
  • The underlying runtime uses Eio (structured concurrency + I/O)

A ChatMD file can be treated as a =E2=80=9Cterminal agent=E2=80=9D: you aut= hor an agent prompt as a .md, open it in chat_tui, and run/iterate on it wh= ile the transcript (including tool traces) is persisted.

Some chat_tui features:

  • streaming output (assistant text + tool calls + tool outputs)
  • persistent sessions you can resume/branch/export
  • manual context compaction (:compact) for long histories
  • syntax highlighting (including OCaml)
  • AI completions in the text input (to speed up drafting)
  • Vim-ish editing modes and message selection/yank/edit/resubmit workflow= s

Useful built-in tools (especially for code workflo= ws)

Ochat includes built-in tools that cover most =E2=80=9Cagent + repo=E2=80= =9D loops:

  • read_file / read_dir for safe repo navigation
  • apply_patch for atomic, repo-safe edits
  • webpage_to_markdown for high-signal ingestion (incl. GitHub blob fast-p= ath)
  • indexing/retrieval tools for grounding over docs and code
  • optional vision inputs via import_image

MCP tool import (optional)

Ochat can also mount external tools via MCP (stdio or HTTP). For example, i= mporting Brave Search over stdio:

<tool "stdio:npx -y brave-s=
earch-mcp" name=3D"brave_web_search" />

Quick example: a =E2=80=9Ccustom terminal orchestr= ator agent=E2=80=9D

This is a complete agent definition (and becomes the runnable =E2=80=9Capp= =E2=80=9D when opened in chat_tui):

<config model=3D"gpt-5.2" reasoning_effort=3D"medium" />

<!-- core built-ins -->
<=
tool name=3D"read_dir"/>
<=
tool name=3D"read_file"/>
<=
tool name=3D"apply_patch"/=
>
<=
tool name=3D"webpage_to_markdown"=
/>

<!-- optional: import an external to=
ol via MCP -->=
;
<=
tool mcp_server=3D"stdio:npx -y brave-search-mcp" name=3D"brave_web_s=
earch" />

<!-- prompt-pack tools (agents as to=
ols) -->
<=
tool name=3D"plan"   agent=
=3D"prompts/pack/plan.md" local/>
<=
tool name=3D"code"   agent=
=3D"prompts/pack/code.md" local/>
<=
tool name=3D"review" agent=
=3D"prompts/pack/review.md" local/>

<=
developer>
You are the orchestrator. Call plan first.
Keep edits small. Before apply_patch: explain the diff and wait for confirm=
ation.
</developer>

<=
user>
Add a Quickstart section to README.md.
</user>

Run it from the repo with:

dune exec chat_tui -- -file prompts/refactor.md

Status / caveats

  • Provider support today is OpenAI-only.
  • The project is moving quickly.

Feedback / contributors

I=E2=80=99d appreciate any feedback or contributions

If you try it and anything=E2=80=99s confusing or rough, please open an iss= ue.

Serialport - new serial communication library

Continuing this thread, Mikhail announced

Added (aka implemented) Win32 support, which has = not been thoroughly tested, but may be useful for certain target use cases.

Slipshow!

Continuing this thread, Paul-Elliot announced

It is with extraterrestrial excitement that I announce the next release of = Slipshow:

Slipshow 0.9.0: Manim Black

The featured new feature of this release is the ability to easily integrate= Manim videos in your presenta= tion.

https://github.com/user-attachments/assets/f67bb8fc-c288-4= ff3-b6bc-e72c12e636a7

Note that, compared to just playing a video, you can schedule pauses, go fa= ster to the next pause, and go back to the previous pauses, as showcased be= low.

Skipping steps and going backward demo

https://github.com/user-attachments/assets/c= f1ad264-a5e2-42d2-9f57-09551f3a35e8

This release features many more changes, such as TikZ and MermaidJS integra= tion! Here is the full changelog:

Added

  • Support for Mermaid JS (#205)
  • Support for syntax highlighting of all highlightjs-supported languages = and themes (#200<= /a>, #208)
  • Support for MathJax extensions, especially the html extension to allow = actions to target math elements (#202)
  • Add KaTeX as a possible alternate renderer (#202)
  • Added carousel-fixed-size to have carousel not change size= (#207)

Fix

  • Fix impossibility to reopen speaker view after closing it on Firefox (<= a href=3D"https://github.com/panglesd/slipshow/pull/198">#198, issue #194)
  • Fix impossibility to open speaker view in serve mode (#198, issue #197)
  • Fix links opening inside iframe (#198)
  • Fix ending excursions with ijkl only when needed (#207)
  • Fixed video long-step handling (#207)
  • Removed confusing auto-generated IDs (#209)
  • Fix play-media behavior when facing errors (#210)

Docs

  • Add how to include TikZ figures in your Slipshow presentation (#206)
  • Add how to include Manim videos in your Slipshow presentation (#207)

Credit: @vds for the name of the release.

Thanks again to NLNet for su= pporting the development of Slipshow!

Remote OCaml Distributed Systems Engineer (Linux / Storage / N= etworking) =E2=80=93 whitesky.cloud =E2=80=93 EMEA/Asia

Geert Audenaert announced

We are looking for an OCaml engineer to join whitesky.cloud to work = on low-level distributed infrastructure components.

About the work

You will work on core building blocks of a sovereign cloud platform, includ= ing distributed storage and coordination services.

Examples of related projects:

The work involves:

  • Distributed systems design and implementation
  • High-performance networking and I/O
  • Linux systems programming
  • Debugging and optimizing behavior under real production load
  • Long-running services where reliability and correctness matter

This is infrastructure work, not web development.

What we are looking for

  • Strong OCaml experience or strong systems programming background= with willingness to work in OCaml
  • Good understanding of:
    • Linux internals
    • Networking / TCP/IP
    • Concurrency and performance
  • Interest in distributed systems, storage, or consensus algorithms

We care more about systems thinking and engineering depth than about= specific frameworks.

Practical details

  • Full-time position
  • Fully remote
  • Location: EMEA or Asia
  • Salary: around =E2=82=AC3000/month (depending on experience and = location)

We know this is not a big-tech salary. We are a small engineering-driven co= mpany, and the role is aimed at engineers who enjoy working close to the sy= stem, solving real infrastructure problems, and having a direct impact.

About whitesky

whitesky builds a complete cloud platform based on Linux and KVM, focused o= n sovereignty and control. The platform is used by MSPs, SaaS providers and enterprises to run their o= wn cloud infrastructure.

You will be working on components that run in production environments and f= orm part of a distributed cloud stack.

If this sounds interesting, please contact:

geert.audenaert@whitesky.cloud

or send a DM.

We are happy to answer questions or discuss whether this could be a good fi= t.

Grace 0.3.0 =F0=9F=92=85, fancy diagnostics library for compil= ers

"Alistair O'Brien" announced

I=E2=80=99m excited to announce the release of grace 0.3.0, an OCaml library for b= uilding, reporting and rendering beautiful compiler diagnostics :camel: :pa= intbrush:. Now available on opam-repository.

This release includes:

  • :window: Windows support: Grace now works on Windows, a long-awa= ited feature since its 0.1.0 release! :rocket:
  • :keyboard: TTY auto-detection: Grace_ansi_renderer = can now automatically configure itself based on whether the output channel = is a TTY. New functions: pr_diagnostic, epr_diagnostic<= /code>, and output_diagnostic.
  • :elephant: Line elision: Grace_ansi_renderer now el= ides unnecessary lines in diagnostics, producing more focused output.
  • :zero: Zero-width ranges: Grace_ansi_renderer can n= ow handle zero-width ranges within lines, as well as at end-of-line (EOL) a= nd end-of-file (EOF) positions.

Many thanks to @giltho for their contributions to this release! :flexed_bic= eps:=20

CHANGES

  • feat(renderer): add breaks in large diagnostics (#63)
  • feat(renderer): check for tty when rendering (#60)
  • fix(renderer): off-by-one in lines_of_labels (#65)
  • fix(renderer): create 0-sized segment on empty label range (#64)
  • fix(renderer): renderer multi-line labels when message is empty (#53)
  • fix(renderer): fix errors that occur with special zero-width segments (= #41)
  • fix(renderer): use Format.pp_infinity in Message.to_= string for OCaml >5.2 (#40)
  • refactor!: removes base/core dependency (#58)

BREAKING CHANGE

  • Many base/core interfaces from Grace have been replaced wi= th custom ones.
  • Source.reader has been removed. Use Source.Reader.t<= /code> instead.

Js_of_ocaml / Wasm_of_ocaml 6.3

J=C3=A9r=C3=B4me Vouillon announced

I'm pleased to announce the joint release of js_of_ocaml and wasm_of_ocaml = 6.3.

Js_of_ocaml is a compiler from OCaml bytecode to JavaScript. It makes it po= ssible to run pure OCaml programs in JavaScript environment like browsers a= nd Node.js.

Wasm_of_ocaml is a compiler from OCaml bytecode to WebAssembly. It is highl= y compatible with Js_of_ocaml, so you can compile your programs with wasm_o= f_ocaml instead of js_of_ocaml and experience overall better performance.

Most significant changes (since 6.1):

  • Number unboxing for wasm_of_ocaml: a type analysis pass now trac= ks which values are floats, integers, or nativeints, enabling the compiler = to unbox them and use native Wasm instructions directly. This also enables = specialisation of number comparisons and bigarray operations, avoiding cost= ly generic runtime calls.
  • Constant sinking for js_of_ocaml: a new optimisation pass moves = constants closer to their use sites, reducing register pressure. Many const= ants end up inlined, resulting in smaller code size.
  • JS parser improvements: support for import/export attributes, de= corators, using declarations (resource management), and HTML c= omments.
  • Many bug fixes across the compiler, runtime, library bindings, and PPX.=

See the Changelog for the full list of changes.

kqueue-ml 0.5.0

Anurag Soni announced

Hi,

I'd like to announce a new release for kqueue-ml version 0.5.0

Kqueue-ml: Thin bindings to kqueue event notification system.=20

Changes since the last release:

  • Moved development to codeberg
  • Remove dependencies on ppx_optcomp and ppx_expect (Dependencies are limited to the ocaml standard library and dune)

Best, Anurag

Dune 3.21.0

Continuing this thread, Shon announced

The Dune team announces the release of dune 3.21.1.

This is a small patch release consisting of a few bug fixes. See the full changelog = for all the changes.

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

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.

--=-=-=--