Attn: Development Editor, Latest OCaml Weekly News
Alan Schmitt <[email protected]> Tue, 19 May 2026 10:52:21 +0200
| Newsgroups | gmane.comp.lang.caml.inria |
|---|---|
| Message-ID | <[email protected]> |
--===-=-=
Content-Type: multipart/mixed; boundary="=-=-="
--=-=-=
Content-Type: multipart/alternative; boundary="==-=-="
--==-=-=
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: base64
SGVsbG8NCg0KSGVyZSBpcyB0aGUgbGF0ZXN0IE9DYW1sIFdlZWtseSBOZXdzLCBmb3IgdGhlIHdl
ZWsgb2YgTWF5IDEyIHRvIDE5LA0KMjAyNi4NCg0KVGFibGUgb2YgQ29udGVudHMNCuKUgOKUgOKU
gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQpob3RzZWF0IFNx
dWF2YSAoYSB0aW55IExhYmxHdGsyIGRlbW8pDQpSZXF1ZXN0IGZvciBjb21tZW50czogV2hhdCB0
byBkbyB3aXRoIG9wYW0gcGFja2FnZXMgdGhhdCBoYXZlIGtub3duIHNlY3VyaXR5IHZ1bG5lcmFi
aWxpdGllcw0Kb2RvYyAzLjIuMSByZWxlYXNlDQpMaXN0IHlvdXIgb3BlbiBPQ2FtbCBwb3NpdGlv
bnMgb24gdGhlIE9DYW1sLm9yZyBqb2IgYm9hcmQNCkNhbW15IFN0b3JpZXM6IGEgc21hbGwgT0Nh
bWwgd2ViY29taWMgZXhwZXJpbWVudCDwn5CrDQpNbEZyb250X1Byb2dyZXNzWmlnIC0gWmlnLWNv
bXBhdGlibGUgcHJvZ3Jlc3MgdHJlZXMNCmxvbyAtIGx1YSBvZiBvY2FtbA0KT2xkIENXTg0KDQoN
CmhvdHNlYXQgU3F1YXZhIChhIHRpbnkgTGFibEd0azIgZGVtbykNCuKVkOKVkOKVkOKVkOKVkOKV
kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV
kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6DQogIDxo
dHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3QvYW5uLWhvdHNlYXQtc3F1YXZhLWEtdGlueS1sYWJs
Z3RrMi1kZW1vLzE3OTU3LzI+DQoNCg0KQ29udGludWluZyB0aGlzIHRocmVhZCwgRGFtaWVuIEd1
aWNoYXJkIGFubm91bmNlZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA
4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA
4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAg
TmV3ZXIgMS4yIHZlcnNpb24sIG5vdyBkZXRlY3RzIGV2ZW50dWFsIGRyYXcgZ2FtZXMuDQoNCiAg
PGh0dHBzOi8vcGFzdGViaW4uY29tL0RqWjAzeVBhPg0KDQoNClJlcXVlc3QgZm9yIGNvbW1lbnRz
OiBXaGF0IHRvIGRvIHdpdGggb3BhbSBwYWNrYWdlcyB0aGF0IGhhdmUga25vd24gc2VjdXJpdHkg
dnVsbmVyYWJpbGl0aWVzDQrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi
lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi
lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi
lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi
lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi
lZDilZDilZANCg0KICBBcmNoaXZlOg0KICA8aHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90L3Jl
cXVlc3QtZm9yLWNvbW1lbnRzLXdoYXQtdG8tZG8td2l0aC1vcGFtLXBhY2thZ2VzLXRoYXQtaGF2
ZS1rbm93bi1zZWN1cml0eS12dWxuZXJhYmlsaXRpZXMvMTgwODcvMT4NCg0KDQpIYW5uZXMgTWVo
bmVydCBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU
gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIERlYXIgZXZlcnlvbmUsDQoNCiAg
d2UgKHRoZSBPQ2FtbCBzZWN1cml0eSkgdGVhbSBpcyBjdXJpb3VzIHdoYXQgdGhlIHByYWN0aWNl
IHNob3VsZCBiZQ0KICBmb3Igb3BhbSBwYWNrYWdlcyB0aGF0IGhhdmUga25vd24gc2VjdXJpdHkg
dnVsbmVyYWJpbGl0aWVzPw0KDQogIE9uZSB3YXkgaXMgdG8gbWFyayB0aGVtIHdpdGggYGF2YWls
YWJsZTogZmFsc2UnIGluIHRoZQ0KICBvcGFtLXJlcG9zaXRvcnksIHdoaWNoIHdpbGwgbWFrZSB0
aGVtIG5vdCBpbnN0YWxsYWJsZSAoYXBhcnQgZnJvbSBpZg0KICB5b3UgbWFudWFsbHkgZWRpdCB0
aGUgb3BhbSBmaWxlKS4NCg0KICBFc3BlY2lhbGx5IGZvciB0aGUgT0NhbWwgY29tcGlsZXIgaXQg
aXMgYSB0cmlja3kgcXVlc3Rpb246IHRoZSByZWNlbnQNCiAgdnVsbmVyYWJpbGl0eSAoaW4gTWFy
c2hhbCkgYWZmZWN0cyBldmVyeXRoaW5nIDwgNC4xNC4zIHwgPiA1ICYgPCA1LjQuMQ0KICDigJMg
c28gbWFya2luZyB0aGVzZSBjb21waWxlcnMgYXMgdW5hdmFpbGFibGUgd2lsbCByZXN1bHQgaW4g
bG90cyBvZg0KICBwcm9qZWN0cyB0aGF0IHJlcXVpcmUgc3VjaCBvbGRlciBPQ2FtbCB2ZXJzaW9u
cyB0byBub3QgYmUgZWFzaWx5DQogIGluc3RhbGxhYmxlIGFueW1vcmUuIEVzcGVjaWFsbHkgc2lu
Y2UgdGhlIE1hcnNoYWwgaXNzdWUgaXMgbm90IGV4cG9zZWQNCiAgaW4gbWFueSAoYW55PykgYXBw
bGljYXRpb25zLCBpdCBmZWVscyB3cm9uZyB0byBkaXNhbGxvdyAvIG1ha2UgaXQgaGFyZA0KICBm
b3IgYW55b25lIHRvIGluc3RhbGwgdGhlc2UgY29tcGlsZXJzLg0KDQogIFNvbWUgaWRlYXMgd2Ug
aGF2ZSBmb3IgdGhlIGZ1dHVyZToNCiAg4oCiIGFubm90YXRlIHRoZSBleGFjdCBmdW5jdGlvbihz
KSB0aGF0IGlzL2FyZSB2dWxuZXJhYmlsZSBpbiB0aGUNCiAgICBzZWN1cml0eSBhZHZpc29yeSAo
dGh1cywgeW91IGNvdWxkIGF1dG9tYXRpY2FsbHkgc2VhcmNoIGZvciB1c2Ugb2YNCiAgICB0aGF0
IGZ1bmN0aW9uKQ0KICDigKIgcHJvdmlkZSBhbiAib3BhbSBhdWRpdCIgd2hpY2ggdGFrZXMgdGhl
IGFkdmlzb3J5IGRhdGFiYXNlIGFuZA0KICAgIGluc3BlY3RzIHlvdXIgb3BhbSBzd2l0Y2ggd2hl
dGhlciB5b3UgaGF2ZSBpbnN0YWxsZWQgYW55IHZ1bG5lcmFibGUNCiAgICBwYWNrYWdlDQoNCiAg
QnV0IGZvciB0aGUgc2hvcnQgJiBtZWRpdW0gdGVybSwgd2UnZCBhcHByZWNpYXRlIGlucHV0IG9u
IHdoYXQgdG8gZG8NCiAgd2l0aCBub3JtYWwgb3BhbSBwYWNrYWdlcyB0aGF0IGhhdmUgYWR2aXNv
cmllczsgYW5kIGFsc28gd2hldGhlciB0bw0KICB0cmVhdCB0aGUgY29tcGlsZXIgcGFja2FnZXMg
ZGlmZmVyZW50bHkgb3Igbm90Lg0KDQoNCm9kb2MgMy4yLjEgcmVsZWFzZQ0K4pWQ4pWQ4pWQ4pWQ
4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZTog
PGh0dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9hbm4tb2RvYy0zLTItMS1yZWxlYXNlLzE4MDg4
LzE+DQoNCg0KSm9uIEx1ZGxhbSBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU
gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIFRoZSBvZG9jIHRlYW0gaXMg
cGxlYXNlZCB0byBhbm5vdW5jZSB0aGUgcmVsZWFzZSBvZiBvZG9jIDMuMi4xIQ0KDQoNCkhpZ2hs
aWdodHMNCuKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjA0KDQril4ogT0NhbWwgNS41LjAg
c3VwcG9ydA0KDQogIG9kb2Mgbm93IGNvbXBpbGVzIGFnYWluc3QsIGFuZCBwcm9kdWNlcyBkb2N1
bWVudGF0aW9uIGZvciwgT0NhbWwgNS41LjANCiAgKEBwYW5nbGVzZCwgQHh2dywgWyMxNDA2XSku
DQoNCg0KICBbIzE0MDZdIDxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwvb2RvYy9pc3N1ZXMvMTQw
Nj4NCg0KDQril4ogT3hDYW1sIHN1cHBvcnQNCg0KICBvZG9jIG5vdyBzdXBwb3J0cyBPeENhbWwg
bmF0aXZlbHksIHRoYW5rcyB0byBAbHVrZW1hdXJlciBhbmQgQGFydC13DQogIChbIzEzOTldKS4g
UmlnaHQgbm93IHRoaXMgaXMgdmVyeSBiYXJlLWJvbmVzLCBidXQgZnVsbCBzdXBwb3J0IGZvciB0
aGUNCiAgdmFyaW91cyBmZWF0dXJlcyBvZiBPeENhbWwgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcy4g
SWYgeW91J3JlDQogIGludGVyZXN0ZWQsIGNoZWNrIG91dCB0aGUgW1BSc10hDQoNCiAgT25lIHRo
aW5nIHdvcnRoIGZsYWdnaW5nOiBiZWNhdXNlIE94Q2FtbCBpcyBtb3ZpbmcgbXVjaCBmYXN0ZXIg
dGhhbg0KICB1cHN0cmVhbSBPQ2FtbCwgZWFjaCBvZG9jIHJlbGVhc2Ugd2lsbCBsaWtlbHkgc3Vw
cG9ydCBvbmx5IGEgc2luZ2xlDQogIE94Q2FtbCByZWxlYXNlLCBpbiBjb250cmFzdCB0byBvdXIg
dXN1YWwgcG9saWN5IG9mIHN1cHBvcnRpbmcgZXZlcnkNCiAgT0NhbWwgYmFjayB0byA0LjA4LiBJ
ZiB5b3UncmUgZG9jdW1lbnRpbmcgYW4gT3hDYW1sIHByb2plY3QsIHBsZWFzZQ0KICB1c2UgYSBt
YXRjaGVkIHBhaXIgb2Ygb2RvYyBhbmQgb3hjYW1sLWNvbXBpbGVyLg0KDQoNCiAgWyMxMzk5XSA8
aHR0cHM6Ly9naXRodWIuY29tL29jYW1sL29kb2MvaXNzdWVzLzEzOTk+DQoNCiAgW1BSc10gPGh0
dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vZG9jL3B1bGxzPg0KDQoNCkFkZGVkDQrilYzilYzilYzi
lYzilYwNCg0KICDigKIgUGVyc2lzdGVudCBMYVRlWCBtYWNyb3MgaW4gdGhlIEhUTUwvS2FUZVgg
YmFja2VuZCAoQGRsZXNicmUsDQogICAgWyMxMzkxXSkuDQogIOKAoiBUaGUgYG1hcmtkb3duLWdl
bmVyYXRlJyBjb21tYW5kIG5vdyBhY2NlcHRzIG11bHRpcGxlIGAub2RvY2wnIGZpbGVzDQogICAg
aW4gYSBzaW5nbGUgaW52b2NhdGlvbiwgc28geW91IG5vIGxvbmdlciBuZWVkIHRvIHdyYXAgaXQg
aW4gYSBzaGVsbA0KICAgIGxvb3AgKEBkYXZlc254LCBbIzEzODddKS4NCg0KDQpbIzEzOTFdIDxo
dHRwczovL2dpdGh1Yi5jb20vb2NhbWwvb2RvYy9pc3N1ZXMvMTM5MT4NCg0KWyMxMzg3XSA8aHR0
cHM6Ly9naXRodWIuY29tL29jYW1sL29kb2MvaXNzdWVzLzEzODc+DQoNCg0KQ2hhbmdlZCAvIEZp
eGVkDQrilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYwNCg0KICDi
gKIgRml4ZWQgdHdvIGxvbmctc3RhbmRpbmcgY29tcGlsZS10aW1lIGNyYXNoZXMsIFsjOTMwXSBh
bmQgIzEzODUNCiAgICAoQGpvbmx1ZGxhbSwgWyMxNDAwXSkuDQogIOKAoiBUaGUgTWFya2Rvd24g
YmFja2VuZCBub3cgYXNzdW1lcyBgb2NhbWwnIGFzIHRoZSBsYW5ndWFnZSBpZCBvbg0KICAgIGRl
Y2xhcmF0aW9ucywgYW5kIGNvbGxlY3RzIGNvZGUgc25pcHBldHMgaW50byBhIHNpbmdsZSBibG9j
ayB3aXRoDQogICAgY29tbWVudHMgcmF0aGVyIHRoYW4gc3BsaXR0aW5nIHZhcmlhbnRzL3JlY29y
ZHMgcGVyDQogICAgY29uc3RydWN0b3IvZmllbGQuDQogIOKAoiBVUkwgcmVtYXBwaW5nIG5vdyB3
b3JrcyBjb3JyZWN0bHkgZm9yIHBhZ2UgcmVmZXJlbmNlcyAoQGpvbmx1ZGxhbSwNCiAgICBbIzEz
OTVdKS4NCiAg4oCiIEluY3JlbWVudGFsIGJ1aWxkcyBubyBsb25nZXIgYnJlYWsgdW5kZXIgdGhl
IGNvbmRpdGlvbnMgZGVzY3JpYmVkIGluDQogICAgWyMxMzk2XSAoQGpvbmx1ZGxhbSwgWyMxNDAy
XSkuDQogIOKAoiBgLS13YXJuLWVycm9yJyBub3cgcmVsaWFibHkgcHJvbW90ZXMgYWxsIHdhcm5p
bmdzIHRvIGVycm9ycw0KICAgIChAam9ubHVkbGFtLCBbIzE0MDJdKS4NCiAg4oCiIFBvbHltb3Jw
aGljIGFyZ3VtZW50cyBhcmUgbm8gbG9uZ2VyIG1pc3NpbmcgdGhlaXIgcGFyZW50aGVzZXMNCiAg
ICAoQGFydC13LCBbIzE0MDRdKS4NCiAg4oCiIEZpeGVkIGEgcmVncmVzc2lvbiB0aGF0IGJyb2tl
IGRvY3MgZm9yIHBhY2thZ2VzIGRlcGVuZGluZyBvbiB+YmFzZQ0KICAgIH51bmRlciBPQ2FtbCA1
LjUuMCAoQGpvbmx1ZGxhbSwgWyMxNDI2XSwgWyMxNDI3XSkuDQogIOKAoiBGaXhlZCBhIHJlZ3Jl
c3Npb24gdGhhdCBicm9rZSBkb2NzIGZvciBwYWNrYWdlcyBkZXBlbmRpbmcgb24NCiAgICBgbWVy
bGluLWxpYicgKEBqb25sdWRsYW0sIFsjMTQyOV0sIFsjMTQzMF0pLg0KDQoNClsjOTMwXSA8aHR0
cHM6Ly9naXRodWIuY29tL29jYW1sL29kb2MvaXNzdWVzLzkzMD4NCg0KWyMxNDAwXSA8aHR0cHM6
Ly9naXRodWIuY29tL29jYW1sL29kb2MvaXNzdWVzLzE0MDA+DQoNClsjMTM5NV0gPGh0dHBzOi8v
Z2l0aHViLmNvbS9vY2FtbC9vZG9jL2lzc3Vlcy8xMzk1Pg0KDQpbIzEzOTZdIDxodHRwczovL2dp
dGh1Yi5jb20vb2NhbWwvb2RvYy9pc3N1ZXMvMTM5Nj4NCg0KWyMxNDAyXSA8aHR0cHM6Ly9naXRo
dWIuY29tL29jYW1sL29kb2MvaXNzdWVzLzE0MDI+DQoNClsjMTQwNF0gPGh0dHBzOi8vZ2l0aHVi
LmNvbS9vY2FtbC9vZG9jL2lzc3Vlcy8xNDA0Pg0KDQpbIzE0MjZdIDxodHRwczovL2dpdGh1Yi5j
b20vb2NhbWwvb2RvYy9pc3N1ZXMvMTQyNj4NCg0KWyMxNDI3XSA8aHR0cHM6Ly9naXRodWIuY29t
L29jYW1sL29kb2MvaXNzdWVzLzE0Mjc+DQoNClsjMTQyOV0gPGh0dHBzOi8vZ2l0aHViLmNvbS9v
Y2FtbC9vZG9jL2lzc3Vlcy8xNDI5Pg0KDQpbIzE0MzBdIDxodHRwczovL2dpdGh1Yi5jb20vb2Nh
bWwvb2RvYy9pc3N1ZXMvMTQzMD4NCg0KDQpJbnN0YWxsYXRpb24NCuKVjOKVjOKVjOKVjOKVjOKV
jOKVjOKVjOKVjOKVjOKVjOKVjA0KDQogIOKUjOKUgOKUgOKUgOKUgA0KICDilIIgb3BhbSB1cGRh
dGUNCiAg4pSCIG9wYW0gaW5zdGFsbCBvZG9jDQogIOKUlOKUgOKUgOKUgOKUgA0KDQoNClVzZQ0K
4pWM4pWM4pWMDQoNCiAgUGxlYXNlIHVzZSBbb2RvY19kcml2ZXJdIHRvIGJ1aWxkIGFuZCB0ZXN0
IHlvdXIgcGFja2FnZSdzIGRvY3MgbG9jYWxseQ0KICBhbmQgdG8gc2VlIGhvdyB0aGV5IHdpbGwg
bG9vayBvbiBvY2FtbC5vcmcuDQoNCiAgT2RpZyBhbmQgRHVuZSBjb250aW51ZSB0byB3b3JrIGFz
IGJlZm9yZSwgbm8gY2hhbmdlcyByZXF1aXJlZC4gRnVsbA0KICBzdXBwb3J0IGZvciBhbGwgb2Yg
dGhlIGZlYXR1cmVzIG9mIG9kb2MgMy54IGlzIGJlaW5nIHdvcmtlZCBvbiBpbg0KICBEdW5lLg0K
DQoNCltvZG9jX2RyaXZlcl0gPGh0dHBzOi8vb2NhbWwuZ2l0aHViLmlvL29kb2Mvb2RvYy1kcml2
ZXIvaW5kZXguaHRtbD4NCg0KDQpUaGFua3MNCuKVjOKVjOKVjOKVjOKVjOKVjA0KDQogIFRoYW5r
cyB0byBldmVyeW9uZSB3aG8gY29udHJpYnV0ZWQgY29kZSwgcmV2aWV3cywgYnVnIHJlcG9ydHMs
IGFuZA0KICB0ZXN0aW5nIGZvciB0aGlzIHJlbGVhc2U6IEBhcnQtdywgQGRhdmVzbngsIEBkbGVz
YnJlLCBAam9ubHVkbGFtLA0KICBAbHVrZW1hdXJlciwgQHBhbmdsZXNkLCBhbmQgQHh2dywgYW5k
IGFueW9uZSBlbHNlIEkndmUgZm9yZ290dGVuIQ0KDQogIEFzIGFsd2F5cywgcGxlYXNlIHJlcG9y
dCBhbnkgaXNzdWVzIG9uIFtnaXRodWJdLg0KDQoNCltnaXRodWJdIDxodHRwczovL2dpdGh1Yi5j
b20vb2NhbWwvb2RvYy9pc3N1ZXM+DQoNCg0KTGlzdCB5b3VyIG9wZW4gT0NhbWwgcG9zaXRpb25z
IG9uIHRoZSBPQ2FtbC5vcmcgam9iIGJvYXJkDQrilZDilZDilZDilZDilZDilZDilZDilZDilZDi
lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi
lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi
lZDilZDilZDilZDilZDilZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOg0KICA8aHR0cHM6Ly9k
aXNjdXNzLm9jYW1sLm9yZy90L2xpc3QteW91ci1vcGVuLW9jYW1sLXBvc2l0aW9ucy1vbi10aGUt
b2NhbWwtb3JnLWpvYi1ib2FyZC8xMTM3Ny8yND4NCg0KDQpDb250aW51bmlnIHRoaXMgdGhyZWFk
LCBEYW5pZWwgTGFtcGluZyBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU
gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU
gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU
gA0KDQogIFBsZWFzZSBjYW4gSSBwb3N0IHRoaXMgam9iIHRoYXQgd2UgYXJlIGhpcmluZyBmb3Iu
DQoNCiAg4oCiIHRpdGxlOiBTZW5pb3IgU3lzdGVtcyBTb2Z0d2FyZSBFbmdpbmVlcg0KICDigKIg
bGluazoNCiAgICA8aHR0cHM6Ly9jYXJlZXJzLmNsb3VkLmNvbS9qb2JzL3Nlbmlvci1zb2Z0d2Fy
ZS1lbmdpbmVlci14ZW5zZXJ2ZXItdG9vbHN0YWNrLXJlbW90ZS11bml0ZWQta2luZ2RvbT4NCiAg
4oCiIGxvY2F0aW9uczogUmVtb3RlLCBVbml0ZWQtS2luZ2RvbQ0KICDigKIgcHVibGljYXRpb25f
ZGF0ZTogMjAyNi0wNS0xNA0KICDigKIgY29tcGFueTogQ2xvdWQgU29mdHdhcmUgR3JvdXANCiAg
4oCiIGNvbXBhbnlfbG9nbzoNCiAgICA8aHR0cHM6Ly93d3cuY2xvdWQuY29tL21lZGlhXzFlNDBl
N2QwNDhmMDExN2Q0NTQzYzk0MGY5ZTc0MzNiNTQ5YzA4YTAzLnN2Zz4NCg0KDQpDYW1teSBTdG9y
aWVzOiBhIHNtYWxsIE9DYW1sIHdlYmNvbWljIGV4cGVyaW1lbnQg8J+Qqw0K4pWQ4pWQ4pWQ4pWQ
4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ
4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ
4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZToNCiAgPGh0dHBzOi8vZGlz
Y3Vzcy5vY2FtbC5vcmcvdC9jYW1teS1zdG9yaWVzLWEtc21hbGwtb2NhbWwtd2ViY29taWMtZXhw
ZXJpbWVudC8xODEyOC8xPg0KDQoNClJhbWlybyBDaGVjYS1HYXJjaWEgYW5ub3VuY2VkDQrilIDi
lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi
lIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICBIaSBldmVyeW9uZSwNCg0KICBJJ3ZlIGJl
ZW4gZXhwZXJpbWVudGluZyBsYXRlbHkgd2l0aCB3YXlzIHRvIG1ha2UgdGVjaG5pY2FsIHRvcGlj
cyBmZWVsDQogIGEgYml0IG1vcmUgdmlzdWFsIGFuZCBhcHByb2FjaGFibGUsIGFuZCBzb21laG93
IHRoYXQgZW5kZWQgdXAgdHVybmluZw0KICBpbnRvIGEgc21hbGwgaG9iYnkgcHJvamVjdCBjYWxs
ZWQgQ2FtbXkgU3Rvcmllcy4NCg0KICBJdCdzIGEgY29sbGVjdGlvbiBvZiBzaG9ydCBjb21pY3Mg
YWJvdXQgT0NhbWwgZmVhdHVyaW5nIGEgY2FtZWwgbWFzY290DQogICgiQ2FtbXkiKSB0b2dldGhl
ciB3aXRoIHNvbWUgZmFtaWxpYXIgZmFjZXMgZnJvbSB0aGUgZWNvc3lzdGVtIGxpa2UNCiAgRHVu
ZSwgT1BBTSwgTWVybGluIGFuZCBPZG9jIGFzIGNoYXJhY3RlcnMgYW5kIHRlYW1tYXRlcy4NCg0K
ICBUaGUgaWRlYSBpcyBub3QgdG8gbWFrZSBmb3JtYWwgdHV0b3JpYWxzIG9yIGRvY3VtZW50YXRp
b24sIGJ1dCByYXRoZXINCiAgcGxheWZ1bCB2aXN1YWwgZXhwbGFuYXRpb25zIG9mIGNvbmNlcHRz
IGxpa2UgdmFyaWFudHMsIGZ1bmN0b3JzLA0KICBjb25jdXJyZW5jeSwgRHVuZSBzdGFuemFzLCBP
UEFNIHN3aXRjaGVzLCBhbmQgb3RoZXIgT0NhbWwgdG9waWNzIEkNCiAgZm91bmQgaW50ZXJlc3Rp
bmcgd2hpbGUgbGVhcm5pbmcgYW5kIGV4cGxvcmluZyB0aGUgZWNvc3lzdGVtLg0KDQogIE1vc3Qg
b2YgdGhlIGltYWdlcyB3ZXJlIGNyZWF0ZWQgdGhyb3VnaCBsb3RzIG9mIGl0ZXJhdGlvbiB3aXRo
IEFJDQogIGltYWdlIGdlbmVyYXRpb24gdG9vbHMuIFNvbWV0aW1lcyB0aGUgcmVzdWx0cyBhcmUg
c3VycHJpc2luZ2x5IGdvb2QsDQogIHNvbWV0aW1lcyB0aGUgdGV4dCBiZWNvbWVzIG5vbnNlbnNl
LCBhbmQgb2NjYXNpb25hbGx5IHJhbmRvbSBoZWFydHMNCiAgYXBwZWFyIGZvciBubyByZWFzb24u
IEkndmUgYWxzbyBrZXB0IG1hbnkgb2YgdGhlIGxlZnRvdmVyIGRyYWZ0cw0KICB2aXNpYmxlIGJl
Y2F1c2UgSSB0aG91Z2h0IHRoZSBwcm9jZXNzIGl0c2VsZiB3YXMgZnVubnkgYW5kDQogIGludGVy
ZXN0aW5nLg0KDQogIEZ1bmN0aW9uYWwgcHJvZ3JhbW1pbmcgY29tbXVuaXRpZXMgdGVuZCB0byBo
YXZlIGEgcmVwdXRhdGlvbiBmb3IgYmVpbmcNCiAgcXVpdGUgdGVjaG5pY2FsIGFuZCBzZXJpb3Vz
LCBhbmQgSSBzb21ldGltZXMgZmVlbCB0aGF0IGEgbW9yZSB2aXN1YWwNCiAgYW5kIGNvbW11bml0
eS1kcml2ZW4gYXBwcm9hY2ggY291bGQgaGVscCBtYWtlIHNvbWUgb2YgdGhlc2UgaWRlYXMgZmVl
bA0KICBhIGJpdCBtb3JlIGFwcHJvYWNoYWJsZS4gU28gdGhpcyBpcyBtb3N0bHkgYSBzbWFsbCBl
eHBlcmltZW50IGluIHRoYXQNCiAgZGlyZWN0aW9uLg0KDQogIEZlZWRiYWNrIGlzIHZlcnkgd2Vs
Y29tZSwgZXNwZWNpYWxseSBzaW5jZSB0aGVyZSBhcmUgcHJvYmFibHkNCiAgdGVjaG5pY2FsIGlu
YWNjdXJhY2llcyBvciBtaXNsZWFkaW5nIGlkZWFzIGhlcmUgYW5kIHRoZXJlLiBTdWdnZXN0aW9u
cw0KICBmb3IgZnV0dXJlIHRvcGljcywgZm9ybWF0cyBvciBjb25jZXB0cyBhcmUgYWxzbyBhcHBy
ZWNpYXRlZC4NCg0KICBBdCB0aGUgbW9tZW50LCBtb3N0IHBhZ2VzIGFsc28gaW5jbHVkZSBzbWFs
bCBub3Rlcywgc2lkZSBjb21tZW50cyBvcg0KICBzaG9ydCBzdG9yaWVzIGFib3V0IGhvdyBlYWNo
IGNvbWljIHdhcyBjcmVhdGVkLCBzaW5jZSB0aGUgcHJvamVjdCBpcw0KICBzdGlsbCB2ZXJ5IG11
Y2ggaW4gYSBkaXNjdXNzaW9uIGFuZCBleHBlcmltZW50YXRpb24gcGhhc2UuDQoNCiAg4oCiIPCf
lJcgTGl2ZTogPGh0dHBzOi8vcmNoZy5naXRodWIuaW8vY2FtbXkvPg0KICDigKIg8J+UlyBSZXBv
OiA8aHR0cHM6Ly9naXRodWIuY29tL1JDSEcvY2FtbXk+DQoNCiAgSG9wZSB5b3UgZW5qb3kgaXQg
8J+Qqw0KDQoNCk1sRnJvbnRfUHJvZ3Jlc3NaaWcgLSBaaWctY29tcGF0aWJsZSBwcm9ncmVzcyB0
cmVlcw0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ
4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ
4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2
ZToNCiAgPGh0dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9hbm4tbWxmcm9udC1wcm9ncmVzc3pp
Zy16aWctY29tcGF0aWJsZS1wcm9ncmVzcy10cmVlcy8xODE0Mi8xPg0KDQoNCmpiZWNrZm9yZCBh
bm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU
gOKUgOKUgOKUgA0KDQogIEkgYW0gcGxlYXNlZCB0byBhbm5vdW5jZSBNbEZyb250X1Byb2dyZXNz
WmlnLiBJbnN0YWxsIGluc3RydWN0aW9ucywNCiAgZG9jcyBhbmQgZXhhbXBsZXMgZnVydGhlciBi
ZWxvdy4NCg0KICBUTERSOiBJdCByZW5kZXJzIGEgcHJvZ3Jlc3MgdHJlZSAoYSBnZW5lcmFsaXph
dGlvbiBvZiBhIHByb2dyZXNzDQogIGJhcikuIFRoZSBraWxsZXIgZmVhdHVyZSBpcyByZW5kZXJp
bmcgYSBzaW5nbGUgcHJvZ3Jlc3MgdHJlZSB3aXRoDQogIHByb2dyZXNzIGRhdGEgZmVkIGZyb20g
Y29tcGF0aWJsZSBjaGlsZC9ncmFuZGNoaWxkL2V0YyBwcm9jZXNzZXMgKHNlZQ0KICAybmQgYW5k
IDNyZCBleGFtcGxlcykuIE1sRnJvbnRfUHJvZ3Jlc3NaaWcgaXMgYSBwb3J0IG9mIFppZydzDQog
IGBwcm9ncmVzcycgc3RhbmRhcmQgbGlicmFyeSwgd2l0aCBpbXByb3ZlbWVudHMgZm9yIFdpbmRv
d3MgYW5kDQogIHByb3RvY29sIGNvbXBhdGliaWxpdHkgd2l0aCB6aWcgcHJvY2Vzc2VzLiBUaGUg
bW90aXZhdGlvbiBhbmQNCiAgYWxnb3JpdGhtIGlzIGF0DQogIDxodHRwczovL2FuZHJld2tlbGxl
eS5tZS9wb3N0L3ppZy1uZXctY2xpLXByb2dyZXNzLWJhci1leHBsYWluZWQuaHRtbD4uIFRoZQ0K
ICBwb3J0IHdhcyBpbml0aWFsbHkgQUktYXNzaXN0ZWQ7IHByb21wdHMgZm9yIHByb2dyZXNzLnpp
ZyBbc3RhcnQgYXQNCiAgbGluZSAxIGhlcmVdIGFuZCBDYWJpbmV0IChnb3Zlcm5tZW50KSBkYXRh
IFtzdGFydHMgb24gbGluZSAyMTggaGVyZV0uDQoNCg0KW3N0YXJ0IGF0IGxpbmUgMSBoZXJlXQ0K
PGh0dHBzOi8vZ2l0bGFiLmNvbS9ka21sL2J1aWxkLXRvb2xzL01sRnJvbnQvLS9ibG9iL2I4Nzg3
ZjM0NTIzOGJmZTEzMWM0ZjkyYmJlMTQxYzk2Nzg4YzNiMWEvc3JjL01sRnJvbnRfUHJvZ3Jlc3Na
aWcvWmlnLm1sPg0KDQpbc3RhcnRzIG9uIGxpbmUgMjE4IGhlcmVdDQo8aHR0cHM6Ly9naXRsYWIu
Y29tL2RrbWwvYnVpbGQtdG9vbHMvTWxGcm9udC8tL2Jsb2IvYjg3ODdmMzQ1MjM4YmZlMTMxYzRm
OTJiYmUxNDFjOTY3ODhjM2IxYS90ZXN0cy9Ea1plcm9fUnVudGltZUMvU3ludGhldGljRGVtb0Qu
bWwjTDIxOD4NCg0KRXhhbXBsZXM6IE5vcm1hbCBQcm9ncmVzcyBUcmVlDQrilYzilYzilYzilYzi
lYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzi
lYzilYzilYzilYzilYzilYzilYwNCg0KICDilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHi
lIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHi
lIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHi
lIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHi
lIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIENCiAgIFdoYXQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFuaW1hdGlvbiBMaW5rICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICANCiAg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA
4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA
4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA
4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA
4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQogICBDYWJpbmV0
IG9mZmljaWFscyBzaW5jZSAxOTc1ICAgICAgICAgICBbaHR0cHM6Ly9hc2NpaW5lbWEub3JnL2Ev
TldjMnZiUGVSUXVPeUdBYV0gDQogICBPQ2FtbCBzcGF3bnMgYSB6aWcgYnVpbGQgICAgICAgICAg
ICAgICBbaHR0cHM6Ly9hc2NpaW5lbWEub3JnL2EvVHU5b2ZySDNla0tVQ3lMa10gDQogICBPQ2Ft
bCBzcGF3bnMgT0NhbWwgd2hpY2ggc3Bhd25zIE9DYW1sICBbaHR0cHM6Ly9hc2NpaW5lbWEub3Jn
L2EvVGR0dDUyaVFxU3NJWGNrdV0gDQogIOKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKU
geKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKU
geKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKU
geKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKU
geKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgQ0KDQogIC9aaWcg
c2VlbXMgdG8gaGF2ZSBhIGJ1ZywgYXQgbGVhc3Qgb24gV2luZG93cywgd2hlcmUgYSB6aWcgcGFy
ZW50DQogIGNhbid0IGNvbGxlY3QgZGF0YSBmcm9tIGFuIE9DYW1sL3ppZyBjaGlsZC4gVGhhdCBp
cyB3aHkgdGhlcmUgYXJlIG5vDQogICJ6aWcgc3Bhd25zIE9DYW1sIiBleGFtcGxlcy4vDQoNCg0K
W2h0dHBzOi8vYXNjaWluZW1hLm9yZy9hL05XYzJ2YlBlUlF1T3lHQWFdDQo8aHR0cHM6Ly9hc2Np
aW5lbWEub3JnL2EvTldjMnZiUGVSUXVPeUdBYT4NCg0KW2h0dHBzOi8vYXNjaWluZW1hLm9yZy9h
L1R1OW9mckgzZWtLVUN5TGtdDQo8aHR0cHM6Ly9hc2NpaW5lbWEub3JnL2EvVHU5b2ZySDNla0tV
Q3lMaz4NCg0KW2h0dHBzOi8vYXNjaWluZW1hLm9yZy9hL1RkdHQ1MmlRcVNzSVhja3VdDQo8aHR0
cHM6Ly9hc2NpaW5lbWEub3JnL2EvVGR0dDUyaVFxU3NJWGNrdT4NCg0KDQpFeGFtcGxlOiBQZXJm
b3JtYW5jZSBNb25pdG9yaW5nDQrilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzi
lYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYwN
Cg0KICBIZXJlIGlzIGEgc25hcHNob3Qgb2YgbXkgc2luZ2xlLXRocmVhZGVkIGJ1aWxkIHN5c3Rl
bS4gVGhlIGludGVyZXN0aW5nDQogIHBhcnRzIG9mIHRoZSBjYWxsIHN0YWNrIGFyZSBhZGRlZCB0
byB0aGUgcHJvZ3Jlc3MgdHJlZSAoYmFzaWNhbGx5DQogIGBzdGFydCcgYW5kIGBlbmRfJyBhcm91
bmQgYSBmdW5jdGlvbik6DQoNCiAg4pSM4pSA4pSA4pSA4pSADQogIOKUgiAkIC4vZGswIGRpc3Ry
aWJ1dGUgQ29tbW9uc0Jhc2VfU3RkLWRpc3Qtd2luMzIgLS1saWJyYXJ5ICdDb21tb25zQmFzZV9T
dGRAMi41Ljk5OTkxMTEyMjIzMycgZGlzdC13aW4zMi51DQogIOKUgiANCiAg4pSCIFtzaWduaWZ5
XSBOZXcgYnVpbGQga2V5IHBhaXIgaW4gdC9rL2J1aWxkLnB1YiBhbmQgdC9rL2J1aWxkLnNlYyAu
Li4NCiAg4pSCIFtzaWduaWZ5XSBEaXN0cmlidXRlIGtleSBwYWlyIGFtb25nIHRydXN0ZWQgY293
b3JrZXJzIG9ubHkhDQogIOKUgiDilrowLzJdIGRpc3RyaWJ1dGUgQ29tbW9uc0Jhc2VfU3RkLWRp
c3Qtd2luMzINCiAg4pSCICAgIOKUlOKUgCBbMi81XSBwcmVwYXJlIGRpc3RyaWJ1dGlvbg0KICDi
lIIgICAgICAg4pSU4pSAIFsyOS8zMl0gZ2V0LW9iamVjdCBDb21tb25zQmFzZV9TdGQuVG95Ym94
QDAuLi4NCiAg4pSCICAgICAgICAgIOKUlOKUgCBkbCB0b3lib3gtYWFyY2g2NEB0b3lib3ggc3og
ODA2Sw0KICDilIIgICAgICAgICAgICAg4pSU4pSAIGxhbmRsZXkubmV0L3RveWJveC4uLm9hZHMv
YmluYXJpZXMvMC44LjkNCiAg4pSCICAgICAgICAgICAgICAgIOKUlOKUgCBbMC8xXSBNaUIgZG93
bmxvYWRlZA0KICDilJTilIDilIDilIDilIANCg0KICBCeSBzZWVpbmcgdGhlICLilroiIHRyZWUg
bm90IHVwZGF0ZSBmb3IgbW9yZSB0aGFuIDEwIHNlY29uZHMsIEkgY291bGQNCiAgc2VlIHRoYXQg
ZG93bmxvYWRpbmcgYSBzbWFsbCA4MDZLIGZpbGUgZnJvbSB0aGUgYGxhbmRsZXkubmV0L3RveWJv
eCcNCiAgd2Vic2VydmVyIHdhcyBraWxsaW5nIHRoZSBwZXJmb3JtYW5jZS4NCiAgICAgICAgSXQg
aXMgZWFzeSB0byBpZGVudGlmeSBwZXJmIGJvdHRsZW5lY2tzIHRoYXQgbGFzdCBsb25nZXINCiAg
ICAgICAgdGhhbiAwLjUgc2Vjb25kcy4NCg0KDQpQYWNrYWdlcw0K4pWM4pWM4pWM4pWM4pWM4pWM
4pWM4pWMDQoNCiAg4oCiIE1sRnJvbnRfUHJvZ3Jlc3M6IFRoZSBBUEkgd2hpY2ggY2FuIGJlIHVz
ZWQgd2l0aCBvbmUgb2YgZm91cg0KICAgIGJhY2tlbmRzLiBJbmNsdWRlcyB0aGUgInNpbGVudCIg
YW5kICJwbGFpbiIgYmFja2VuZHMuDQogIOKAoiBNbEZyb250X1Byb2dyZXNzWmlnOiBUaGUgemln
IGNvbXBhdGlibGUgYmFja2VuZCAoaGlnaCByZWZyZXNoIHJhdGUpDQogIOKAoiBNbEZyb250X1By
b2dyZXNzUGVyaW9kOiBBIGJhY2tlbmQgd2hpY2ggZHVtcHMgdGhlIHByb2dyZXNzIHRyZWUNCiAg
ICBwZXJpb2RpY2FsbHkgdG8gdGhlIGNvbnNvbGUuDQoNCiAgRG9jcyBhcmUgYXQgW2h0dHBzOi8v
ZGttbC5naXRsYWIuaW8vYnVpbGQtdG9vbHMvTWxGcm9udC9dLg0KDQoNCltodHRwczovL2RrbWwu
Z2l0bGFiLmlvL2J1aWxkLXRvb2xzL01sRnJvbnQvXQ0KPGh0dHBzOi8vZGttbC5naXRsYWIuaW8v
YnVpbGQtdG9vbHMvTWxGcm9udC8+DQoNCg0KSW5zdGFsbGluZyBJdA0K4pWM4pWM4pWM4pWM4pWM
4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWMDQoNCiAgSSBoYXZlIGl0IGluIHRoZSBvcGFtIHF1ZXVl
DQogIChbaHR0cHM6Ly9naXRodWIuY29tL29jYW1sL29wYW0tcmVwb3NpdG9yeS9wdWxsLzI5OTE4
XSkgYW5kIGRvbid0DQogIGV4cGVjdCBpdCB0byBiZSByZWxlYXNlZCB1bnRpbCB0aGUgQUkgdGhy
ZWFkIGlzIHJlc29sdmVkLiBJbnN0YWxsIHRoZQ0KICBibGVlZGluZyBlZGdlIHdpdGg6DQoNCiAg
4pSM4pSA4pSA4pSA4pSADQogIOKUgiBmb3IgcGtnIGluIE1sRnJvbnRfUHJvZ3Jlc3MgTWxGcm9u
dF9Db3JlIE1sRnJvbnRfTHVhIE1sRnJvbnRfWmlwRmlsZSBVbmlmaWVkU2NyaXB0X1N0ZCBNbEZy
b250X1RodW5rIE1sRnJvbnRfQ29uc29sZSBNbEZyb250X1Byb2dyZXNzWmlnOyBkbw0KICDilIIg
ICBvcGFtIHBpbiBhZGQgJHBrZyBodHRwczovL2dpdGxhYi5jb20vZGttbC9idWlsZC10b29scy9N
bEZyb250Ly0vcmVsZWFzZXMvcGVybWFsaW5rL2xhdGVzdC9kb3dubG9hZHMvTWxGcm9udC50YXIu
Z3oNCiAg4pSCIGRvbmUNCiAg4pSU4pSA4pSA4pSA4pSADQoNCiAgKEV2ZW4gdGhvdWdoIEkgZG9j
dW1lbnQgIkFJIiBpbiBhIGNvdXBsZSBmaWxlcywgSSBkbyBpdCBmb3IgbXkgb3duDQogIGJlbmVm
aXQsIGFwcGx5IGl0IG5hcnJvd2x5LCBhbmQga2VlcCBpdCB1bmRlciBteSBjb250cm9sLiBBbW9u
ZyBvdGhlcg0KICB0aGluZ3MsIEkgY2FuJ3QgaW1hZ2luZSB0aGVyZSBhcmUgbWFueSAoQW1lcmlj
YW4pIGF0dG9ybmV5cyB3aG8gd291bGQNCiAgc2F5IGl0IGlzIHdpc2UgZm9yIG1lIHRvIHByb2Fj
dGl2ZWx5IGFuZCBxdWFzaS1wZXJtYW5lbnRseSBsYWJlbA0KICBwYWNrYWdlcyBhcyAiQUkgYXNz
aXN0ZWQvZXRjLiIsIHNvIEknbGwga2VlcCBteSBwYWNrYWdlcyBvdXQgb2YgdGhlDQogIG9wYW0g
cmVwb3NpdG9yeSBpZiB0aGF0IGJlY29tZXMgYSBuZXcgcG9saWN5LikNCg0KICBFbmpveSENCg0K
DQpbaHR0cHM6Ly9naXRodWIuY29tL29jYW1sL29wYW0tcmVwb3NpdG9yeS9wdWxsLzI5OTE4XQ0K
PGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vcGFtLXJlcG9zaXRvcnkvcHVsbC8yOTkxOD4NCg0K
DQpsb28gLSBsdWEgb2Ygb2NhbWwNCuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV
kOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6IDxodHRwczovL2Rpc2N1c3Mub2NhbWwu
b3JnL3QvYW5uLWxvby1sdWEtb2Ytb2NhbWwvMTgxNDMvMT4NCg0KDQpCZW4gYW5ub3VuY2VkDQri
lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICBIaQ0KDQogIExpa2Ug
bWVudGlvbmVkIGluIHRoZSB0aXRsZSB0aGlzIGNvbXBpbGVzIE9jYW1sIChCeXRlY29kZSkgaW50
byBMdWENCiAgKGx1YTUuMSkuIFRoaXMgcHJvamVjdCBpcyBhaSBnZW5lcmF0ZWQsIEkgdHJpZWQg
dG8gZnVsbHkgZGlzY2xvc2UgdGhhdA0KICB3aXRoIHRoZSBtZXRob2RzIGRlc2NyaWJlZCBpbiB0
aGUgcHJvamVjdCBvY2FtbC1haS1kaXNsb3N1cmU6DQoNCiAgPGh0dHBzOi8vZ2l0aHViLmNvbS9t
YWx0YXNlYS9sdWFfb2Zfb2NhbWw+DQoNCg0KT2xkIENXTg0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ
DQoNCiAgSWYgeW91IGhhcHBlbiB0byBtaXNzIGEgQ1dOLCB5b3UgY2FuIFtzZW5kIG1lIGEgbWVz
c2FnZV0gYW5kIEknbGwgbWFpbA0KICBpdCB0byB5b3UsIG9yIGdvIHRha2UgYSBsb29rIGF0IFt0
aGUgYXJjaGl2ZV0gb3IgdGhlIFtSU1MgZmVlZCBvZiB0aGUNCiAgYXJjaGl2ZXNdLg0KDQogIElm
IHlvdSBhbHNvIHdpc2ggdG8gcmVjZWl2ZSBpdCBldmVyeSB3ZWVrIGJ5IG1haWwsIHlvdSBtYXkg
c3Vic2NyaWJlDQogIHRvIHRoZSBbY2FtbC1saXN0XS4NCg0KICBbQWxhbiBTY2htaXR0XQ0KDQoN
CltzZW5kIG1lIGEgbWVzc2FnZV0gPG1haWx0bzphbGFuLnNjaG1pdHRAcG9seXRlY2huaXF1ZS5v
cmc+DQoNClt0aGUgYXJjaGl2ZV0gPGh0dHBzOi8vYWxhbi5wZXRpdGVwb21tZS5uZXQvY3duLz4N
Cg0KW1JTUyBmZWVkIG9mIHRoZSBhcmNoaXZlc10gPGh0dHBzOi8vYWxhbi5wZXRpdGVwb21tZS5u
ZXQvY3duL2N3bi5yc3M+DQoNCltjYW1sLWxpc3RdIDxodHRwczovL3N5bXBhLmlucmlhLmZyL3N5
bXBhL2luZm8vY2FtbC1saXN0Pg0KDQpbQWxhbiBTY2htaXR0XSA8aHR0cHM6Ly9hbGFuLnBldGl0
ZXBvbW1lLm5ldC8+DQoNCg==
--==-=-=
Content-Type: text/html; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
<?xml version=3D"1.0" encoding=3D"utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns=3D"http://www.w3.org/1999/xhtml" lang=3D"en" xml:lang=3D"en">
<head>
<!-- 2026-05-19 Tue 10:51 -->
<meta http-equiv=3D"Content-Type" content=3D"text/html;charset=3Dutf-8" />
<meta name=3D"viewport" content=3D"width=3Ddevice-width, initial-scale=3D1"=
/>
<title>OCaml Weekly News</title>
<meta name=3D"generator" content=3D"Org Mode" />
<style type=3D"text/css">
#content { max-width: 60em; margin: auto; }
.title { text-align: center;
margin-bottom: .2em; }
.subtitle { text-align: center;
font-size: medium;
font-weight: bold;
margin-top:0; }
.todo { font-family: monospace; color: red; }
.done { font-family: monospace; color: green; }
.priority { font-family: monospace; color: orange; }
.tag { background-color: #eee; font-family: monospace;
padding: 2px; font-size: 80%; font-weight: normal; }
.timestamp { color: #bebebe; }
.timestamp-kwd { color: #5f9ea0; }
.org-right { margin-left: auto; margin-right: 0px; text-align: right; }
.org-left { margin-left: 0px; margin-right: auto; text-align: left; }
.org-center { margin-left: auto; margin-right: auto; text-align: center; }
.underline { text-decoration: underline; }
#postamble p, #preamble p { font-size: 90%; margin: .2em; }
p.verse { margin-left: 3%; }
pre {
border: 1px solid #e6e6e6;
border-radius: 3px;
background-color: #f2f2f2;
padding: 8pt;
font-family: monospace;
overflow: auto;
margin: 1.2em;
}
pre.src {
position: relative;
overflow: auto;
}
pre.src:before {
display: none;
position: absolute;
top: -8px;
right: 12px;
padding: 3px;
color: #555;
background-color: #f2f2f299;
}
pre.src:hover:before { display: inline; margin-top: 14px;}
/* Languages per Org manual */
pre.src-asymptote:before { content: 'Asymptote'; }
pre.src-awk:before { content: 'Awk'; }
pre.src-authinfo::before { content: 'Authinfo'; }
pre.src-c:before { content: 'C'; }
pre.src-C:before { content: 'C'; }
/* pre.src-C++ doesn't work in CSS */
pre.src-clojure:before { content: 'Clojure'; }
pre.src-css:before { content: 'CSS'; }
pre.src-D:before { content: 'D'; }
pre.src-ditaa:before { content: 'ditaa'; }
pre.src-dot:before { content: 'Graphviz'; }
pre.src-calc:before { content: 'Emacs Calc'; }
pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
pre.src-fortran:before { content: 'Fortran'; }
pre.src-gnuplot:before { content: 'gnuplot'; }
pre.src-haskell:before { content: 'Haskell'; }
pre.src-hledger:before { content: 'hledger'; }
pre.src-java:before { content: 'Java'; }
pre.src-js:before { content: 'JavaScript'; }
pre.src-latex:before { content: 'LaTeX'; }
pre.src-ledger:before { content: 'Ledger'; }
pre.src-lisp:before { content: 'Lisp'; }
pre.src-lilypond:before { content: 'Lilypond'; }
pre.src-lua:before { content: 'Lua'; }
pre.src-matlab:before { content: 'MATLAB'; }
pre.src-mscgen:before { content: 'Mscgen'; }
pre.src-ocaml:before { content: 'Objective Caml'; }
pre.src-octave:before { content: 'Octave'; }
pre.src-org:before { content: 'Org mode'; }
pre.src-oz:before { content: 'OZ'; }
pre.src-plantuml:before { content: 'Plantuml'; }
pre.src-processing:before { content: 'Processing.js'; }
pre.src-python:before { content: 'Python'; }
pre.src-R:before { content: 'R'; }
pre.src-ruby:before { content: 'Ruby'; }
pre.src-sass:before { content: 'Sass'; }
pre.src-scheme:before { content: 'Scheme'; }
pre.src-screen:before { content: 'Gnu Screen'; }
pre.src-sed:before { content: 'Sed'; }
pre.src-sh:before { content: 'shell'; }
pre.src-sql:before { content: 'SQL'; }
pre.src-sqlite:before { content: 'SQLite'; }
/* additional languages in org.el's org-babel-load-languages alist */
pre.src-forth:before { content: 'Forth'; }
pre.src-io:before { content: 'IO'; }
pre.src-J:before { content: 'J'; }
pre.src-makefile:before { content: 'Makefile'; }
pre.src-maxima:before { content: 'Maxima'; }
pre.src-perl:before { content: 'Perl'; }
pre.src-picolisp:before { content: 'Pico Lisp'; }
pre.src-scala:before { content: 'Scala'; }
pre.src-shell:before { content: 'Shell Script'; }
pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
/* additional language identifiers per "defun org-babel-execute"
in ob-*.el */
pre.src-cpp:before { content: 'C++'; }
pre.src-abc:before { content: 'ABC'; }
pre.src-coq:before { content: 'Coq'; }
pre.src-groovy:before { content: 'Groovy'; }
/* additional language identifiers from org-babel-shell-names in
ob-shell.el: ob-shell is the only babel language using a lambda to put
the execution function name together. */
pre.src-bash:before { content: 'bash'; }
pre.src-csh:before { content: 'csh'; }
pre.src-ash:before { content: 'ash'; }
pre.src-dash:before { content: 'dash'; }
pre.src-ksh:before { content: 'ksh'; }
pre.src-mksh:before { content: 'mksh'; }
pre.src-posh:before { content: 'posh'; }
/* Additional Emacs modes also supported by the LaTeX listings package */
pre.src-ada:before { content: 'Ada'; }
pre.src-asm:before { content: 'Assembler'; }
pre.src-caml:before { content: 'Caml'; }
pre.src-delphi:before { content: 'Delphi'; }
pre.src-html:before { content: 'HTML'; }
pre.src-idl:before { content: 'IDL'; }
pre.src-mercury:before { content: 'Mercury'; }
pre.src-metapost:before { content: 'MetaPost'; }
pre.src-modula-2:before { content: 'Modula-2'; }
pre.src-pascal:before { content: 'Pascal'; }
pre.src-ps:before { content: 'PostScript'; }
pre.src-prolog:before { content: 'Prolog'; }
pre.src-simula:before { content: 'Simula'; }
pre.src-tcl:before { content: 'tcl'; }
pre.src-tex:before { content: 'TeX'; }
pre.src-plain-tex:before { content: 'Plain TeX'; }
pre.src-verilog:before { content: 'Verilog'; }
pre.src-vhdl:before { content: 'VHDL'; }
pre.src-xml:before { content: 'XML'; }
pre.src-nxml:before { content: 'XML'; }
/* add a generic configuration mode; LaTeX export needs an additional
(add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
pre.src-conf:before { content: 'Configuration File'; }
table { border-collapse:collapse; }
caption.t-above { caption-side: top; }
caption.t-bottom { caption-side: bottom; }
td, th { vertical-align:top; }
th.org-right { text-align: center; }
th.org-left { text-align: center; }
th.org-center { text-align: center; }
td.org-right { text-align: right; }
td.org-left { text-align: left; }
td.org-center { text-align: center; }
dt { font-weight: bold; }
.footpara { display: inline; }
.footdef { margin-bottom: 1em; }
.figure { padding: 1em; }
.figure p { text-align: center; }
.equation-container {
display: table;
text-align: center;
width: 100%;
}
.equation {
vertical-align: middle;
}
.equation-label {
display: table-cell;
text-align: right;
vertical-align: middle;
}
.inlinetask {
padding: 10px;
border: 2px solid gray;
margin: 10px;
background: #ffffcc;
}
#org-div-home-and-up
{ text-align: right; font-size: 70%; white-space: nowrap; }
textarea { overflow-x: auto; }
.linenr {
font-size: smaller;
@supports (content: attr(data-linenr)) {
visibility: hidden;
&::before { content: attr(data-linenr); visibility: visible; }
}
}
.code-highlighted { background-color: #ffff00; }
.org-info-js_info-navigation { border-style: none; }
#org-info-js_console-label
{ font-size: 10px; font-weight: bold; white-space: nowrap; }
.org-info-js_search-highlight
{ background-color: #ffff00; color: #000000; font-weight: bold; }
.org-svg { }
</style>
<style type=3D"text/css">#table-of-contents h2 { display: none } .title { d=
isplay: none } .authorname { text-align: right }</style>
<style type=3D"text/css">.outline-2 {border-top: 1px solid black;}</style>
</head>
<body>
<div id=3D"content" class=3D"content">
<h1 class=3D"title">OCaml Weekly News</h1>
<p>
<a href=3D"https://alan.petitepomme.net/cwn/2026.05.12.html">Previous Week<=
/a> <a href=3D"https://alan.petitepomme.net/cwn/index.html">Up</a> <a href=
=3D"https://alan.petitepomme.net/cwn/2026.05.26.html">Next Week</a>
</p>
<p>
Hello
</p>
<p>
Here is the latest OCaml Weekly News, for the week of May 12 to 19, 2026.
</p>
<div id=3D"table-of-contents" role=3D"doc-toc">
<h2>Table of Contents</h2>
<div id=3D"text-table-of-contents" role=3D"doc-toc">
<ul>
<li><a href=3D"#1">hotseat Squava (a tiny LablGtk2 demo)</a></li>
<li><a href=3D"#2">Request for comments: What to do with opam packages that=
have known security vulnerabilities</a></li>
<li><a href=3D"#3">odoc 3.2.1 release</a></li>
<li><a href=3D"#4">List your open OCaml positions on the OCaml.org job boar=
d</a></li>
<li><a href=3D"#5">Cammy Stories: a small OCaml webcomic experiment =F0=9F=
=90=AB</a></li>
<li><a href=3D"#6">MlFront_ProgressZig - Zig-compatible progress trees</a><=
/li>
<li><a href=3D"#7">loo - lua of ocaml</a></li>
<li><a href=3D"#org70421f3">Old CWN</a></li>
</ul>
</div>
</div>
<div id=3D"outline-container-1" class=3D"outline-2">
<h2 id=3D"1">hotseat Squava (a tiny LablGtk2 demo)</h2>
<div class=3D"outline-text-2" id=3D"text-1">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/ann-hotseat-squava-a-tiny-l=
ablgtk2-demo/17957/2">https://discuss.ocaml.org/t/ann-hotseat-squava-a-tiny=
-lablgtk2-demo/17957/2</a>
</p>
</div>
<div id=3D"outline-container-orgce61f33" class=3D"outline-3">
<h3 id=3D"orgce61f33">Continuing this thread, Damien Guichard announced</h3>
<div class=3D"outline-text-3" id=3D"text-orgce61f33">
<p>
Newer 1.2 version, now detects eventual draw games.
</p>
<p>
<a href=3D"https://pastebin.com/DjZ03yPa">https://pastebin.com/DjZ03yPa</a>
</p>
</div>
</div>
</div>
<div id=3D"outline-container-2" class=3D"outline-2">
<h2 id=3D"2">Request for comments: What to do with opam packages that have =
known security vulnerabilities</h2>
<div class=3D"outline-text-2" id=3D"text-2">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/request-for-comments-what-t=
o-do-with-opam-packages-that-have-known-security-vulnerabilities/18087/1">h=
ttps://discuss.ocaml.org/t/request-for-comments-what-to-do-with-opam-packag=
es-that-have-known-security-vulnerabilities/18087/1</a>
</p>
</div>
<div id=3D"outline-container-org6a3ee40" class=3D"outline-3">
<h3 id=3D"org6a3ee40">Hannes Mehnert announced</h3>
<div class=3D"outline-text-3" id=3D"text-org6a3ee40">
<p>
Dear everyone,
</p>
<p>
we (the OCaml security) team is curious what the practice should be for opa=
m packages that have known security vulnerabilities?
</p>
<p>
One way is to mark them with <code>available: false</code> in the opam-repo=
sitory, which will make them not installable (apart from if you manually ed=
it the opam file).
</p>
<p>
Especially for the OCaml compiler it is a tricky question: the recent vulne=
rability (in Marshal) affects everything < 4.14.3 | > 5 & < 5.=
4.1 – so marking these compilers as unavailable will result in lots o=
f projects that require such older OCaml versions to not be easily installa=
ble anymore. Especially since the Marshal issue is not exposed in many (any=
?) applications, it feels wrong to disallow / make it hard for anyone to in=
stall these compilers.
</p>
<p>
Some ideas we have for the future:
</p>
<ul class=3D"org-ul">
<li>annotate the exact function(s) that is/are vulnerabile in the security =
advisory (thus, you could automatically search for use of that function)</l=
i>
<li>provide an "opam audit" which takes the advisory database and inspects =
your opam switch whether you have installed any vulnerable package</li>
</ul>
<p>
But for the short & medium term, we'd appreciate input on what to do wi=
th normal opam packages that have advisories; and also whether to treat the=
compiler packages differently or not.
</p>
</div>
</div>
</div>
<div id=3D"outline-container-3" class=3D"outline-2">
<h2 id=3D"3">odoc 3.2.1 release</h2>
<div class=3D"outline-text-2" id=3D"text-3">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/ann-odoc-3-2-1-release/1808=
8/1">https://discuss.ocaml.org/t/ann-odoc-3-2-1-release/18088/1</a>
</p>
</div>
<div id=3D"outline-container-org89347aa" class=3D"outline-3">
<h3 id=3D"org89347aa">Jon Ludlam announced</h3>
<div class=3D"outline-text-3" id=3D"text-org89347aa">
<p>
The odoc team is pleased to announce the release of odoc 3.2.1!
</p>
</div>
<div id=3D"outline-container-orge848e97" class=3D"outline-4">
<h4 id=3D"orge848e97">Highlights</h4>
<div class=3D"outline-text-4" id=3D"text-orge848e97">
</div>
<ul class=3D"org-ul">
<li><a id=3D"org2974336"></a>OCaml 5.5.0 support<br />
<div class=3D"outline-text-5" id=3D"text-org2974336">
<p>
odoc now compiles against, and produces documentation for, OCaml 5.5.0 (@pa=
nglesd, @xvw, <a href=3D"https://github.com/ocaml/odoc/issues/1406">#1406</=
a>).
</p>
</div>
</li>
<li><a id=3D"orgb5efb46"></a>OxCaml support<br />
<div class=3D"outline-text-5" id=3D"text-orgb5efb46">
<p>
odoc now supports OxCaml natively, thanks to @lukemaurer and @art-w (<a hre=
f=3D"https://github.com/ocaml/odoc/issues/1399">#1399</a>). Right now this =
is very bare-bones, but full support for the various features of OxCaml is =
already in progress. If you're interested, check out the <a href=3D"https:/=
/github.com/ocaml/odoc/pulls">PRs</a>!
</p>
<p>
One thing worth flagging: because OxCaml is moving much faster than upstrea=
m OCaml, each odoc release will likely support only a single OxCaml release=
, in contrast to our usual policy of supporting every OCaml back to 4.08. I=
f you're documenting an OxCaml project, please use a matched pair of odoc a=
nd oxcaml-compiler.
</p>
</div>
</li>
</ul>
</div>
<div id=3D"outline-container-org414e2e9" class=3D"outline-4">
<h4 id=3D"org414e2e9">Added</h4>
<div class=3D"outline-text-4" id=3D"text-org414e2e9">
<ul class=3D"org-ul">
<li>Persistent LaTeX macros in the HTML/KaTeX backend (@dlesbre, <a href=3D=
"https://github.com/ocaml/odoc/issues/1391">#1391</a>).</li>
<li>The <code>markdown-generate</code> command now accepts multiple <code>.=
odocl</code> files in a single invocation, so you no longer need to wrap it=
in a shell loop (@davesnx, <a href=3D"https://github.com/ocaml/odoc/issues=
/1387">#1387</a>).</li>
</ul>
</div>
</div>
<div id=3D"outline-container-org920334f" class=3D"outline-4">
<h4 id=3D"org920334f">Changed / Fixed</h4>
<div class=3D"outline-text-4" id=3D"text-org920334f">
<ul class=3D"org-ul">
<li>Fixed two long-standing compile-time crashes, <a href=3D"https://github=
.com/ocaml/odoc/issues/930">#930</a> and #1385 (@jonludlam, <a href=3D"http=
s://github.com/ocaml/odoc/issues/1400">#1400</a>).</li>
<li>The Markdown backend now assumes <code>ocaml</code> as the language id =
on declarations, and collects code snippets into a single block with commen=
ts rather than splitting variants/records per constructor/field.</li>
<li>URL remapping now works correctly for page references (@jonludlam, <a h=
ref=3D"https://github.com/ocaml/odoc/issues/1395">#1395</a>).</li>
<li>Incremental builds no longer break under the conditions described in <a=
href=3D"https://github.com/ocaml/odoc/issues/1396">#1396</a> (@jonludlam, =
<a href=3D"https://github.com/ocaml/odoc/issues/1402">#1402</a>).</li>
<li><code>--warn-error</code> now reliably promotes all warnings to errors =
(@jonludlam, <a href=3D"https://github.com/ocaml/odoc/issues/1402">#1402</a=
>).</li>
<li>Polymorphic arguments are no longer missing their parentheses (@art-w, =
<a href=3D"https://github.com/ocaml/odoc/issues/1404">#1404</a>).</li>
<li>Fixed a regression that broke docs for packages depending on ~base ~und=
er OCaml 5.5.0 (@jonludlam, <a href=3D"https://github.com/ocaml/odoc/issues=
/1426">#1426</a>, <a href=3D"https://github.com/ocaml/odoc/issues/1427">#14=
27</a>).</li>
<li>Fixed a regression that broke docs for packages depending on <code>merl=
in-lib</code> (@jonludlam, <a href=3D"https://github.com/ocaml/odoc/issues/=
1429">#1429</a>, <a href=3D"https://github.com/ocaml/odoc/issues/1430">#143=
0</a>).</li>
</ul>
</div>
</div>
<div id=3D"outline-container-org27765e0" class=3D"outline-4">
<h4 id=3D"org27765e0">Installation</h4>
<div class=3D"outline-text-4" id=3D"text-org27765e0">
<pre class=3D"example" id=3D"orgc63d29f">
opam update
opam install odoc
</pre>
</div>
</div>
<div id=3D"outline-container-org6a0c80b" class=3D"outline-4">
<h4 id=3D"org6a0c80b">Use</h4>
<div class=3D"outline-text-4" id=3D"text-org6a0c80b">
<p>
Please use <a href=3D"https://ocaml.github.io/odoc/odoc-driver/index.html">=
odoc_driver</a> to build and test your package's docs locally and to see ho=
w they will look on ocaml.org.
</p>
<p>
Odig and Dune continue to work as before, no changes required. Full support=
for all of the features of odoc 3.x is being worked on in Dune.
</p>
</div>
</div>
<div id=3D"outline-container-org42920cf" class=3D"outline-4">
<h4 id=3D"org42920cf">Thanks</h4>
<div class=3D"outline-text-4" id=3D"text-org42920cf">
<p>
Thanks to everyone who contributed code, reviews, bug reports, and testing =
for this release: @art-w, @davesnx, @dlesbre, @jonludlam, @lukemaurer, @pan=
glesd, and @xvw, and anyone else I've forgotten!
</p>
<p>
As always, please report any issues on <a href=3D"https://github.com/ocaml/=
odoc/issues">github</a>.
</p>
</div>
</div>
</div>
</div>
<div id=3D"outline-container-4" class=3D"outline-2">
<h2 id=3D"4">List your open OCaml positions on the OCaml.org job board</h2>
<div class=3D"outline-text-2" id=3D"text-4">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/list-your-open-ocaml-positi=
ons-on-the-ocaml-org-job-board/11377/24">https://discuss.ocaml.org/t/list-y=
our-open-ocaml-positions-on-the-ocaml-org-job-board/11377/24</a>
</p>
</div>
<div id=3D"outline-container-org089f8fb" class=3D"outline-3">
<h3 id=3D"org089f8fb">Continunig this thread, Daniel Lamping announced</h3>
<div class=3D"outline-text-3" id=3D"text-org089f8fb">
<p>
Please can I post this job that we are hiring for.
</p>
<ul class=3D"org-ul">
<li>title: Senior Systems Software Engineer</li>
<li>link: <a href=3D"https://careers.cloud.com/jobs/senior-software-enginee=
r-xenserver-toolstack-remote-united-kingdom">https://careers.cloud.com/jobs=
/senior-software-engineer-xenserver-toolstack-remote-united-kingdom</a></li>
<li>locations: Remote, United-Kingdom</li>
<li>publication_date: 2026-05-14</li>
<li>company: Cloud Software Group</li>
<li>company_logo: <img src=3D"https://www.cloud.com/media_1e40e7d048f0117d4=
543c940f9e7433b549c08a03.svg" alt=3D"media_1e40e7d048f0117d4543c940f9e7433b=
549c08a03.svg" class=3D"org-svg" /></li>
</ul>
</div>
</div>
</div>
<div id=3D"outline-container-5" class=3D"outline-2">
<h2 id=3D"5">Cammy Stories: a small OCaml webcomic experiment =F0=9F=90=AB<=
/h2>
<div class=3D"outline-text-2" id=3D"text-5">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/cammy-stories-a-small-ocaml=
-webcomic-experiment/18128/1">https://discuss.ocaml.org/t/cammy-stories-a-s=
mall-ocaml-webcomic-experiment/18128/1</a>
</p>
</div>
<div id=3D"outline-container-orge600455" class=3D"outline-3">
<h3 id=3D"orge600455">Ramiro Checa-Garcia announced</h3>
<div class=3D"outline-text-3" id=3D"text-orge600455">
<p>
Hi everyone,
</p>
<p>
I've been experimenting lately with ways to make technical topics feel a bi=
t more visual and approachable, and somehow that ended up turning into a sm=
all hobby project called Cammy Stories.
</p>
<p>
It's a collection of short comics about OCaml featuring a camel mascot ("Ca=
mmy") together with some familiar faces from the ecosystem like Dune, OPAM,=
Merlin and Odoc as characters and teammates.
</p>
<p>
The idea is not to make formal tutorials or documentation, but rather playf=
ul visual explanations of concepts like variants, functors, concurrency, Du=
ne stanzas, OPAM switches, and other OCaml topics I found interesting while=
learning and exploring the ecosystem.
</p>
<p>
Most of the images were created through lots of iteration with AI image gen=
eration tools. Sometimes the results are surprisingly good, sometimes the t=
ext becomes nonsense, and occasionally random hearts appear for no reason. =
I've also kept many of the leftover drafts visible because I thought the pr=
ocess itself was funny and interesting.
</p>
<p>
Functional programming communities tend to have a reputation for being quit=
e technical and serious, and I sometimes feel that a more visual and commun=
ity-driven approach could help make some of these ideas feel a bit more app=
roachable. So this is mostly a small experiment in that direction.
</p>
<p>
Feedback is very welcome, especially since there are probably technical ina=
ccuracies or misleading ideas here and there. Suggestions for future topics=
, formats or concepts are also appreciated.
</p>
<p>
At the moment, most pages also include small notes, side comments or short =
stories about how each comic was created, since the project is still very m=
uch in a discussion and experimentation phase.
</p>
<ul class=3D"org-ul">
<li>=F0=9F=94=97 Live: <a href=3D"https://rchg.github.io/cammy/">https://rc=
hg.github.io/cammy/</a></li>
<li>=F0=9F=94=97 Repo: <a href=3D"https://github.com/RCHG/cammy">https://gi=
thub.com/RCHG/cammy</a></li>
</ul>
<p>
Hope you enjoy it =F0=9F=90=AB
</p>
</div>
</div>
</div>
<div id=3D"outline-container-6" class=3D"outline-2">
<h2 id=3D"6">MlFront_ProgressZig - Zig-compatible progress trees</h2>
<div class=3D"outline-text-2" id=3D"text-6">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/ann-mlfront-progresszig-zig=
-compatible-progress-trees/18142/1">https://discuss.ocaml.org/t/ann-mlfront=
-progresszig-zig-compatible-progress-trees/18142/1</a>
</p>
</div>
<div id=3D"outline-container-orgedc3771" class=3D"outline-3">
<h3 id=3D"orgedc3771">jbeckford announced</h3>
<div class=3D"outline-text-3" id=3D"text-orgedc3771">
<p>
I am pleased to announce MlFront_ProgressZig. Install instructions, docs an=
d examples further below.
</p>
<p>
TLDR: It renders a progress tree (a generalization of a progress bar). The =
killer feature is rendering a single progress tree with progress data fed f=
rom compatible child/grandchild/etc processes (see 2nd and 3rd examples). M=
lFront_ProgressZig is a port of Zig's <code>progress</code> standard librar=
y, with improvements for Windows and protocol compatibility with zig proces=
ses. The motivation and algorithm is at <a href=3D"https://andrewkelley.me/=
post/zig-new-cli-progress-bar-explained.html">https://andrewkelley.me/post/=
zig-new-cli-progress-bar-explained.html</a>. The port was initially AI-assi=
sted; prompts for progress.zig <a href=3D"https://gitlab.com/dkml/build-too=
ls/MlFront/-/blob/b8787f345238bfe131c4f92bbe141c96788c3b1a/src/MlFront_Prog=
ressZig/Zig.ml">start at line 1 here</a> and Cabinet (government) data <a h=
ref=3D"https://gitlab.com/dkml/build-tools/MlFront/-/blob/b8787f345238bfe13=
1c4f92bbe141c96788c3b1a/tests/DkZero_RuntimeC/SyntheticDemoD.ml#L218">start=
s on line 218 here</a>.
</p>
</div>
<div id=3D"outline-container-org75c21e4" class=3D"outline-4">
<h4 id=3D"org75c21e4">Examples: Normal Progress Tree</h4>
<div class=3D"outline-text-4" id=3D"text-org75c21e4">
<table border=3D"2" cellspacing=3D"0" cellpadding=3D"6" rules=3D"groups" fr=
ame=3D"hsides">
<colgroup>
<col class=3D"org-left" />
<col class=3D"org-left" />
</colgroup>
<thead>
<tr>
<th scope=3D"col" class=3D"org-left">What</th>
<th scope=3D"col" class=3D"org-left">Animation Link</th>
</tr>
</thead>
<tbody>
<tr>
<td class=3D"org-left">Cabinet officials since 1975</td>
<td class=3D"org-left"><a href=3D"https://asciinema.org/a/NWc2vbPeRQuOyGAa"=
>https://asciinema.org/a/NWc2vbPeRQuOyGAa</a></td>
</tr>
<tr>
<td class=3D"org-left">OCaml spawns a zig build</td>
<td class=3D"org-left"><a href=3D"https://asciinema.org/a/Tu9ofrH3ekKUCyLk"=
>https://asciinema.org/a/Tu9ofrH3ekKUCyLk</a></td>
</tr>
<tr>
<td class=3D"org-left">OCaml spawns OCaml which spawns OCaml</td>
<td class=3D"org-left"><a href=3D"https://asciinema.org/a/Tdtt52iQqSsIXcku"=
>https://asciinema.org/a/Tdtt52iQqSsIXcku</a></td>
</tr>
</tbody>
</table>
<p>
<i>Zig seems to have a bug, at least on Windows, where a zig parent can't c=
ollect data from an OCaml/zig child. That is why there are no "zig spawns O=
Caml" examples.</i>
</p>
</div>
</div>
<div id=3D"outline-container-org34fa7f4" class=3D"outline-4">
<h4 id=3D"org34fa7f4">Example: Performance Monitoring</h4>
<div class=3D"outline-text-4" id=3D"text-org34fa7f4">
<p>
Here is a snapshot of my single-threaded build system. The interesting part=
s of the call stack are added to the progress tree (basically <code>start</=
code> and <code>end_</code> around a function):
</p>
<pre class=3D"example" id=3D"org60723cf">
$ ./dk0 distribute CommonsBase_Std-dist-win32 --library 'CommonsBase_Std@2.=
5.999911122233' dist-win32.u
[signify] New build key pair in t/k/build.pub and t/k/build.sec ...
[signify] Distribute key pair among trusted coworkers only!
=E2=96=BA0/2] distribute CommonsBase_Std-dist-win32
=E2=94=94=E2=94=80 [2/5] prepare distribution
=E2=94=94=E2=94=80 [29/32] get-object CommonsBase_Std.Toybox@0...
=E2=94=94=E2=94=80 dl toybox-aarch64@toybox sz 806K
=E2=94=94=E2=94=80 landley.net/toybox...oads/binaries/0.8.9
=E2=94=94=E2=94=80 [0/1] MiB downloaded
</pre>
<p>
By seeing the "=E2=96=BA" tree not update for more than 10 seconds, I could=
see that downloading a small 806K file from the <code>landley.net/toybox</=
code> webserver was killing the performance.
</p>
<blockquote>
<p>
It is easy to identify perf bottlenecks that last longer than 0.5 seconds.
</p>
</blockquote>
</div>
</div>
<div id=3D"outline-container-org08c62b8" class=3D"outline-4">
<h4 id=3D"org08c62b8">Packages</h4>
<div class=3D"outline-text-4" id=3D"text-org08c62b8">
<ul class=3D"org-ul">
<li>MlFront_Progress: The API which can be used with one of four backends. =
Includes the "silent" and "plain" backends.</li>
<li>MlFront_ProgressZig: The zig compatible backend (high refresh rate)</li>
<li>MlFront_ProgressPeriod: A backend which dumps the progress tree periodi=
cally to the console.</li>
</ul>
<p>
Docs are at <a href=3D"https://dkml.gitlab.io/build-tools/MlFront/">https:/=
/dkml.gitlab.io/build-tools/MlFront/</a>.
</p>
</div>
</div>
<div id=3D"outline-container-org5877b38" class=3D"outline-4">
<h4 id=3D"org5877b38">Installing It</h4>
<div class=3D"outline-text-4" id=3D"text-org5877b38">
<p>
I have it in the opam queue (<a href=3D"https://github.com/ocaml/opam-repos=
itory/pull/29918">https://github.com/ocaml/opam-repository/pull/29918</a>) =
and don't expect it to be released until the AI thread is resolved. Install=
the bleeding edge with:
</p>
<pre class=3D"example" id=3D"org5127316">
for pkg in MlFront_Progress MlFront_Core MlFront_Lua MlFront_ZipFile Unifie=
dScript_Std MlFront_Thunk MlFront_Console MlFront_ProgressZig; do
opam pin add $pkg https://gitlab.com/dkml/build-tools/MlFront/-/releases/=
permalink/latest/downloads/MlFront.tar.gz
done
</pre>
<p>
(Even though I document "AI" in a couple files, I do it for my own benefit,=
apply it narrowly, and keep it under my control. Among other things, I can=
't imagine there are many (American) attorneys who would say it is wise for=
me to proactively and quasi-permanently label packages as "AI assisted/etc=
.", so I'll keep my packages out of the opam repository if that becomes a n=
ew policy.)
</p>
<p>
Enjoy!
</p>
</div>
</div>
</div>
</div>
<div id=3D"outline-container-7" class=3D"outline-2">
<h2 id=3D"7">loo - lua of ocaml</h2>
<div class=3D"outline-text-2" id=3D"text-7">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/ann-loo-lua-of-ocaml/18143/=
1">https://discuss.ocaml.org/t/ann-loo-lua-of-ocaml/18143/1</a>
</p>
</div>
<div id=3D"outline-container-org98069ea" class=3D"outline-3">
<h3 id=3D"org98069ea">Ben announced</h3>
<div class=3D"outline-text-3" id=3D"text-org98069ea">
<p>
Hi
</p>
<p>
Like mentioned in the title this compiles Ocaml (Bytecode) into Lua (lua5.1=
). This project is ai generated, I tried to fully disclose that with the me=
thods described in the project ocaml-ai-dislosure:
</p>
<p>
<a href=3D"https://github.com/maltasea/lua_of_ocaml">https://github.com/mal=
tasea/lua_of_ocaml</a>
</p>
</div>
</div>
</div>
<div id=3D"outline-container-org70421f3" class=3D"outline-2">
<h2 id=3D"org70421f3">Old CWN</h2>
<div class=3D"outline-text-2" id=3D"text-org70421f3">
<p>
If you happen to miss a CWN, you can <a href=3D"mailto:alan.schmitt@polytec=
hnique.org">send me a message</a> and I'll mail it to you, or go take a loo=
k at <a href=3D"https://alan.petitepomme.net/cwn/">the archive</a> or the <=
a href=3D"https://alan.petitepomme.net/cwn/cwn.rss">RSS feed of the archive=
s</a>.
</p>
<p>
If you also wish to receive it every week by mail, you may subscribe to the=
<a href=3D"https://sympa.inria.fr/sympa/info/caml-list">caml-list</a>.
</p>
<div class=3D"authorname" id=3D"orgd6956a3">
<p>
<a href=3D"https://alan.petitepomme.net/">Alan Schmitt</a>
</p>
</div>
</div>
</div>
</div>
</body>
</html>
--==-=-=--
--=-=-=--
--===-=-=
Content-Type: application/pgp-signature; name="signature.asc"
-----BEGIN PGP SIGNATURE-----
iQFvBAEBCABZFiEE6lXof/BsSVW56ZmGBA0KO07S5ccFAmoMJMUbFIAAAAAABAAO
bWFudTIsMi41KzEuMTIsMCwzHxxhbGFuLnNjaG1pdHRAcG9seXRlY2huaXF1ZS5v
cmcACgkQBA0KO07S5ccYuggAjhd1gOWya2Isx5SL1I0uDYixk1jaGbtRJFbmi8L7
0Ecp/ymKOTGaEGs88d5QsUmGPlGXwRXwIBH32pf57aMNYVgE9TS9KP6d1hDk8Ou3
q4g5vqyNK1M6ZoxTjRFwwh/vKTEzfT55P1bb31ib4Iw6wA/t82XNHqN6Jmri8rVy
x7rSWkh3LGdbuSuXsGxsW5GnxRsgJh6rSv9j3D4fYLZ9/FnGMg0S/qrT8DFvgTLn
/xdqlodp/n48+Dr/n4d60yPon5QePNVD9lSJYnw1D4acM3Ul1znQtf5gUoz0hQ96
GnDBk3xkNrya8tR99ixcv7r4/lzqpLeMtfIwRPbnlnSFuw==
=NZj4
-----END PGP SIGNATURE-----
--===-=-=--