[patch] added SC_LINE_END_TYPE_NONE

"'Robin Haberkorn' via scintilla-interest" <[email protected]> Mon, 09 Feb 2026 16:18:20 +0000
Newsgroups gmane.comp.lib.scintilla.devel
Message-ID <[email protected]>
--39727a4579534970eb83f08e532cb6b943c65381b8fcd7c95ad3c9229e7e
Content-Type: multipart/mixed;
 boundary=6e89dc7b36667d365019546d4f359284facee1ed1f4c509bc4e4369a8012

--6e89dc7b36667d365019546d4f359284facee1ed1f4c509bc4e4369a8012
Content-Type: multipart/alternative;
 boundary=6fb4b7c1678257aa1fb9c41c572b6b0922c5087ebb945a1523cf4e52b0c0

--6fb4b7c1678257aa1fb9c41c572b6b0922c5087ebb945a1523cf4e52b0c0
Content-Disposition: inline
Content-Type: text/plain; charset="UTF-8"

Dear Scintilla hackers,

here's a patch that adds a new SC_LINE_END_TYPE_NONE,
which disables the special treatment of EOL characters.
When enabled, Scintilla will lay out the entire document
on a single line.
After SCI_SETLINEENDTYPESALLOWED(SC_LINE_END_TYPE_NONE)
LF and CR are rendered by their character representations.

I am using this to turn Scintilla into a command-line
widget for SciTECO, where command-lines are not terminated
by Enter and may have to fit into a single line.
It might also be useful to turn Scintilla into a kind of
hex-editor in combination with character representations.
However, in my experience excessively long lines cannot
be layed out efficiently. This is also noticable when
having very long documents *without* any line breaks at all.
That's not yet been a roadblock in the command-line use case
for me, though.

I am aware that this feature might not be of interest
to many people, so if necessary I will permanently
maintain it as a patch in my Scintilla fork.

Best regards,
Robin

-- 
You received this message because you are subscribed to the Google Groups "scintilla-interest" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].
To view this discussion visit https://groups.google.com/d/msgid/scintilla-interest/DGAKF8F2Z697.2B74TKDKSW8IF%40googlemail.com.

--6fb4b7c1678257aa1fb9c41c572b6b0922c5087ebb945a1523cf4e52b0c0--

--6e89dc7b36667d365019546d4f359284facee1ed1f4c509bc4e4369a8012
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename=0001-added-SC_LINE_END_TYPE_NONE-allows-ignoring-all-line.patch
Content-Type: text/x-patch; charset=utf-8;
 name=0001-added-SC_LINE_END_TYPE_NONE-allows-ignoring-all-line.patch

RnJvbSAwYmZlMWNkMTQ5YjFiMjA4NWQ2N2U4YWFjMmMwZjdiNDg2ZDlkOWMwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JpbiBIYWJlcmtvcm4gPHJoYWJlcmtvcm5AZm1zYncuZGU+
CkRhdGU6IFR1ZSwgOSBTZXAgMjAyNSAyMDo1MDowNyArMDMwMApTdWJqZWN0OiBbUEFUQ0ggMS8y
XSBhZGRlZCBTQ19MSU5FX0VORF9UWVBFX05PTkU6IGFsbG93cyBpZ25vcmluZyBhbGwgbGluZQog
ZW5kcwoKVGhpcyBjYW4gaGVscCB3aGVuIHVzaW5nIFNjaW50aWxsYSB2aWV3cyBhcyBjb21tYW5k
IGxpbmUgd2lkZ2V0cy4KSXQgY2FuIGFsc28gaGVscCB3aGVuIHVzaW5nIFNjaW50aWxsYSB0byBl
ZGl0IGJpbmFyeSBmaWxlcyBhcyB5b3UKZG9uJ3Qgd2FudCB0byBhdHRhY2ggc3BlY2lhbCBtZWFu
aW5nIHRvIENSIGFuZCBMRi4KLS0tCiBkb2MvU2NpbnRpbGxhRG9jLmh0bWwgICAgfCAgOCArKy0t
CiBpbmNsdWRlL1NjaW50aWxsYS5oICAgICAgfCAgMSArCiBpbmNsdWRlL1NjaW50aWxsYS5pZmFj
ZSAgfCAgMSArCiBpbmNsdWRlL1NjaW50aWxsYVR5cGVzLmggfCAgMSArCiBzcmMvQ2VsbEJ1ZmZl
ci5jeHggICAgICAgfCA4NiArKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0t
CiBzcmMvRG9jdW1lbnQuY3h4ICAgICAgICAgfCAgNCArLQogc3JjL1NjaW50aWxsYUJhc2UuY3h4
ICAgIHwgIDIgKy0KIDcgZmlsZXMgY2hhbmdlZCwgNjIgaW5zZXJ0aW9ucygrKSwgNDEgZGVsZXRp
b25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9jL1NjaW50aWxsYURvYy5odG1sIGIvZG9jL1NjaW50aWxs
YURvYy5odG1sCmluZGV4IGQ0MzIwNDNmNi4uZGRkMmE1YTViIDEwMDY0NAotLS0gYS9kb2MvU2Np
bnRpbGxhRG9jLmh0bWwKKysrIGIvZG9jL1NjaW50aWxsYURvYy5odG1sCkBAIC0zMDIxLDE1ICsz
MDIxLDE3IEBAIHN0cnVjdCBTY2lfVGV4dFRvRmluZEZ1bGwgewogCiAgICAgPHA+PGIgaWQ9IlND
SV9HRVRMSU5FRU5EVFlQRVNTVVBQT1JURUQiPlNDSV9HRVRMSU5FRU5EVFlQRVNTVVBQT1JURUQg
JnJhcnI7IGludDwvYj48YnIgLz4KICAgICAgPGNvZGU+U0NJX0dFVExJTkVFTkRUWVBFU1NVUFBP
UlRFRDwvY29kZT4gcmVwb3J0cyB0aGUgZGlmZmVyZW50IHR5cGVzIG9mIGxpbmUgZW5kcyBzdXBw
b3J0ZWQKLSAgICAgYnkgdGhlIGN1cnJlbnQgbGV4ZXIuIFRoaXMgaXMgYSBiaXQgc2V0IGFsdGhv
dWdoIHRoZXJlIGlzIGN1cnJlbnRseSBvbmx5IGEgc2luZ2xlIGNob2ljZQotICAgICB3aXRoIGVp
dGhlciA8Y29kZT5TQ19MSU5FX0VORF9UWVBFX0RFRkFVTFQ8L2NvZGU+ICgwKSBvciA8Y29kZT5T
Q19MSU5FX0VORF9UWVBFX1VOSUNPREU8L2NvZGU+ICgxKS4KKyAgICAgYnkgdGhlIGN1cnJlbnQg
bGV4ZXIuIFRoaXMgaXMgYSBjaG9pY2UgYmV0d2VlbiA8Y29kZT5TQ19MSU5FX0VORF9UWVBFX0RF
RkFVTFQ8L2NvZGU+ICgwKSwKKyAgICAgPGNvZGU+U0NfTElORV9FTkRfVFlQRV9VTklDT0RFPC9j
b2RlPiAoMSkgYW5kIDxjb2RlPlNDX0xJTkVfRU5EX1RZUEVfTk9ORTwvY29kZT4gKDIpLgogICAg
ICBUaGVzZSB2YWx1ZXMgYXJlIGFsc28gdXNlZCBieSB0aGUgb3RoZXIgbWVzc2FnZXMgY29uY2Vy
bmVkIHdpdGggVW5pY29kZSBsaW5lIGVuZHMuPC9wPgogCi0gICAgPHA+PGIgaWQ9IlNDSV9TRVRM
SU5FRU5EVFlQRVNBTExPV0VEIj5TQ0lfU0VUTElORUVORFRZUEVTQUxMT1dFRChpbnQgbGluZUVu
ZEJpdFNldCk8L2I+PGJyIC8+CisgICAgPHA+PGIgaWQ9IlNDSV9TRVRMSU5FRU5EVFlQRVNBTExP
V0VEIj5TQ0lfU0VUTElORUVORFRZUEVTQUxMT1dFRChpbnQgbGluZUVuZFR5cGUpPC9iPjxiciAv
PgogICAgICA8YiBpZD0iU0NJX0dFVExJTkVFTkRUWVBFU0FMTE9XRUQiPlNDSV9HRVRMSU5FRU5E
VFlQRVNBTExPV0VEICZyYXJyOyBpbnQ8L2I+PGJyIC8+CiAgICAgIEJ5IGRlZmF1bHQsIG9ubHkg
dGhlIEFTQ0lJIGxpbmUgZW5kcyBhcmUgaW50ZXJwcmV0ZWQuIFVuaWNvZGUgbGluZSBlbmRzIG1h
eSBiZSByZXF1ZXN0ZWQgd2l0aAogICAgICA8Y29kZT5TQ0lfU0VUTElORUVORFRZUEVTQUxMT1dF
RChTQ19MSU5FX0VORF9UWVBFX1VOSUNPREUpPC9jb2RlPgogICAgICBidXQgdGhpcyB3aWxsIGJl
IGluZWZmZWN0aXZlIHVubGVzcyB0aGUgbGV4ZXIgYWxzbyBhbGxvd3MgeW91IFVuaWNvZGUgbGlu
ZSBlbmRzLgorICAgICA8Y29kZT5TQ19MSU5FX0VORF9UWVBFX05PTkU8L2NvZGU+IGRpc2FibGVz
IGludGVycHJldGF0aW9uIG9mIGFsbCBsaW5lIGVuZHMgd2hpY2ggZWZmZWN0aXZlbHkKKyAgICAg
Y3JlYXRlcyBhIG9uZS1saW5lIHZpZXcuCiAgICAgPGNvZGU+U0NJX0dFVExJTkVFTkRUWVBFU0FM
TE9XRUQ8L2NvZGU+IHJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGUuPC9wPgogCiAgICAgPHA+PGIg
aWQ9IlNDSV9HRVRMSU5FRU5EVFlQRVNBQ1RJVkUiPlNDSV9HRVRMSU5FRU5EVFlQRVNBQ1RJVkUg
JnJhcnI7IGludDwvYj48YnIgLz4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvU2NpbnRpbGxhLmggYi9p
bmNsdWRlL1NjaW50aWxsYS5oCmluZGV4IGI2Nzg2MDk3ZS4uY2U2MmM0NjIwIDEwMDY0NAotLS0g
YS9pbmNsdWRlL1NjaW50aWxsYS5oCisrKyBiL2luY2x1ZGUvU2NpbnRpbGxhLmgKQEAgLTExNDQs
NiArMTE0NCw3IEBAIHR5cGVkZWYgc3B0cl90ICgqU2NpRm5EaXJlY3RTdGF0dXMpKHNwdHJfdCBw
dHIsIHVuc2lnbmVkIGludCBpTWVzc2FnZSwgdXB0cl90IHdQCiAjZGVmaW5lIFNDSV9TRVRDQVJF
VExJTkVWSVNJQkxFQUxXQVlTIDI2NTUKICNkZWZpbmUgU0NfTElORV9FTkRfVFlQRV9ERUZBVUxU
IDAKICNkZWZpbmUgU0NfTElORV9FTkRfVFlQRV9VTklDT0RFIDEKKyNkZWZpbmUgU0NfTElORV9F
TkRfVFlQRV9OT05FIDIKICNkZWZpbmUgU0NJX1NFVExJTkVFTkRUWVBFU0FMTE9XRUQgMjY1Ngog
I2RlZmluZSBTQ0lfR0VUTElORUVORFRZUEVTQUxMT1dFRCAyNjU3CiAjZGVmaW5lIFNDSV9HRVRM
SU5FRU5EVFlQRVNBQ1RJVkUgMjY1OApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9TY2ludGlsbGEuaWZh
Y2UgYi9pbmNsdWRlL1NjaW50aWxsYS5pZmFjZQppbmRleCA2MjYyZjdjMWIuLjViYjgwZmI0NCAx
MDA2NDQKLS0tIGEvaW5jbHVkZS9TY2ludGlsbGEuaWZhY2UKKysrIGIvaW5jbHVkZS9TY2ludGls
bGEuaWZhY2UKQEAgLTMxNDUsNiArMzE0NSw3IEBAIHNldCB2b2lkIFNldENhcmV0TGluZVZpc2li
bGVBbHdheXM9MjY1NShib29sIGFsd2F5c1Zpc2libGUsKQogZW51IExpbmVFbmRUeXBlPVNDX0xJ
TkVfRU5EX1RZUEVfCiB2YWwgU0NfTElORV9FTkRfVFlQRV9ERUZBVUxUPTAKIHZhbCBTQ19MSU5F
X0VORF9UWVBFX1VOSUNPREU9MQordmFsIFNDX0xJTkVfRU5EX1RZUEVfTk9ORT0yCiAKICMgU2V0
IHRoZSBsaW5lIGVuZCB0eXBlcyB0aGF0IHRoZSBhcHBsaWNhdGlvbiB3YW50cyB0byB1c2UuIE1h
eSBub3QgYmUgdXNlZCBpZiBpbmNvbXBhdGlibGUgd2l0aCBsZXhlciBvciBlbmNvZGluZy4KIHNl
dCB2b2lkIFNldExpbmVFbmRUeXBlc0FsbG93ZWQ9MjY1NihMaW5lRW5kVHlwZSBsaW5lRW5kQml0
U2V0LCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvU2NpbnRpbGxhVHlwZXMuaCBiL2luY2x1ZGUvU2Np
bnRpbGxhVHlwZXMuaAppbmRleCAwOTkxYTE0ODAuLjQxMTg3NmY5NyAxMDA2NDQKLS0tIGEvaW5j
bHVkZS9TY2ludGlsbGFUeXBlcy5oCisrKyBiL2luY2x1ZGUvU2NpbnRpbGxhVHlwZXMuaApAQCAt
NTIyLDYgKzUyMiw3IEBAIGVudW0gY2xhc3MgVGVjaG5vbG9neSB7CiBlbnVtIGNsYXNzIExpbmVF
bmRUeXBlIHsKIAlEZWZhdWx0ID0gMCwKIAlVbmljb2RlID0gMSwKKwlOb25lID0gMiwKIH07CiAK
IGVudW0gY2xhc3MgUmVwcmVzZW50YXRpb25BcHBlYXJhbmNlIHsKZGlmZiAtLWdpdCBhL3NyYy9D
ZWxsQnVmZmVyLmN4eCBiL3NyYy9DZWxsQnVmZmVyLmN4eAppbmRleCAzZTlkZWI5MzQuLjI4MTQx
ZTJjZCAxMDA2NDQKLS0tIGEvc3JjL0NlbGxCdWZmZXIuY3h4CisrKyBiL3NyYy9DZWxsQnVmZmVy
LmN4eApAQCAtNTIxLDYgKzUyMSw5IEBAIHZvaWQgQ2VsbEJ1ZmZlcjo6U2V0TGluZUVuZFR5cGVz
KExpbmVFbmRUeXBlIHV0ZjhMaW5lRW5kc18pIHsKIH0KIAogYm9vbCBDZWxsQnVmZmVyOjpDb250
YWluc0xpbmVFbmQoY29uc3QgY2hhciAqcywgU2NpOjpQb3NpdGlvbiBsZW5ndGgpIGNvbnN0IG5v
ZXhjZXB0IHsKKwlpZiAodXRmOExpbmVFbmRzID09IExpbmVFbmRUeXBlOjpOb25lKSB7CisJCXJl
dHVybiBmYWxzZTsKKwl9CiAJdW5zaWduZWQgY2hhciBjaEJlZm9yZVByZXYgPSAwOwogCXVuc2ln
bmVkIGNoYXIgY2hQcmV2ID0gMDsKIAlmb3IgKFNjaTo6UG9zaXRpb24gaSA9IDA7IGkgPCBsZW5n
dGg7IGkrKykgewpAQCAtNTcyLDYgKzU3NSw4IEBAIFNjaTo6UG9zaXRpb24gQ2VsbEJ1ZmZlcjo6
TGluZVN0YXJ0KFNjaTo6TGluZSBsaW5lKSBjb25zdCBub2V4Y2VwdCB7CiAJCXJldHVybiAwOwog
CWVsc2UgaWYgKGxpbmUgPj0gTGluZXMoKSkKIAkJcmV0dXJuIExlbmd0aCgpOworCWVsc2UgaWYg
KExpbmVFbmRUeXBlOjpOb25lID09IEdldExpbmVFbmRUeXBlcygpKQorCQlyZXR1cm4gMDsKIAll
bHNlCiAJCXJldHVybiBwbHYtPkxpbmVTdGFydChsaW5lKTsKIH0KQEAgLTU3OSw2ICs1ODQsOCBA
QCBTY2k6OlBvc2l0aW9uIENlbGxCdWZmZXI6OkxpbmVTdGFydChTY2k6OkxpbmUgbGluZSkgY29u
c3Qgbm9leGNlcHQgewogU2NpOjpQb3NpdGlvbiBDZWxsQnVmZmVyOjpMaW5lRW5kKFNjaTo6TGlu
ZSBsaW5lKSBjb25zdCBub2V4Y2VwdCB7CiAJaWYgKGxpbmUgPj0gTGluZXMoKSAtIDEpIHsKIAkJ
cmV0dXJuIExpbmVTdGFydChsaW5lICsgMSk7CisJfSBlbHNlIGlmIChMaW5lRW5kVHlwZTo6Tm9u
ZSA9PSBHZXRMaW5lRW5kVHlwZXMoKSkgeworCQlyZXR1cm4gTGVuZ3RoKCk7CiAJfSBlbHNlIHsK
IAkJU2NpOjpQb3NpdGlvbiBwb3NpdGlvbiA9IExpbmVTdGFydChsaW5lICsgMSk7CiAJCWlmIChM
aW5lRW5kVHlwZTo6VW5pY29kZSA9PSBHZXRMaW5lRW5kVHlwZXMoKSkgewpAQCAtNzE4LDYgKzcy
NSwxMSBAQCB2b2lkIENlbGxCdWZmZXI6OlJlc2V0TGluZUVuZHMoKSB7CiAJY29uc3RleHByIFNj
aTo6UG9zaXRpb24gcG9zaXRpb24gPSAwOwogCWNvbnN0IFNjaTo6UG9zaXRpb24gbGVuZ3RoID0g
TGVuZ3RoKCk7CiAJcGx2LT5JbnNlcnRUZXh0KDAsIGxlbmd0aCk7CisKKwlpZiAoTGluZUVuZFR5
cGU6Ok5vbmUgPT0gR2V0TGluZUVuZFR5cGVzKCkpIHsKKwkJcmV0dXJuOworCX0KKwogCVNjaTo6
TGluZSBsaW5lSW5zZXJ0ID0gMTsKIAljb25zdGV4cHIgYm9vbCBhdExpbmVTdGFydCA9IHRydWU7
CiAJdW5zaWduZWQgY2hhciBjaEJlZm9yZVByZXYgPSAwOwpAQCAtODE5LDcgKzgzMSw3IEBAIHZv
aWQgQ2VsbEJ1ZmZlcjo6QmFzaWNJbnNlcnRTdHJpbmcoU2NpOjpQb3NpdGlvbiBwb3NpdGlvbiwg
Y29uc3QgY2hhciAqcywgU2NpOjpQCiAJcGx2LT5JbnNlcnRUZXh0KGxpbmVJbnNlcnQtMSwgaW5z
ZXJ0TGVuZ3RoKTsKIAl1bnNpZ25lZCBjaGFyIGNoQmVmb3JlUHJldiA9IHN1YnN0YW5jZS5WYWx1
ZUF0KHBvc2l0aW9uIC0gMik7CiAJdW5zaWduZWQgY2hhciBjaFByZXYgPSBzdWJzdGFuY2UuVmFs
dWVBdChwb3NpdGlvbiAtIDEpOwotCWlmIChjaFByZXYgPT0gJ1xyJyAmJiBjaEFmdGVyID09ICdc
bicpIHsKKwlpZiAoTGluZUVuZFR5cGU6Ok5vbmUgIT0gR2V0TGluZUVuZFR5cGVzKCkgJiYgY2hQ
cmV2ID09ICdccicgJiYgY2hBZnRlciA9PSAnXG4nKSB7CiAJCS8vIFNwbGl0dGluZyB1cCBhIGNy
bGYgcGFpciBhdCBwb3NpdGlvbgogCQlJbnNlcnRMaW5lKGxpbmVJbnNlcnQsIHBvc2l0aW9uLCBm
YWxzZSk7CiAJCWxpbmVJbnNlcnQrKzsKQEAgLTgzOCw3ICs4NTAsNyBAQCB2b2lkIENlbGxCdWZm
ZXI6OkJhc2ljSW5zZXJ0U3RyaW5nKFNjaTo6UG9zaXRpb24gcG9zaXRpb24sIGNvbnN0IGNoYXIg
KnMsIFNjaTo6UAogCWNvbnN0IGNoYXIgKnB0ciA9IHM7CiAJdW5zaWduZWQgY2hhciBjaCA9IDA7
CiAKLQlpZiAoY2hQcmV2ID09ICdccicgJiYgKnB0ciA9PSAnXG4nKSB7CisJaWYgKExpbmVFbmRU
eXBlOjpOb25lICE9IEdldExpbmVFbmRUeXBlcygpICYmIGNoUHJldiA9PSAnXHInICYmICpwdHIg
PT0gJ1xuJykgewogCQkrK3B0cjsKIAkJLy8gUGF0Y2ggdXAgd2hhdCB3YXMgZW5kIG9mIGxpbmUK
IAkJcGx2LT5TZXRMaW5lU3RhcnQobGluZUluc2VydCAtIDEsIChwb3NpdGlvbiArIHB0ciAtIHMp
KTsKQEAgLTg0Nyw4ICs4NTksMTAgQEAgdm9pZCBDZWxsQnVmZmVyOjpCYXNpY0luc2VydFN0cmlu
ZyhTY2k6OlBvc2l0aW9uIHBvc2l0aW9uLCBjb25zdCBjaGFyICpzLCBTY2k6OlAKIAogCWlmIChw
dHIgPCBlbmQpIHsKIAkJdWludDhfdCBlb2xUYWJsZVsyNTZde307Ci0JCWVvbFRhYmxlW3N0YXRp
Y19jYXN0PHVpbnQ4X3Q+KCdcbicpXSA9IDE7Ci0JCWVvbFRhYmxlW3N0YXRpY19jYXN0PHVpbnQ4
X3Q+KCdccicpXSA9IDI7CisJCWlmIChMaW5lRW5kVHlwZTo6Tm9uZSAhPSBHZXRMaW5lRW5kVHlw
ZXMoKSkgeworCQkJZW9sVGFibGVbc3RhdGljX2Nhc3Q8dWludDhfdD4oJ1xuJyldID0gMTsKKwkJ
CWVvbFRhYmxlW3N0YXRpY19jYXN0PHVpbnQ4X3Q+KCdccicpXSA9IDI7CisJCX0KIAkJaWYgKHV0
ZjhMaW5lRW5kcyA9PSBMaW5lRW5kVHlwZTo6VW5pY29kZSkgewogCQkJLy8gc2VlIFVuaUNvbnZl
cnNpb24uaCBmb3IgTFMsIFBTIGFuZCBORUwKIAkJCWVvbFRhYmxlWzB4ODVdID0gNDsKQEAgLTkw
Niw3ICs5MjAsNyBAQCB2b2lkIENlbGxCdWZmZXI6OkJhc2ljSW5zZXJ0U3RyaW5nKFNjaTo6UG9z
aXRpb24gcG9zaXRpb24sIGNvbnN0IGNoYXIgKnMsIFNjaTo6UAogCWNoID0gKmVuZDsKIAlpZiAo
cHRyID09IGVuZCkgewogCQkrK3B0cjsKLQkJaWYgKGNoID09ICdccicgfHwgY2ggPT0gJ1xuJykg
eworCQlpZiAoTGluZUVuZFR5cGU6Ok5vbmUgIT0gR2V0TGluZUVuZFR5cGVzKCkgJiYgKGNoID09
ICdccicgfHwgY2ggPT0gJ1xuJykpIHsKIAkJCUluc2VydExpbmUobGluZUluc2VydCwgKHBvc2l0
aW9uICsgcHRyIC0gcyksIGF0TGluZVN0YXJ0KTsKIAkJCWxpbmVJbnNlcnQrKzsKIAkJfSBlbHNl
IGlmICh1dGY4TGluZUVuZHMgPT0gTGluZUVuZFR5cGU6OlVuaWNvZGUgJiYgIVVURjhJc0FzY2lp
KGNoKSkgewpAQCAtOTE4LDcgKzkzMiw3IEBAIHZvaWQgQ2VsbEJ1ZmZlcjo6QmFzaWNJbnNlcnRT
dHJpbmcoU2NpOjpQb3NpdGlvbiBwb3NpdGlvbiwgY29uc3QgY2hhciAqcywgU2NpOjpQCiAJfQog
CiAJLy8gSm9pbmluZyB0d28gbGluZXMgd2hlcmUgbGFzdCBpbnNlcnRpb24gaXMgY3IgYW5kIGZv
bGxvd2luZyBzdWJzdGFuY2Ugc3RhcnRzIHdpdGggbGYKLQlpZiAoY2hBZnRlciA9PSAnXG4nKSB7
CisJaWYgKExpbmVFbmRUeXBlOjpOb25lICE9IEdldExpbmVFbmRUeXBlcygpICYmIGNoQWZ0ZXIg
PT0gJ1xuJykgewogCQlpZiAoY2ggPT0gJ1xyJykgewogCQkJLy8gRW5kIG9mIGxpbmUgYWxyZWFk
eSBpbiBidWZmZXIgc28gZHJvcCB0aGUgbmV3bHkgY3JlYXRlZCBvbmUKIAkJCVJlbW92ZUxpbmUo
bGluZUluc2VydCAtIDEpOwpAQCAtOTk5LDcgKzEwMTMsNyBAQCB2b2lkIENlbGxCdWZmZXI6OkJh
c2ljRGVsZXRlQ2hhcnMoU2NpOjpQb3NpdGlvbiBwb3NpdGlvbiwgU2NpOjpQb3NpdGlvbiBkZWxl
dGVMZQogCQl9CiAKIAkJYm9vbCBpZ25vcmVOTCA9IGZhbHNlOwotCQlpZiAoY2hQcmV2ID09ICdc
cicgJiYgY2hOZXh0ID09ICdcbicpIHsKKwkJaWYgKExpbmVFbmRUeXBlOjpOb25lICE9IEdldExp
bmVFbmRUeXBlcygpICYmIGNoUHJldiA9PSAnXHInICYmIGNoTmV4dCA9PSAnXG4nKSB7CiAJCQkv
LyBNb3ZlIGJhY2sgb25lCiAJCQlwbHYtPlNldExpbmVTdGFydChsaW5lUmVtb3ZlLCBwb3NpdGlv
bik7CiAJCQlsaW5lUmVtb3ZlKys7CkBAIC0xMDExLDM4ICsxMDI1LDQwIEBAIHZvaWQgQ2VsbEJ1
ZmZlcjo6QmFzaWNEZWxldGVDaGFycyhTY2k6OlBvc2l0aW9uIHBvc2l0aW9uLCBTY2k6OlBvc2l0
aW9uIGRlbGV0ZUxlCiAJCQl9CiAJCX0KIAotCQl1bnNpZ25lZCBjaGFyIGNoID0gY2hOZXh0Owot
CQlmb3IgKFNjaTo6UG9zaXRpb24gaSA9IDA7IGkgPCBkZWxldGVMZW5ndGg7IGkrKykgewotCQkJ
Y2hOZXh0ID0gc3Vic3RhbmNlLlZhbHVlQXQocG9zaXRpb24gKyBpICsgMSk7Ci0JCQlpZiAoY2gg
PT0gJ1xyJykgewotCQkJCWlmIChjaE5leHQgIT0gJ1xuJykgewotCQkJCQlSZW1vdmVMaW5lKGxp
bmVSZW1vdmUpOwotCQkJCX0KLQkJCX0gZWxzZSBpZiAoY2ggPT0gJ1xuJykgewotCQkJCWlmIChp
Z25vcmVOTCkgewotCQkJCQlpZ25vcmVOTCA9IGZhbHNlOyAJLy8gRnVydGhlciBcbiBhcmUgcmVh
bCBkZWxldGlvbnMKLQkJCQl9IGVsc2UgewotCQkJCQlSZW1vdmVMaW5lKGxpbmVSZW1vdmUpOwot
CQkJCX0KLQkJCX0gZWxzZSBpZiAodXRmOExpbmVFbmRzID09IExpbmVFbmRUeXBlOjpVbmljb2Rl
KSB7Ci0JCQkJaWYgKCFVVEY4SXNBc2NpaShjaCkpIHsKLQkJCQkJY29uc3QgdW5zaWduZWQgY2hh
ciBuZXh0M1szXSA9IHtjaCwgY2hOZXh0LAotCQkJCQkJc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cj4oc3Vic3RhbmNlLlZhbHVlQXQocG9zaXRpb24gKyBpICsgMikpfTsKLQkJCQkJaWYgKFVURjhJ
c1NlcGFyYXRvcihuZXh0MykgfHwgVVRGOElzTkVMKG5leHQzKSkgeworCQlpZiAoTGluZUVuZFR5
cGU6Ok5vbmUgIT0gR2V0TGluZUVuZFR5cGVzKCkpIHsKKwkJCXVuc2lnbmVkIGNoYXIgY2ggPSBj
aE5leHQ7CisJCQlmb3IgKFNjaTo6UG9zaXRpb24gaSA9IDA7IGkgPCBkZWxldGVMZW5ndGg7IGkr
KykgeworCQkJCWNoTmV4dCA9IHN1YnN0YW5jZS5WYWx1ZUF0KHBvc2l0aW9uICsgaSArIDEpOwor
CQkJCWlmIChjaCA9PSAnXHInKSB7CisJCQkJCWlmIChjaE5leHQgIT0gJ1xuJykgewogCQkJCQkJ
UmVtb3ZlTGluZShsaW5lUmVtb3ZlKTsKIAkJCQkJfQorCQkJCX0gZWxzZSBpZiAoY2ggPT0gJ1xu
JykgeworCQkJCQlpZiAoaWdub3JlTkwpIHsKKwkJCQkJCWlnbm9yZU5MID0gZmFsc2U7IAkvLyBG
dXJ0aGVyIFxuIGFyZSByZWFsIGRlbGV0aW9ucworCQkJCQl9IGVsc2UgeworCQkJCQkJUmVtb3Zl
TGluZShsaW5lUmVtb3ZlKTsKKwkJCQkJfQorCQkJCX0gZWxzZSBpZiAodXRmOExpbmVFbmRzID09
IExpbmVFbmRUeXBlOjpVbmljb2RlKSB7CisJCQkJCWlmICghVVRGOElzQXNjaWkoY2gpKSB7CisJ
CQkJCQljb25zdCB1bnNpZ25lZCBjaGFyIG5leHQzWzNdID0ge2NoLCBjaE5leHQsCisJCQkJCQkJ
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oc3Vic3RhbmNlLlZhbHVlQXQocG9zaXRpb24gKyBp
ICsgMikpfTsKKwkJCQkJCWlmIChVVEY4SXNTZXBhcmF0b3IobmV4dDMpIHx8IFVURjhJc05FTChu
ZXh0MykpIHsKKwkJCQkJCQlSZW1vdmVMaW5lKGxpbmVSZW1vdmUpOworCQkJCQkJfQorCQkJCQl9
CiAJCQkJfQotCQkJfQogCi0JCQljaCA9IGNoTmV4dDsKLQkJfQotCQkvLyBNYXkgaGF2ZSB0byBm
aXggdXAgZW5kIGlmIGxhc3QgZGVsZXRpb24gY2F1c2VzIGNyIHRvIGJlIG5leHQgdG8gbGYKLQkJ
Ly8gb3IgcmVtb3ZlcyBvbmUgb2YgYSBjcmxmIHBhaXIKLQkJY29uc3QgY2hhciBjaEFmdGVyID0g
c3Vic3RhbmNlLlZhbHVlQXQocG9zaXRpb24gKyBkZWxldGVMZW5ndGgpOwotCQlpZiAoY2hCZWZv
cmUgPT0gJ1xyJyAmJiBjaEFmdGVyID09ICdcbicpIHsKLQkJCS8vIFVzaW5nIGxpbmVSZW1vdmUt
MSBhcyBjciBlbmRlZCBsaW5lIGJlZm9yZSBzdGFydCBvZiBkZWxldGlvbgotCQkJUmVtb3ZlTGlu
ZShsaW5lUmVtb3ZlIC0gMSk7Ci0JCQlwbHYtPlNldExpbmVTdGFydChsaW5lUmVtb3ZlIC0gMSwg
cG9zaXRpb24gKyAxKTsKKwkJCQljaCA9IGNoTmV4dDsKKwkJCX0KKwkJCS8vIE1heSBoYXZlIHRv
IGZpeCB1cCBlbmQgaWYgbGFzdCBkZWxldGlvbiBjYXVzZXMgY3IgdG8gYmUgbmV4dCB0byBsZgor
CQkJLy8gb3IgcmVtb3ZlcyBvbmUgb2YgYSBjcmxmIHBhaXIKKwkJCWNvbnN0IGNoYXIgY2hBZnRl
ciA9IHN1YnN0YW5jZS5WYWx1ZUF0KHBvc2l0aW9uICsgZGVsZXRlTGVuZ3RoKTsKKwkJCWlmIChj
aEJlZm9yZSA9PSAnXHInICYmIGNoQWZ0ZXIgPT0gJ1xuJykgeworCQkJCS8vIFVzaW5nIGxpbmVS
ZW1vdmUtMSBhcyBjciBlbmRlZCBsaW5lIGJlZm9yZSBzdGFydCBvZiBkZWxldGlvbgorCQkJCVJl
bW92ZUxpbmUobGluZVJlbW92ZSAtIDEpOworCQkJCXBsdi0+U2V0TGluZVN0YXJ0KGxpbmVSZW1v
dmUgLSAxLCBwb3NpdGlvbiArIDEpOworCQkJfQogCQl9CiAJfQogCXN1YnN0YW5jZS5EZWxldGVS
YW5nZShwb3NpdGlvbiwgZGVsZXRlTGVuZ3RoKTsKZGlmZiAtLWdpdCBhL3NyYy9Eb2N1bWVudC5j
eHggYi9zcmMvRG9jdW1lbnQuY3h4CmluZGV4IDQ1OGMxZTkzZi4uZmQzM2NjNzA4IDEwMDY0NAot
LS0gYS9zcmMvRG9jdW1lbnQuY3h4CisrKyBiL3NyYy9Eb2N1bWVudC5jeHgKQEAgLTEwMCw3ICsx
MDAsNyBAQCBMaW5lRW5kVHlwZSBMZXhJbnRlcmZhY2U6OkxpbmVFbmRUeXBlc1N1cHBvcnRlZCgp
IHsKIAlpZiAoaW5zdGFuY2UpIHsKIAkJcmV0dXJuIHN0YXRpY19jYXN0PExpbmVFbmRUeXBlPihp
bnN0YW5jZS0+TGluZUVuZFR5cGVzU3VwcG9ydGVkKCkpOwogCX0KLQlyZXR1cm4gTGluZUVuZFR5
cGU6OkRlZmF1bHQ7CisJcmV0dXJuIExpbmVFbmRUeXBlOjpOb25lOwogfQogCiBib29sIExleElu
dGVyZmFjZTo6VXNlQ29udGFpbmVyTGV4aW5nKCkgY29uc3Qgbm9leGNlcHQgewpAQCAtMjYwLDcg
KzI2MCw3IEBAIExpbmVBbm5vdGF0aW9uICpEb2N1bWVudDo6RU9MQW5ub3RhdGlvbnMoKSBjb25z
dCBub2V4Y2VwdCB7CiBMaW5lRW5kVHlwZSBEb2N1bWVudDo6TGluZUVuZFR5cGVzU3VwcG9ydGVk
KCkgY29uc3QgewogCWlmICgoQ3BVdGY4ID09IGRiY3NDb2RlUGFnZSkgJiYgcGxpKQogCQlyZXR1
cm4gcGxpLT5MaW5lRW5kVHlwZXNTdXBwb3J0ZWQoKTsKLQlyZXR1cm4gTGluZUVuZFR5cGU6OkRl
ZmF1bHQ7CisJcmV0dXJuIExpbmVFbmRUeXBlOjpOb25lOwogfQogCiBib29sIERvY3VtZW50OjpT
ZXREQkNTQ29kZVBhZ2UoaW50IGRiY3NDb2RlUGFnZV8pIHsKZGlmZiAtLWdpdCBhL3NyYy9TY2lu
dGlsbGFCYXNlLmN4eCBiL3NyYy9TY2ludGlsbGFCYXNlLmN4eAppbmRleCAxZjRjMzYwZGEuLjkw
YjNkMzI3NSAxMDA2NDQKLS0tIGEvc3JjL1NjaW50aWxsYUJhc2UuY3h4CisrKyBiL3NyYy9TY2lu
dGlsbGFCYXNlLmN4eApAQCAtNzM1LDcgKzczNSw3IEBAIExpbmVFbmRUeXBlIExleFN0YXRlOjpM
aW5lRW5kVHlwZXNTdXBwb3J0ZWQoKSB7CiAJaWYgKGluc3RhbmNlKSB7CiAJCXJldHVybiBzdGF0
aWNfY2FzdDxMaW5lRW5kVHlwZT4oaW5zdGFuY2UtPkxpbmVFbmRUeXBlc1N1cHBvcnRlZCgpKTsK
IAl9Ci0JcmV0dXJuIExpbmVFbmRUeXBlOjpEZWZhdWx0OworCXJldHVybiBMaW5lRW5kVHlwZTo6
Tm9uZTsKIH0KIAogaW50IExleFN0YXRlOjpBbGxvY2F0ZVN1YlN0eWxlcyhpbnQgc3R5bGVCYXNl
LCBpbnQgbnVtYmVyU3R5bGVzKSB7Ci0tIAoyLjUyLjAKCg==
--6e89dc7b36667d365019546d4f359284facee1ed1f4c509bc4e4369a8012--

--39727a4579534970eb83f08e532cb6b943c65381b8fcd7c95ad3c9229e7e
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQEzBAABCAAdFiEEB/6AD3js1eGB4raKarMDYY4q6voFAmmKCM0ACgkQarMDYY4q
6vrqGwf/dRZk5eSd7OTTeByhHyutUVTw/bD+oohVeoXrpQhExdH8JUirxA3ubL45
kwifc0u1WgAeRdMFs+tQ5wca9doHqRoKyQ6jf/x69ZZspRmBGw5Pq0u+Ho4OPVyc
Q+rqzLbMoKOm8+z62qU6JMtuISwwk+TIHZg81wpqCrgwBDjmc+KeKSVb7JeGQ6kf
xuhTVeeT2wU4xPhzJBDK2ofvKZTnugnDiorFkbLa0IEwv4PM7BeodXWn+jrmvNRy
QQqysQCSXXP2bSEdyx0yzfS80OBt5waFZn/au9yW/vImtrKQQ4SWLSV29tdiFdi8
8G6X61lXWCz8T6EQMoGEGUTIC2X/Sw==
=i6UO
-----END PGP SIGNATURE-----

--39727a4579534970eb83f08e532cb6b943c65381b8fcd7c95ad3c9229e7e--