Re: Decreasing seams in scaled windows

Neil Hodgson <[email protected]> Tue, 16 Jun 2026 09:56:08 +1000
Newsgroups gmane.comp.lib.scintilla.devel
Message-ID <CACWkrTgsnwcr_8C53NfpBfFptT+5dURNTE3vHWJpG2i6MumVhQ@mail.gmail.com>
--000000000000ab1cfb0654539277
Content-Type: text/plain; charset="UTF-8"

An updated version is available that fixes problems with scrolling and
position+size of calltips and autocompletion.

A ScaleTechnique property was added with values
SCALE_TECHNIQUE_DEFAULT=0, SCALE_TECHNIQUE_PIXEL_ALIGNED=1 controlled
with a SCI_SETSCALETECHNIQUE API.

The ScaleTechnique property may get additional enumeration values or
modifying bit flags with future refinements. This feature is marked
provisional so may change.

While the calltips and autocompletion lists are positioned under the
caret, they do not always flip above the caret when there is no room
below. This is because scaling is not consistently taken into account
when checking the bottom of the screen or window.

Autocompletion lists were made slightly wider as text could be
truncated with ... in some cases. This is from converting coordinates
that are scaled by a fraction to integers and there may be other
instances with similar issues.

The patch changes the location of the output shared libraries to be in
scintilla/bin as they were often in
scintilla/qt/ScintillaEditBase/bin. Newer versions of qmake (or Qt
Creator) seemed to use a different base or current directory when
building and this caused problems for downstream projects like Haven
that were coded to previous behaviour.

Haven was updated as https://www.scintilla.org/HavenScale4.zip to
match the changes in the patch.

Patch attached.

This may be committed to the main repository for the next release, so
anyone who thinks it may cause problems or want changes should speak
up now.

Neil

-- 
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/CACWkrTgsnwcr_8C53NfpBfFptT%2B5dURNTE3vHWJpG2i6MumVhQ%40mail.gmail.com.

--000000000000ab1cfb0654539277
Content-Type: text/plain; charset="US-ASCII"; name="QtScaleH.patch"
Content-Disposition: attachment; filename="QtScaleH.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_mqfvdxjh0>
X-Attachment-Id: f_mqfvdxjh0

ZGlmZiAtciAwMzNjMzQyZTY2NTYgY2FsbC9TY2ludGlsbGFDYWxsLmN4eAotLS0gYS9jYWxsL1Nj
aW50aWxsYUNhbGwuY3h4CVNhdCBKdW4gMTMgMTE6MDE6NTYgMjAyNiArMTAwMAorKysgYi9jYWxs
L1NjaW50aWxsYUNhbGwuY3h4CVR1ZSBKdW4gMTYgMDk6MjQ6MzAgMjAyNiArMTAwMApAQCAtMzU1
OSw2ICszNTU5LDE0IEBACiAJQ2FsbFBvaW50ZXIoTWVzc2FnZTo6U2V0SUxleGVyLCAwLCBpbGV4
ZXIpOwogfQogCit2b2lkIFNjaW50aWxsYUNhbGw6OlNldFNjYWxlVGVjaG5pcXVlKFNjaW50aWxs
YTo6U2NhbGVUZWNobmlxdWUgdGVjaG5pcXVlKSB7CisJQ2FsbChNZXNzYWdlOjpTZXRTY2FsZVRl
Y2huaXF1ZSwgc3RhdGljX2Nhc3Q8dWludHB0cl90Pih0ZWNobmlxdWUpKTsKK30KKworU2NhbGVU
ZWNobmlxdWUgU2NpbnRpbGxhQ2FsbDo6U2NhbGVUZWNobmlxdWUoKSB7CisJcmV0dXJuIHN0YXRp
Y19jYXN0PFNjaW50aWxsYTo6U2NhbGVUZWNobmlxdWU+KENhbGwoTWVzc2FnZTo6R2V0U2NhbGVU
ZWNobmlxdWUpKTsKK30KKwogQmlkaXJlY3Rpb25hbCBTY2ludGlsbGFDYWxsOjpCaWRpcmVjdGlv
bmFsKCkgewogCXJldHVybiBzdGF0aWNfY2FzdDxTY2ludGlsbGE6OkJpZGlyZWN0aW9uYWw+KENh
bGwoTWVzc2FnZTo6R2V0QmlkaXJlY3Rpb25hbCkpOwogfQpkaWZmIC1yIDAzM2MzNDJlNjY1NiBk
b2MvU2NpbnRpbGxhRG9jLmh0bWwKLS0tIGEvZG9jL1NjaW50aWxsYURvYy5odG1sCVNhdCBKdW4g
MTMgMTE6MDE6NTYgMjAyNiArMTAwMAorKysgYi9kb2MvU2NpbnRpbGxhRG9jLmh0bWwJVHVlIEp1
biAxNiAwOToyNDozMCAyMDI2ICsxMDAwCkBAIC01MTA2LDYgKzUxMDYsOCBAQAogICAgIDwvY29k
ZT4KIDxkaXYgIGNsYXNzPSJwcm92aXNpb25hbCI+CiAgICAgPGNvZGU+CisgICAgIDxhIGNsYXNz
PSJtZXNzYWdlIiBocmVmPSIjU0NJX1NFVFNDQUxFVEVDSE5JUVVFIj5TQ0lfU0VUU0NBTEVURUNI
TklRVUUoaW50IHRlY2huaXF1ZSk8L2E+PGJyIC8+CisgICAgIDxhIGNsYXNzPSJtZXNzYWdlIiBo
cmVmPSIjU0NJX0dFVFNDQUxFVEVDSE5JUVVFIj5TQ0lfR0VUU0NBTEVURUNITklRVUUgJnJhcnI7
IGludDwvYT48YnIgLz4KICAgICAgPGEgY2xhc3M9Im1lc3NhZ2UiIGhyZWY9IiNTQ0lfU0VUQklE
SVJFQ1RJT05BTCI+PHNwYW4gY2xhc3M9InByb3Zpc2lvbmFsIj5TQ0lfU0VUQklESVJFQ1RJT05B
TChpbnQgYmlkaXJlY3Rpb25hbCk8L3NwYW4+PC9hPjxiciAvPgogICAgICA8YSBjbGFzcz0ibWVz
c2FnZSIgaHJlZj0iI1NDSV9HRVRCSURJUkVDVElPTkFMIj5TQ0lfR0VUQklESVJFQ1RJT05BTCAm
cmFycjsgaW50PC9hPjxiciAvPgogICAgIDwvY29kZT4KQEAgLTUzNTYsNiArNTM1OCwzNSBAQAog
ICAgICBub3RpZmljYXRpb24gKHdpdGggPGNvZGUgY2xhc3M9InBhcmFtZXRlciI+Y2hhcmFjdGVy
U291cmNlPC9jb2RlPiBzZXQgdG8gPGNvZGU+U0NfQ0hBUkFDVEVSU09VUkNFX1RFTlRBVElWRV9J
TlBVVDwvY29kZT4pIGlzIHNlbnQgZm9yIGVhY2ggY2hhcmFjdGVyLjwvcD4KIAogPGRpdiAgY2xh
c3M9InByb3Zpc2lvbmFsIj4KKyAgIDxwPjxiIGlkPSJTQ0lfU0VUU0NBTEVURUNITklRVUUiPlND
SV9TRVRTQ0FMRVRFQ0hOSVFVRShpbnQgdGVjaG5pcXVlKTwvYj48YnIgLz4KKyAgICAgPGIgaWQ9
IlNDSV9HRVRTQ0FMRVRFQ0hOSVFVRSI+U0NJX0dFVFNDQUxFVEVDSE5JUVVFICZyYXJyOyBpbnQ8
L2I+PGJyIC8+CisgICAgIFRoaXMgc2V0dGluZyBjaGFuZ2VzIHRoZSBpbXBsZW1lbnRhdGlvbiBv
ZiBkaXNwbGF5IHNjYWxpbmcgb24gc29tZSBwbGF0Zm9ybXMuPC9wPgorCisgICAgPHRhYmxlIGNs
YXNzPSJzdGFuZGFyZCIgc3VtbWFyeT0iVGVjaG5vbG9neSBjaG9pY2UiPgorICAgICAgPHRib2R5
IHZhbGlnbj0idG9wIj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0aCBhbGlnbj0ibGVmdCI+
PGNvZGU+U0NBTEVfVEVDSE5JUVVFX0RFRkFVTFQ8L2NvZGU+PC90aD4KKworICAgICAgICAgIDx0
ZD4wPC90ZD4KKworICAgICAgICAgIDx0ZD5EZWZhdWx0IGJlaGF2aW91ciBmb3IgdGhlIHBsYXRm
b3JtLjwvdGQ+CisgICAgICAgIDwvdHI+CisKKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0aCBh
bGlnbj0ibGVmdCI+PGNvZGU+U0NBTEVfVEVDSE5JUVVFX1BJWEVMX0FMSUdORUQ8L2NvZGU+PC90
aD4KKworICAgICAgICAgIDx0ZD4xPC90ZD4KKworICAgICAgICAgIDx0ZD5BbGlnbiB0b3AgYW5k
IGJvdHRvbSBvZiBsaW5lcyB0byBwaHlzaWNhbCBwaXhlbHMgYW5kIGF2b2lkICdzZWFtcycgYmV0
d2VlbiBiYWNrZ3JvdW5kIHJlY3RhbmdsZXMgZm9yIGZyYWN0aW9uYWwgc2NhbGluZy4KKwkgIElt
cGxlbWVudGVkIG9uIFF0LiBUaGlzIG1vZGUgbWF5IGJlIHNsb3dlciB0aGFuIHRoZSBkZWZhdWx0
LjwvdGQ+CisgICAgICAgIDwvdHI+CisKKyAgICAgIDwvdGJvZHk+CisgICAgPC90YWJsZT4KKzwv
ZGl2PgorICAgIDxiciAvPgorCis8ZGl2ICBjbGFzcz0icHJvdmlzaW9uYWwiPgogICAgIDxhIGhy
ZWY9IiNQcm92aXNpb25hbE1lc3NhZ2VzIj5UaGVzZSBiaWRpcmVjdGlvbmFsIGZlYXR1cmVzIGFy
ZSBleHBlcmltZW50YWwgYW5kIGluY29tcGxldGUuPC9hPjxiciAvPgogICAgIDxwPjxiIGlkPSJT
Q0lfU0VUQklESVJFQ1RJT05BTCI+U0NJX1NFVEJJRElSRUNUSU9OQUwoaW50IGJpZGlyZWN0aW9u
YWwpPC9iPjxiciAvPgogICAgICA8YiBpZD0iU0NJX0dFVEJJRElSRUNUSU9OQUwiPlNDSV9HRVRC
SURJUkVDVElPTkFMICZyYXJyOyBpbnQ8L2I+PGJyIC8+CmRpZmYgLXIgMDMzYzM0MmU2NjU2IGlu
Y2x1ZGUvU2NpbnRpbGxhLmgKLS0tIGEvaW5jbHVkZS9TY2ludGlsbGEuaAlTYXQgSnVuIDEzIDEx
OjAxOjU2IDIwMjYgKzEwMDAKKysrIGIvaW5jbHVkZS9TY2ludGlsbGEuaAlUdWUgSnVuIDE2IDA5
OjI0OjMwIDIwMjYgKzEwMDAKQEAgLTEzMzMsNiArMTMzMywxMCBAQAogI2RlZmluZSBTQ05fTUFS
R0lOUklHSFRDTElDSyAyMDMxCiAjZGVmaW5lIFNDTl9BVVRPQ1NFTEVDVElPTkNIQU5HRSAyMDMy
CiAjaWZuZGVmIFNDSV9ESVNBQkxFX1BST1ZJU0lPTkFMCisjZGVmaW5lIFNDQUxFX1RFQ0hOSVFV
RV9ERUZBVUxUIDAKKyNkZWZpbmUgU0NBTEVfVEVDSE5JUVVFX1BJWEVMX0FMSUdORUQgMQorI2Rl
ZmluZSBTQ0lfU0VUU0NBTEVURUNITklRVUUgMjgyMAorI2RlZmluZSBTQ0lfR0VUU0NBTEVURUNI
TklRVUUgMjgyMQogI2RlZmluZSBTQ19CSURJUkVDVElPTkFMX0RJU0FCTEVEIDAKICNkZWZpbmUg
U0NfQklESVJFQ1RJT05BTF9MMlIgMQogI2RlZmluZSBTQ19CSURJUkVDVElPTkFMX1IyTCAyCmRp
ZmYgLXIgMDMzYzM0MmU2NjU2IGluY2x1ZGUvU2NpbnRpbGxhLmlmYWNlCi0tLSBhL2luY2x1ZGUv
U2NpbnRpbGxhLmlmYWNlCVNhdCBKdW4gMTMgMTE6MDE6NTYgMjAyNiArMTAwMAorKysgYi9pbmNs
dWRlL1NjaW50aWxsYS5pZmFjZQlUdWUgSnVuIDE2IDA5OjI0OjMwIDIwMjYgKzEwMDAKQEAgLTM1
NDIsNiArMzU0MiwxNiBAQAogCiBjYXQgUHJvdmlzaW9uYWwKIAorZW51IFNjYWxlVGVjaG5pcXVl
PVNDQUxFX1RFQ0hOSVFVRV8KK3ZhbCBTQ0FMRV9URUNITklRVUVfREVGQVVMVD0wCit2YWwgU0NB
TEVfVEVDSE5JUVVFX1BJWEVMX0FMSUdORUQ9MQorCisjIFNldCB0aGUgc2NhbGUgdGVjaG5pcXVl
CitzZXQgdm9pZCBTZXRTY2FsZVRlY2huaXF1ZT0yODIwKFNjYWxlVGVjaG5pcXVlIHRlY2huaXF1
ZSwpCisKKyMgR2V0IHRoZSBzY2FsZSB0ZWNobmlxdWUKK2dldCBTY2FsZVRlY2huaXF1ZSBHZXRT
Y2FsZVRlY2huaXF1ZT0yODIxKCwpCisKIGVudSBCaWRpcmVjdGlvbmFsPVNDX0JJRElSRUNUSU9O
QUxfCiB2YWwgU0NfQklESVJFQ1RJT05BTF9ESVNBQkxFRD0wCiB2YWwgU0NfQklESVJFQ1RJT05B
TF9MMlI9MQpkaWZmIC1yIDAzM2MzNDJlNjY1NiBpbmNsdWRlL1NjaW50aWxsYUNhbGwuaAotLS0g
YS9pbmNsdWRlL1NjaW50aWxsYUNhbGwuaAlTYXQgSnVuIDEzIDExOjAxOjU2IDIwMjYgKzEwMDAK
KysrIGIvaW5jbHVkZS9TY2ludGlsbGFDYWxsLmgJVHVlIEp1biAxNiAwOToyNDozMCAyMDI2ICsx
MDAwCkBAIC05MzUsNiArOTM1LDggQEAKIAlpbnQgRGVzY3JpcHRpb25PZlN0eWxlKGludCBzdHls
ZSwgY2hhciAqZGVzY3JpcHRpb24pOwogCXN0ZDo6c3RyaW5nIERlc2NyaXB0aW9uT2ZTdHlsZShp
bnQgc3R5bGUpOwogCXZvaWQgU2V0SUxleGVyKHZvaWQgKmlsZXhlcik7CisJdm9pZCBTZXRTY2Fs
ZVRlY2huaXF1ZShTY2ludGlsbGE6OlNjYWxlVGVjaG5pcXVlIHRlY2huaXF1ZSk7CisJU2NpbnRp
bGxhOjpTY2FsZVRlY2huaXF1ZSBTY2FsZVRlY2huaXF1ZSgpOwogCVNjaW50aWxsYTo6QmlkaXJl
Y3Rpb25hbCBCaWRpcmVjdGlvbmFsKCk7CiAJdm9pZCBTZXRCaWRpcmVjdGlvbmFsKFNjaW50aWxs
YTo6QmlkaXJlY3Rpb25hbCBiaWRpcmVjdGlvbmFsKTsKIApkaWZmIC1yIDAzM2MzNDJlNjY1NiBp
bmNsdWRlL1NjaW50aWxsYU1lc3NhZ2VzLmgKLS0tIGEvaW5jbHVkZS9TY2ludGlsbGFNZXNzYWdl
cy5oCVNhdCBKdW4gMTMgMTE6MDE6NTYgMjAyNiArMTAwMAorKysgYi9pbmNsdWRlL1NjaW50aWxs
YU1lc3NhZ2VzLmgJVHVlIEp1biAxNiAwOToyNDozMCAyMDI2ICsxMDAwCkBAIC04MzEsNiArODMx
LDggQEAKIAlUYWdzT2ZTdHlsZSA9IDQwMzEsCiAJRGVzY3JpcHRpb25PZlN0eWxlID0gNDAzMiwK
IAlTZXRJTGV4ZXIgPSA0MDMzLAorCVNldFNjYWxlVGVjaG5pcXVlID0gMjgyMCwKKwlHZXRTY2Fs
ZVRlY2huaXF1ZSA9IDI4MjEsCiAJR2V0QmlkaXJlY3Rpb25hbCA9IDI3MDgsCiAJU2V0QmlkaXJl
Y3Rpb25hbCA9IDI3MDksCiB9OwpkaWZmIC1yIDAzM2MzNDJlNjY1NiBpbmNsdWRlL1NjaW50aWxs
YVR5cGVzLmgKLS0tIGEvaW5jbHVkZS9TY2ludGlsbGFUeXBlcy5oCVNhdCBKdW4gMTMgMTE6MDE6
NTYgMjAyNiArMTAwMAorKysgYi9pbmNsdWRlL1NjaW50aWxsYVR5cGVzLmgJVHVlIEp1biAxNiAw
OToyNDozMCAyMDI2ICsxMDAwCkBAIC02NTcsNiArNjU3LDExIEBACiAJSW1lUmVzdWx0ID0gMiwK
IH07CiAKK2VudW0gY2xhc3MgU2NhbGVUZWNobmlxdWUgeworCURlZmF1bHQgPSAwLAorCVBpeGVs
QWxpZ25lZCA9IDEsCit9OworCiBlbnVtIGNsYXNzIEJpZGlyZWN0aW9uYWwgewogCURpc2FibGVk
ID0gMCwKIAlMMlIgPSAxLApkaWZmIC1yIDAzM2MzNDJlNjY1NiBxdC9TY2ludGlsbGFFZGl0QmFz
ZS9QbGF0UXQuY3BwCi0tLSBhL3F0L1NjaW50aWxsYUVkaXRCYXNlL1BsYXRRdC5jcHAJU2F0IEp1
biAxMyAxMTowMTo1NiAyMDI2ICsxMDAwCisrKyBiL3F0L1NjaW50aWxsYUVkaXRCYXNlL1BsYXRR
dC5jcHAJVHVlIEp1biAxNiAwOToyNDozMCAyMDI2ICsxMDAwCkBAIC0xODMsMTMgKzE4MywxNCBA
QAogCiBTdXJmYWNlSW1wbDo6U3VyZmFjZUltcGwoKSA9IGRlZmF1bHQ7CiAKLVN1cmZhY2VJbXBs
OjpTdXJmYWNlSW1wbChpbnQgd2lkdGgsIGludCBoZWlnaHQsIFN1cmZhY2VNb2RlIG1vZGVfKQor
U3VyZmFjZUltcGw6OlN1cmZhY2VJbXBsKGludCB3aWR0aCwgaW50IGhlaWdodCwgU3VyZmFjZU1v
ZGUgbW9kZV8sIHFyZWFsIHNjYWxlXykKIHsKIAlpZiAod2lkdGggPCAxKSB3aWR0aCA9IDE7CiAJ
aWYgKGhlaWdodCA8IDEpIGhlaWdodCA9IDE7CiAJZGV2aWNlT3duZWQgPSB0cnVlOwogCWRldmlj
ZSA9IG5ldyBRUGl4bWFwKHdpZHRoLCBoZWlnaHQpOwogCW1vZGUgPSBtb2RlXzsKKwlzY2FsZSA9
IHNjYWxlXzsKIH0KIAogU3VyZmFjZUltcGw6On5TdXJmYWNlSW1wbCgpCkBAIC0yMTIsMjEgKzIx
Myw0NCBAQAogCXBhaW50ZXJPd25lZCA9IGZhbHNlOwogfQogCitkb3VibGUgU2NhbGVPZldpbmRv
dyhXaW5kb3dJRCB3aWQpCit7CisJY29uc3QgUVdpZGdldCAqd2lkZ2V0ID0gd2luZG93KHdpZCk7
CisJaWYgKCF3aWRnZXQpIHsKKwkJcmV0dXJuIDEuMDsKKwl9CisJY29uc3QgUVZhcmlhbnQgdmFy
aWFudCA9IHdpZGdldC0+cHJvcGVydHkoIlNjaW50aWxsYVNjYWxlIik7CisJcmV0dXJuIHZhcmlh
bnQudG9Eb3VibGUoKTsKK30KKworZG91YmxlIFNjYWxlVG9NdWx0aXBseShXaW5kb3dJRCB3aWQp
Cit7CisJY29uc3QgcXJlYWwgc2NhbGUgPSBTY2FsZU9mV2luZG93KHdpZCk7CisJcmV0dXJuIHNj
YWxlID8gc2NhbGUgOiAxLjA7Cit9CisKIHZvaWQgU3VyZmFjZUltcGw6OkluaXQoV2luZG93SUQg
d2lkKQogewogCVJlbGVhc2UoKTsKLQlkZXZpY2UgPSBzdGF0aWNfY2FzdDxRV2lkZ2V0ICo+KHdp
ZCk7CisJZGV2aWNlID0gd2luZG93KHdpZCk7CisJc2NhbGUgPSBTY2FsZU9mV2luZG93KHdpZCk7
CiB9CiAKIHZvaWQgU3VyZmFjZUltcGw6OkluaXQoU3VyZmFjZUlEIHNpZCwgV2luZG93SUQgLyp3
aWQqLykKIHsKIAlSZWxlYXNlKCk7CiAJZGV2aWNlID0gc3RhdGljX2Nhc3Q8UVBhaW50RGV2aWNl
ICo+KHNpZCk7CisJc2NhbGUgPSAwLjA7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxTdXJmYWNlPiBT
dXJmYWNlSW1wbDo6QWxsb2NhdGVQaXhNYXAoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewotCXJl
dHVybiBzdGQ6Om1ha2VfdW5pcXVlPFN1cmZhY2VJbXBsPih3aWR0aCwgaGVpZ2h0LCBtb2RlKTsK
KwlyZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxTdXJmYWNlSW1wbD4od2lkdGgsIGhlaWdodCwgbW9k
ZSwgc2NhbGUpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8U3VyZmFjZT4gU3VyZmFjZUltcGxfQWxs
b2NhdGVQaXhNYXAoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBTdXJmYWNlTW9kZSBtb2RlLCBxcmVh
bCBzY2FsZSkKK3sKKwlyZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxTdXJmYWNlSW1wbD4od2lkdGgs
IGhlaWdodCwgbW9kZSwgc2NhbGUpOwogfQogCiB2b2lkIFN1cmZhY2VJbXBsOjpTZXRNb2RlKFN1
cmZhY2VNb2RlIG1vZGVfKQpAQCAtMzA5LDcgKzMzMywxMSBAQAogCiBpbnQgU3VyZmFjZUltcGw6
OkRldmljZUhlaWdodEZvbnQoaW50IHBvaW50cykKIHsKLQlyZXR1cm4gcG9pbnRzOworCWlmIChz
Y2FsZSkgeworCQlyZXR1cm4gcG9pbnRzICogc2NhbGU7CisJfSBlbHNlIHsKKwkJcmV0dXJuIHBv
aW50czsKKwl9CiB9CiAKIHZvaWQgU3VyZmFjZUltcGw6OkxpbmVEcmF3KFBvaW50IHN0YXJ0LCBQ
b2ludCBlbmQsIFN0cm9rZSBzdHJva2UpCkBAIC03OTYsNiArODI0LDEwIEBACiAJCXBhaW50ZXIt
PnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OlRleHRBbnRpYWxpYXNpbmcsIHRydWUpOwogCiAJCXBh
aW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgdHJ1ZSk7CisKKwkJ
aWYgKHNjYWxlKSB7CisJCQlwYWludGVyLT5zY2FsZSgxLjAgLyBzY2FsZSwgMS4wIC8gc2NhbGUp
OworCQl9CiAJfQogCiAJcmV0dXJuIHBhaW50ZXI7CkBAIC04MTEsMTEgKzg0Myw2IEBACiAKIG5h
bWVzcGFjZSB7CiAKLVFXaWRnZXQgKndpbmRvdyhXaW5kb3dJRCB3aWQpIG5vZXhjZXB0Ci17Ci0J
cmV0dXJuIHN0YXRpY19jYXN0PFFXaWRnZXQgKj4od2lkKTsKLX0KLQogUVJlY3QgU2NyZWVuUmVj
dGFuZ2xlRm9yUG9pbnQoUVBvaW50IHBvc0dsb2JhbCkKIHsKICNpZiBRVF9WRVJTSU9OID49IFFU
X1ZFUlNJT05fQ0hFQ0soNSwgMTAsIDApCkBAIC04NTQsNiArODgxLDggQEAKIAogdm9pZCBXaW5k
b3c6OlNldFBvc2l0aW9uUmVsYXRpdmUoUFJlY3RhbmdsZSByYywgY29uc3QgV2luZG93ICpyZWxh
dGl2ZVRvKQogeworCWNvbnN0IHFyZWFsIHNjYWxlID0gU2NhbGVUb011bHRpcGx5KHJlbGF0aXZl
VG8tPndpZCk7CisJcmMgPSByYyAvIHNjYWxlOwogCVFQb2ludCBvUG9zID0gd2luZG93KHJlbGF0
aXZlVG8tPndpZCktPm1hcFRvR2xvYmFsKFFQb2ludCgwLDApKTsKIAlpbnQgb3ggPSBvUG9zLngo
KTsKIAlpbnQgb3kgPSBvUG9zLnkoKTsKQEAgLTg4NCw3ICs5MTMsOSBAQAogUFJlY3RhbmdsZSBX
aW5kb3c6OkdldENsaWVudFBvc2l0aW9uKCkgY29uc3QKIHsKIAkvLyBUaGUgY2xpZW50IHBvc2l0
aW9uIGlzIHRoZSB3aW5kb3cgcG9zaXRpb24KLQlyZXR1cm4gR2V0UG9zaXRpb24oKTsKKwljb25z
dCBxcmVhbCBzY2FsZSA9IFNjYWxlVG9NdWx0aXBseSh3aWQpOworCWNvbnN0IFBSZWN0YW5nbGUg
cmMgPSBHZXRQb3NpdGlvbigpOworCXJldHVybiByYyAqIHNjYWxlOwogfQogCiB2b2lkIFdpbmRv
dzo6U2hvdyhib29sIHNob3cpCkBAIC05MDEsOCArOTMyLDIxIEBACiAKIHZvaWQgV2luZG93OjpJ
bnZhbGlkYXRlUmVjdGFuZ2xlKFBSZWN0YW5nbGUgcmMpCiB7Ci0JaWYgKHdpZCkKKwlpZiAod2lk
KSB7CisJCWNvbnN0IHFyZWFsIHNjYWxlID0gU2NhbGVPZldpbmRvdyh3aWQpOworCQlpZiAoc2Nh
bGUpIHsKKyNpZiAhZGVmaW5lZChRX09TX1dJTikgJiYgIWRlZmluZWQoUV9PU19BUFBMRSkKKwkJ
CS8vIFVzaW5nIFgxMSBvciBXYXlsYW5kLCBsaWtlbHkgTGludXggYnV0IG1heSBiZSBhIEJTRCBv
ciBzaW1pbGFyCisJCQlpZiAoc2NhbGUgIT0gMS4wICYmIHNjYWxlICE9IDIuMCkgeworCQkJCS8v
IEZyYWN0aW9uYWwgc2NhbGluZyBsZWF2ZXMgcmVwYWludCBkZWJyaXMsIHNvIHJlZHJhdyBjb21w
bGV0ZWx5CisJCQkJd2luZG93KHdpZCktPnVwZGF0ZSgpOworCQkJCXJldHVybjsKKwkJCX0KKyNl
bmRpZgorCQkJcmMgPSByYyAvIHNjYWxlOworCQl9CiAJCXdpbmRvdyh3aWQpLT51cGRhdGUoUVJl
Y3RGcm9tUFJlY3QocmMpKTsKKwl9CiB9CiAKIHZvaWQgV2luZG93OjpTZXRDdXJzb3IoQ3Vyc29y
IGN1cnMpCkBAIC05OTksNiArMTA0Myw3IEBACiAJaW50IHZpc2libGVSb3dzezV9OwogCVFNYXA8
aW50LFFQaXhtYXA+IGltYWdlczsKIAlmbG9hdCBpbWFnZVNjYWxlezEuMH07CisJUVdpZGdldCAq
b3duZXIgPSBudWxscHRyOwogfTsKIExpc3RCb3hJbXBsOjpMaXN0Qm94SW1wbCgpIG5vZXhjZXB0
ID0gZGVmYXVsdDsKIApAQCAtMTAxMiw3ICsxMDU3LDEwIEBACiAJdW5pY29kZU1vZGUgPSB1bmlj
b2RlTW9kZV87CiAKIAlRV2lkZ2V0ICpxcGFyZW50ID0gc3RhdGljX2Nhc3Q8UVdpZGdldCAqPihw
YXJlbnQuR2V0SUQoKSk7CisJb3duZXIgPSBxcGFyZW50OwogCUxpc3RXaWRnZXQgKmxpc3QgPSBu
ZXcgTGlzdFdpZGdldChxcGFyZW50KTsKKwljb25zdCBxcmVhbCBzY2FsZSA9IFNjYWxlT2ZXaW5k
b3cocGFyZW50LkdldElEKCkpOworCWxpc3QtPnNldFByb3BlcnR5KCJTY2ludGlsbGFTY2FsZSIs
IHNjYWxlKTsKIAogI2lmIGRlZmluZWQoUV9PU19XSU4pCiAJLy8gT24gV2luZG93cywgUXQ6OlRv
b2xUaXAgY2F1c2VzIGEgY3Jhc2ggd2hlbiB0aGUgbGlzdCBpcyBjbGlja2VkIG9uCkBAIC0xMDU0
LDcgKzExMDIsMTQgQEAKIAlMaXN0V2lkZ2V0ICpsaXN0ID0gR2V0V2lkZ2V0KCk7CiAJY29uc3Qg
Rm9udEFuZENoYXJhY3RlclNldCAqcGZhY3MgPSBBc0ZvbnRBbmRDaGFyYWN0ZXJTZXQoZm9udCk7
CiAJaWYgKHBmYWNzICYmIHBmYWNzLT5wZm9udCkgewotCQlsaXN0LT5zZXRGb250KCoocGZhY3Mt
PnBmb250KSk7CisJCVFGb250IGZvbnREZVNjYWxlZCA9ICoocGZhY3MtPnBmb250KTsKKwkJY29u
c3QgcXJlYWwgc2NhbGVPd25lciA9IFNjYWxlT2ZXaW5kb3cob3duZXIpOworCQlpZiAoc2NhbGVP
d25lcikgeworCQkJY29uc3QgcXJlYWwgc2NhbGUgPSB3aW5kb3cob3duZXIpLT5kZXZpY2VQaXhl
bFJhdGlvRigpOworCQkJcXJlYWwgcG9pbnRTaXplID0gZm9udERlU2NhbGVkLnBvaW50U2l6ZUYo
KSAvIHNjYWxlOworCQkJZm9udERlU2NhbGVkLnNldFBvaW50U2l6ZUYocG9pbnRTaXplKTsKKwkJ
fQorCQlsaXN0LT5zZXRGb250KGZvbnREZVNjYWxlZCk7CiAJfQogfQogdm9pZCBMaXN0Qm94SW1w
bDo6U2V0QXZlcmFnZUNoYXJXaWR0aChpbnQgLyp3aWR0aCovKSB7fQpAQCAtMTA4MSwxMCArMTEz
NiwxMSBAQAogCVFTdHlsZSAqc3R5bGUgPSBRQXBwbGljYXRpb246OnN0eWxlKCk7CiAJaW50IHdp
ZHRoID0gbGlzdC0+c2l6ZUhpbnRGb3JDb2x1bW4oMCkgKyAoMiAqIGxpc3QtPmZyYW1lV2lkdGgo
KSk7CiAJaWYgKExlbmd0aCgpID4gcm93cykgewotCQl3aWR0aCArPSBzdHlsZS0+cGl4ZWxNZXRy
aWMoUVN0eWxlOjpQTV9TY3JvbGxCYXJFeHRlbnQpOworCQl3aWR0aCArPSBzdHlsZS0+cGl4ZWxN
ZXRyaWMoUVN0eWxlOjpQTV9TY3JvbGxCYXJFeHRlbnQpICsgMTsKIAl9CiAKLQlyZXR1cm4gUFJl
Y3RhbmdsZSgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKKwljb25zdCBxcmVhbCBzY2FsZSA9IFNjYWxl
T2ZXaW5kb3cod2lkKTsKKwlyZXR1cm4gUFJlY3RhbmdsZSgwLCAwLCB3aWR0aCwgaGVpZ2h0KSAq
IChzY2FsZSA/IHNjYWxlIDogMS4wKTsKIH0KIGludCBMaXN0Qm94SW1wbDo6Q2FyZXRGcm9tRWRn
ZSgpCiB7CmRpZmYgLXIgMDMzYzM0MmU2NjU2IHF0L1NjaW50aWxsYUVkaXRCYXNlL1BsYXRRdC5o
Ci0tLSBhL3F0L1NjaW50aWxsYUVkaXRCYXNlL1BsYXRRdC5oCVNhdCBKdW4gMTMgMTE6MDE6NTYg
MjAyNiArMTAwMAorKysgYi9xdC9TY2ludGlsbGFFZGl0QmFzZS9QbGF0UXQuaAlUdWUgSnVuIDE2
IDA5OjI0OjMwIDIwMjYgKzEwMDAKQEAgLTc0LDYgKzc0LDEzIEBACiAJcmV0dXJuIFFQb2ludEYo
cXAueCwgcXAueSk7CiB9CiAKK2lubGluZSBRV2lkZ2V0ICp3aW5kb3coV2luZG93SUQgd2lkKSBu
b2V4Y2VwdAoreworCXJldHVybiBzdGF0aWNfY2FzdDxRV2lkZ2V0ICo+KHdpZCk7Cit9CisKK2Rv
dWJsZSBTY2FsZU9mV2luZG93KFdpbmRvd0lEIHdpZCk7CisKIGNsYXNzIFN1cmZhY2VJbXBsIDog
cHVibGljIFN1cmZhY2UgewogcHJpdmF0ZToKIAlRUGFpbnREZXZpY2UgKmRldmljZSA9IG51bGxw
dHI7CkBAIC04MSw2ICs4OCw3IEBACiAJYm9vbCBkZXZpY2VPd25lZCA9IGZhbHNlOwogCWJvb2wg
cGFpbnRlck93bmVkID0gZmFsc2U7CiAJU3VyZmFjZU1vZGUgbW9kZTsKKwlxcmVhbCBzY2FsZSA9
IDAuMDsKIAljb25zdCBjaGFyICpjb2RlY05hbWUgPSBudWxscHRyOwogCVFUZXh0Q29kZWMgKmNv
ZGVjID0gbnVsbHB0cjsKIApAQCAtODgsNyArOTYsNyBAQAogCiBwdWJsaWM6CiAJU3VyZmFjZUlt
cGwoKTsKLQlTdXJmYWNlSW1wbChpbnQgd2lkdGgsIGludCBoZWlnaHQsIFN1cmZhY2VNb2RlIG1v
ZGVfKTsKKwlTdXJmYWNlSW1wbChpbnQgd2lkdGgsIGludCBoZWlnaHQsIFN1cmZhY2VNb2RlIG1v
ZGVfLCBxcmVhbCBzY2FsZV8pOwogCXZpcnR1YWwgflN1cmZhY2VJbXBsKCkgb3ZlcnJpZGU7CiAK
IAl2b2lkIEluaXQoV2luZG93SUQgd2lkKSBvdmVycmlkZTsKQEAgLTE2NCw2ICsxNzIsOCBAQAog
CVFQYWludGVyICpHZXRQYWludGVyKCk7CiB9OwogCitzdGQ6OnVuaXF1ZV9wdHI8U3VyZmFjZT4g
U3VyZmFjZUltcGxfQWxsb2NhdGVQaXhNYXAoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBTdXJmYWNl
TW9kZSBtb2RlLCBxcmVhbCBzY2FsZSk7CisKIH0KIAogI2VuZGlmCmRpZmYgLXIgMDMzYzM0MmU2
NjU2IHF0L1NjaW50aWxsYUVkaXRCYXNlL1NjaW50aWxsYUVkaXRCYXNlLmNwcAotLS0gYS9xdC9T
Y2ludGlsbGFFZGl0QmFzZS9TY2ludGlsbGFFZGl0QmFzZS5jcHAJU2F0IEp1biAxMyAxMTowMTo1
NiAyMDI2ICsxMDAwCisrKyBiL3F0L1NjaW50aWxsYUVkaXRCYXNlL1NjaW50aWxsYUVkaXRCYXNl
LmNwcAlUdWUgSnVuIDE2IDA5OjI0OjMwIDIwMjYgKzEwMDAKQEAgLTEyNyw2ICsxMjcsMTMgQEAK
IAl9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gUUV2ZW50OjpIaWRlKSB7CiAJCXNldE1vdXNl
VHJhY2tpbmcoZmFsc2UpOwogCQlyZXN1bHQgPSBRQWJzdHJhY3RTY3JvbGxBcmVhOjpldmVudChl
dmVudCk7CisjaWYgUVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9OX0NIRUNLKDYsIDYsIDApCisJfSBl
bHNlIGlmIChldmVudC0+dHlwZSgpID09IFFFdmVudDo6RGV2aWNlUGl4ZWxSYXRpb0NoYW5nZSkg
eworCQkvLyBSZXNldCBjYWNoZWQgZGF0YQorCQlzcXQtPlNldFNjYWxlUHJvcGVydHkoKTsKKwkJ
c3F0LT5JbnZhbGlkYXRlU3R5bGVSZWRyYXcoKTsKKwkJcmVzdWx0ID0gUUFic3RyYWN0U2Nyb2xs
QXJlYTo6ZXZlbnQoZXZlbnQpOworI2VuZGlmCiAJfSBlbHNlIHsKIAkJcmVzdWx0ID0gUUFic3Ry
YWN0U2Nyb2xsQXJlYTo6ZXZlbnQoZXZlbnQpOwogCX0KQEAgLTMxOCw3ICszMjUsNyBAQAogCiB2
b2lkIFNjaW50aWxsYUVkaXRCYXNlOjptb3VzZVByZXNzRXZlbnQoUU1vdXNlRXZlbnQgKmV2ZW50
KQogewotCWNvbnN0IFBvaW50IHBvcyA9IFBvaW50RnJvbVFQb2ludChldmVudC0+cG9zKCkpOwor
CWNvbnN0IFBvaW50IHBvcyA9IFBvaW50RnJvbVFQb2ludChldmVudC0+cG9zKCkpICogKHNxdC0+
SXNQaXhlbEFsaWduZWRTY2FsZSgpID8gZGV2aWNlUGl4ZWxSYXRpb0YoKSA6IDEuMCk7CiAKIAll
bWl0IGJ1dHRvblByZXNzZWQoZXZlbnQpOwogCkBAIC0zNDcsNyArMzU0LDcgQEAKIAogdm9pZCBT
Y2ludGlsbGFFZGl0QmFzZTo6bW91c2VSZWxlYXNlRXZlbnQoUU1vdXNlRXZlbnQgKmV2ZW50KQog
ewotCWNvbnN0IFFQb2ludCBwb2ludCA9IGV2ZW50LT5wb3MoKTsKKwljb25zdCBRUG9pbnQgcG9p
bnQgPSBldmVudC0+cG9zKCkgKiAoc3F0LT5Jc1BpeGVsQWxpZ25lZFNjYWxlKCkgPyBkZXZpY2VQ
aXhlbFJhdGlvRigpIDogMS4wKTsKIAlpZiAoZXZlbnQtPmJ1dHRvbigpID09IFF0OjpMZWZ0QnV0
dG9uKQogCQlzcXQtPkJ1dHRvblVwV2l0aE1vZGlmaWVycyhQb2ludEZyb21RUG9pbnQocG9pbnQp
LCBUaW1lT2ZFdmVudCh0aW1lKSwgTW9kaWZpZXJzT2ZLZXlib2FyZCgpKTsKIApAQCAtMzY3LDcg
KzM3NCw3IEBACiAKIHZvaWQgU2NpbnRpbGxhRWRpdEJhc2U6Om1vdXNlTW92ZUV2ZW50KFFNb3Vz
ZUV2ZW50ICpldmVudCkKIHsKLQljb25zdCBQb2ludCBwb3MgPSBQb2ludEZyb21RUG9pbnQoZXZl
bnQtPnBvcygpKTsKKwljb25zdCBQb2ludCBwb3MgPSBQb2ludEZyb21RUG9pbnQoZXZlbnQtPnBv
cygpKSAgKiAoc3F0LT5Jc1BpeGVsQWxpZ25lZFNjYWxlKCkgPyBkZXZpY2VQaXhlbFJhdGlvRigp
IDogMS4wKTsKIAogCWNvbnN0IGJvb2wgc2hpZnQgPSBRQXBwbGljYXRpb246OmtleWJvYXJkTW9k
aWZpZXJzKCkgJiBRdDo6U2hpZnRNb2RpZmllcjsKIAljb25zdCBib29sIGN0cmwgID0gUUFwcGxp
Y2F0aW9uOjprZXlib2FyZE1vZGlmaWVycygpICYgUXQ6OkNvbnRyb2xNb2RpZmllcjsKZGlmZiAt
ciAwMzNjMzQyZTY2NTYgcXQvU2NpbnRpbGxhRWRpdEJhc2UvU2NpbnRpbGxhRWRpdEJhc2UucHJv
Ci0tLSBhL3F0L1NjaW50aWxsYUVkaXRCYXNlL1NjaW50aWxsYUVkaXRCYXNlLnBybwlTYXQgSnVu
IDEzIDExOjAxOjU2IDIwMjYgKzEwMDAKKysrIGIvcXQvU2NpbnRpbGxhRWRpdEJhc2UvU2NpbnRp
bGxhRWRpdEJhc2UucHJvCVR1ZSBKdW4gMTYgMDk6MjQ6MzAgMjAyNiArMTAwMApAQCAtMTAwLDcg
KzEwMCw3IEBACiAgICAgREVGSU5FUyArPSBOREVCVUc9MQogfQogCi1ERVNURElSID0gLi4vLi4v
YmluCitERVNURElSID0gJCRfUFJPX0ZJTEVfUFdEXy8uLi8uLi9iaW4KIAogbWFjeCB7CiAJUU1B
S0VfTEZMQUdTX1NPTkFNRSA9IC1XbCwtaW5zdGFsbF9uYW1lLEBleGVjdXRhYmxlX3BhdGgvLi4v
RnJhbWV3b3Jrcy8KZGlmZiAtciAwMzNjMzQyZTY2NTYgcXQvU2NpbnRpbGxhRWRpdEJhc2UvU2Np
bnRpbGxhUXQuY3BwCi0tLSBhL3F0L1NjaW50aWxsYUVkaXRCYXNlL1NjaW50aWxsYVF0LmNwcAlT
YXQgSnVuIDEzIDExOjAxOjU2IDIwMjYgKzEwMDAKKysrIGIvcXQvU2NpbnRpbGxhRWRpdEJhc2Uv
U2NpbnRpbGxhUXQuY3BwCVR1ZSBKdW4gMTYgMDk6MjQ6MzAgMjAyNiArMTAwMApAQCAtMzMsNiAr
MzMsNyBAQAogewogCiAJd01haW4gPSBzY3JvbGxBcmVhLT52aWV3cG9ydCgpOworCXNjcm9sbEFy
ZWEtPnZpZXdwb3J0KCktPnNldFByb3BlcnR5KCJTY2ludGlsbGFTY2FsZSIsIDAuMCk7CiAKIAlp
bWVJbnRlcmFjdGlvbiA9IElNRUludGVyYWN0aW9uOjpJbmxpbmU7CiAKQEAgLTcxNSw3ICs3MTYs
MTMgQEAKIAogCWlmICghY3Qud0NhbGxUaXAuQ3JlYXRlZCgpKSB7CiAJCVFXaWRnZXQgKnBDYWxs
VGlwID0gbmV3IENhbGxUaXBJbXBsKHNjcm9sbEFyZWEtPndpbmRvdygpLT53aW5kb3dIYW5kbGUo
KSwgJmN0KTsKKwkJY29uc3QgcXJlYWwgc2NhbGVEZXZpY2UgPSBTY2FsZU9mV2luZG93KHdNYWlu
LkdldElEKCkpOworCQlwQ2FsbFRpcC0+c2V0UHJvcGVydHkoIlNjaW50aWxsYVNjYWxlIiwKKwkJ
CXNjYWxlVGVjaG5pcXVlID09IFNjYWxlVGVjaG5pcXVlOjpQaXhlbEFsaWduZWQgPyBzY2FsZURl
dmljZSA6IDAuMCk7CisKIAkJY3Qud0NhbGxUaXAgPSBwQ2FsbFRpcDsKKwkJaWYgKHNjYWxlRGV2
aWNlKQorCQkJcmMgPSByYyAqIHNjYWxlRGV2aWNlOwogCQlwQ2FsbFRpcC0+bW92ZShyYy5sZWZ0
LCByYy50b3ApOwogCQlwQ2FsbFRpcC0+cmVzaXplKHJjLldpZHRoKCksIHJjLkhlaWdodCgpKTsK
IAl9CkBAIC03NzEsNiArNzc4LDE0IEBACiAJCWNhc2UgTWVzc2FnZTo6R2V0UmVjdGFuZ3VsYXJT
ZWxlY3Rpb25Nb2RpZmllcjoKIAkJCXJldHVybiByZWN0YW5ndWxhclNlbGVjdGlvbk1vZGlmaWVy
OwogCisJCWNhc2UgTWVzc2FnZTo6U2V0U2NhbGVUZWNobmlxdWU6CisJCQlzY2FsZVRlY2huaXF1
ZSA9IHN0YXRpY19jYXN0PFNjYWxlVGVjaG5pcXVlPih3UGFyYW0pOworCQkJSW52YWxpZGF0ZVN0
eWxlUmVkcmF3KCk7CisJCQlicmVhazsKKworCQljYXNlIE1lc3NhZ2U6OkdldFNjYWxlVGVjaG5p
cXVlOgorCQkJcmV0dXJuIHN0YXRpY19jYXN0PHNwdHJfdD4oc2NhbGVUZWNobmlxdWUpOworCiAJ
CWRlZmF1bHQ6CiAJCQlyZXR1cm4gU2NpbnRpbGxhQmFzZTo6V25kUHJvYyhpTWVzc2FnZSwgd1Bh
cmFtLCBsUGFyYW0pOwogCQl9CkBAIC04MDUsMjAgKzgyMCw1NSBAQAogCXJldHVybiByZXR1cm5W
YWx1ZTsKIH0KIAordm9pZCBTY2ludGlsbGFRdDo6U2V0U2NhbGVQcm9wZXJ0eSgpCit7CisJcXJl
YWwgc2NhbGUgPSAwLjA7CisJaWYgKHNjYWxlVGVjaG5pcXVlID09IFNjYWxlVGVjaG5pcXVlOjpQ
aXhlbEFsaWduZWQpIHsKKwkJUVdpZGdldCAqd2lkZ2V0ID0gd2luZG93KHdNYWluLkdldElEKCkp
OworCQlzY2FsZSA9IHdpZGdldC0+ZGV2aWNlUGl4ZWxSYXRpb0YoKTsKKwl9CisJc2Nyb2xsQXJl
YS0+dmlld3BvcnQoKS0+c2V0UHJvcGVydHkoIlNjaW50aWxsYVNjYWxlIiwgc2NhbGUpOworfQor
CiAvLyBBZGRpdGlvbnMgdG8gbWVyZ2UgaW4gU2NpZW50aWZpYyBUb29sd29ya3Mgd2lkZ2V0IHN0
cnVjdHVyZQogCiB2b2lkIFNjaW50aWxsYVF0OjpQYXJ0aWFsUGFpbnQoY29uc3QgUFJlY3Rhbmds
ZSAmcmVjdCkKIHsKLQlyY1BhaW50ID0gcmVjdDsKKwlTZXRTY2FsZVByb3BlcnR5KCk7CisJaWYg
KHNjYWxlVGVjaG5pcXVlID09IFNjYWxlVGVjaG5pcXVlOjpQaXhlbEFsaWduZWQpIHsKKwkJUVdp
ZGdldCAqd2lkZ2V0ID0gd2luZG93KHdNYWluLkdldElEKCkpOworCQlyY1BhaW50ID0gcmVjdCAq
IHdpZGdldC0+ZGV2aWNlUGl4ZWxSYXRpb0YoKTsKKwl9IGVsc2UgeworCQlyY1BhaW50ID0gcmVj
dDsKKwl9CiAJcGFpbnRTdGF0ZSA9IFBhaW50U3RhdGU6OnBhaW50aW5nOwogCVBSZWN0YW5nbGUg
cmNDbGllbnQgPSBHZXRDbGllbnRSZWN0YW5nbGUoKTsKIAlwYWludGluZ0FsbFRleHQgPSByY1Bh
aW50LkNvbnRhaW5zKHJjQ2xpZW50KTsKIAogCUF1dG9TdXJmYWNlIHN1cmZhY2VQYWludCh0aGlz
KTsKLQlQYWludChzdXJmYWNlUGFpbnQsIHJjUGFpbnQpOworCWlmIChzY2FsZVRlY2huaXF1ZSA9
PSBTY2FsZVRlY2huaXF1ZTo6UGl4ZWxBbGlnbmVkKSB7CisJCS8vIENyZWF0ZSBCaXRtYXAgb2Yg
ZXhhY3RseSB3aW5kb3cgc2l6ZSB0aGVuIGJsaXQgYWZ0ZXIgUGFpbnQgY2FsbAorCQlRV2lkZ2V0
ICp3aWRnZXQgPSB3aW5kb3cod01haW4uR2V0SUQoKSk7CisJCWNvbnN0IHFyZWFsIHNjYWxlID0g
d2lkZ2V0LT5kZXZpY2VQaXhlbFJhdGlvRigpOworCQljb25zdCBRU2l6ZSBzeiA9IHdpZGdldC0+
c2l6ZSgpICogc2NhbGU7CisJCWNvbnN0IGludCB3ID0gc3oud2lkdGgoKTsKKwkJY29uc3QgaW50
IGggPSBzei5oZWlnaHQoKTsKKwkJc3RkOjp1bmlxdWVfcHRyPFN1cmZhY2U+IHN1cmZQaXggPSBT
dXJmYWNlSW1wbF9BbGxvY2F0ZVBpeE1hcCh3LCBoLCBDdXJyZW50U3VyZmFjZU1vZGUoKSwgMC4w
KTsKKwkJUFJlY3RhbmdsZSByY1NjYWxlZCA9IFBSZWN0YW5nbGU6OkZyb21JbnRzKDAsIDAsIHcs
IGgpOworCQlQYWludChzdXJmUGl4LmdldCgpLCByY1NjYWxlZCk7CisJCXN1cmZhY2VQYWludC0+
Q29weShyY1NjYWxlZCwgUG9pbnQoMCwwKSwgKnN1cmZQaXgpOworCX0gZWxzZSB7CisJCVBhaW50
KHN1cmZhY2VQYWludCwgcmNQYWludCk7CisJfQogCXN1cmZhY2VQYWludC0+UmVsZWFzZSgpOwog
CiAJaWYgKHBhaW50U3RhdGUgPT0gUGFpbnRTdGF0ZTo6YWJhbmRvbmVkKSB7CisJCWlmIChzY2Fs
ZVRlY2huaXF1ZSA9PSBTY2FsZVRlY2huaXF1ZTo6UGl4ZWxBbGlnbmVkKSB7CisJCQkvLyBTaG91
bGQgdHJ5IG1vcmUgcmVwYWlyIGJ1dCBqdXN0IHF1ZXVlIGEgZnVsbCByZXBhaW50LgorCQkJc2Ny
b2xsQXJlYS0+dmlld3BvcnQoKS0+dXBkYXRlKCk7CisJCQlwYWludFN0YXRlID0gUGFpbnRTdGF0
ZTo6bm90UGFpbnRpbmc7CisJCQlyZXR1cm47CisJCX0KIAkJLy8gRklYTUU6IEZhaWx1cmUgdG8g
cGFpbnQgdGhlIHJlcXVlc3RlZCByZWN0YW5nbGUgaW4gZWFjaAogCQkvLyBwYWludCBldmVudCBj
YXVzZXMgZmxpY2tlciBvbiBzb21lIHBsYXRmb3JtcyAoTWFjPykKIAkJLy8gUGFpbnQgcmVjdCBp
bW1lZGlhdGVseS4KZGlmZiAtciAwMzNjMzQyZTY2NTYgcXQvU2NpbnRpbGxhRWRpdEJhc2UvU2Np
bnRpbGxhUXQuaAotLS0gYS9xdC9TY2ludGlsbGFFZGl0QmFzZS9TY2ludGlsbGFRdC5oCVNhdCBK
dW4gMTMgMTE6MDE6NTYgMjAyNiArMTAwMAorKysgYi9xdC9TY2ludGlsbGFFZGl0QmFzZS9TY2lu
dGlsbGFRdC5oCVR1ZSBKdW4gMTYgMDk6MjQ6MzAgMjAyNiArMTAwMApAQCAtMTU2LDYgKzE1Niwx
MSBAQAogCXN0YXRpYyBzcHRyX3QgRGlyZWN0U3RhdHVzRnVuY3Rpb24oc3B0cl90IHB0ciwKIAkJ
CQkgICAgIHVuc2lnbmVkIGludCBpTWVzc2FnZSwgdXB0cl90IHdQYXJhbSwgc3B0cl90IGxQYXJh
bSwgaW50ICpwU3RhdHVzKTsKIAorCXZvaWQgU2V0U2NhbGVQcm9wZXJ0eSgpOworCWJvb2wgSXNQ
aXhlbEFsaWduZWRTY2FsZSgpIGNvbnN0IG5vZXhjZXB0IHsKKwkJcmV0dXJuIHNjYWxlVGVjaG5p
cXVlID09IFNjYWxlVGVjaG5pcXVlOjpQaXhlbEFsaWduZWQ7CisJfQorCiBwcm90ZWN0ZWQ6CiAK
IAl2b2lkIFBhcnRpYWxQYWludChjb25zdCBQUmVjdGFuZ2xlICZyZWN0KTsKQEAgLTE3OCw2ICsx
ODMsOCBAQAogCWJvb2wgZHJhZ1dhc0Ryb3BwZWQ7CiAJaW50IHJlY3Rhbmd1bGFyU2VsZWN0aW9u
TW9kaWZpZXI7CiAKKwlTY2FsZVRlY2huaXF1ZSBzY2FsZVRlY2huaXF1ZSA9IFNjYWxlVGVjaG5p
cXVlOjpEZWZhdWx0OworCiAJZnJpZW5kIGNsYXNzIDo6U2NpbnRpbGxhRWRpdEJhc2U7CiB9Owog
CmRpZmYgLXIgMDMzYzM0MmU2NjU2IHNyYy9HZW9tZXRyeS5oCi0tLSBhL3NyYy9HZW9tZXRyeS5o
CVNhdCBKdW4gMTMgMTE6MDE6NTYgMjAyNiArMTAwMAorKysgYi9zcmMvR2VvbWV0cnkuaAlUdWUg
SnVuIDE2IDA5OjI0OjMwIDIwMjYgKzEwMDAKQEAgLTQ1LDYgKzQ1LDEwIEBACiAJCXJldHVybiBQ
b2ludCh4IC0gb3RoZXIueCwgeSAtIG90aGVyLnkpOwogCX0KIAorCWNvbnN0ZXhwciBQb2ludCBv
cGVyYXRvciooWFlQT1NJVElPTiBtdWx0aXBsaWVyKSBjb25zdCBub2V4Y2VwdCB7CisJCXJldHVy
biBQb2ludCh4ICogbXVsdGlwbGllciwgeSAqIG11bHRpcGxpZXIpOworCX0KKwogCS8vIE90aGVy
IGF1dG9tYXRpY2FsbHkgZGVmaW5lZCBtZXRob2RzIChhc3NpZ25tZW50LCBjb3B5IGNvbnN0cnVj
dG9yLCBkZXN0cnVjdG9yKSBhcmUgZmluZQogfTsKIApAQCAtMTAxLDYgKzEwNSwxNSBAQAogCQly
ZXR1cm4gKHJjLmxlZnQgPT0gbGVmdCkgJiYgKHJjLnJpZ2h0ID09IHJpZ2h0KSAmJgogCQkJKHJj
LnRvcCA9PSB0b3ApICYmIChyYy5ib3R0b20gPT0gYm90dG9tKTsKIAl9CisJCisJY29uc3RleHBy
IFBSZWN0YW5nbGUgb3BlcmF0b3IqKFhZUE9TSVRJT04gbXVsdGlwbGllcikgY29uc3Qgbm9leGNl
cHQgeworCQlyZXR1cm4gUFJlY3RhbmdsZShsZWZ0ICogbXVsdGlwbGllciwgdG9wICogbXVsdGlw
bGllciwgcmlnaHQgKiBtdWx0aXBsaWVyLCBib3R0b20gKiBtdWx0aXBsaWVyKTsKKwl9CisKKwlj
b25zdGV4cHIgUFJlY3RhbmdsZSBvcGVyYXRvci8oWFlQT1NJVElPTiBkaXZpc29yKSBjb25zdCBu
b2V4Y2VwdCB7CisJCXJldHVybiBQUmVjdGFuZ2xlKGxlZnQgLyBkaXZpc29yLCB0b3AgLyBkaXZp
c29yLCByaWdodCAvIGRpdmlzb3IsIGJvdHRvbSAvIGRpdmlzb3IpOworCX0KKwogCWNvbnN0ZXhw
ciBib29sIENvbnRhaW5zKFBvaW50IHB0KSBjb25zdCBub2V4Y2VwdCB7CiAJCXJldHVybiAocHQu
eCA+PSBsZWZ0KSAmJiAocHQueCA8PSByaWdodCkgJiYKIAkJCShwdC55ID49IHRvcCkgJiYgKHB0
LnkgPD0gYm90dG9tKTsK
--000000000000ab1cfb0654539277--