Thread-safe record mapper speed-ups

Max Philipp Wriedt <[email protected]> Wed, 15 Oct 2025 21:52:28 +0200
Newsgroups gmane.comp.jakarta.turbine.torque.devel
Message-ID <[email protected]>
--------------P111Vv5onH3jsurckgAjxjAa
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit

Hi,

after initially reporting a n^2 problem in the processRow method of 
RecordMappers in TORQUE-364, fixing it - only to then find our suspected 
concurrency troubles to be confirmed in TORQUE-372 - we can (hopefully) 
report a far more robust solution.

Looking into the SQL result stack we would propose to re-introduce a 
slightly modified MappingStrategy. The key insight to fixing the 
concurrent modification issue lies in doing so at the 
ResultsetSpliterator level. This ensures that every query gets its own 
MappingStrategy.

Doing this would also require two new methods for every RecordMapper to 
generate a fitting MappingStrategy and to process a row with a potential 
strategy. To keep backwards compatibility both would be defaulted in the 
interface to do nothing and forward to the old method respectively.

We have already implemented a test of this locally and can see similar 
performance to the old, but flawed, version and are sharing the patch 
here. (Hopefully this actually works...)

However, because the patch changes the methods the ResultsetSpliterator 
expects a RecordMapper to have (by calling a generateStrategy method to 
either do just that or return null) this would break backwards 
compatibility with old RecordMappers and we wanted to a feedback cycle 
early.

Best regards,
Max & Rene
--------------P111Vv5onH3jsurckgAjxjAa
Content-Type: text/plain; charset=UTF-8; name="MappingStrategy.patch"
Content-Disposition: attachment; filename="MappingStrategy.patch"
Content-Transfer-Encoding: base64

SW5kZXg6IHRvcnF1ZS1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90b3JxdWUv
b20vbWFwcGVyL01hcHBpbmdTdHJhdGVneS5qYXZhCjwrPklTTy04ODU5LTEKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpkaWZmIC0tZ2l0IGEvdG9ycXVlLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBh
Y2hlL3RvcnF1ZS9vbS9tYXBwZXIvTWFwcGluZ1N0cmF0ZWd5LmphdmEgYi90b3JxdWUtcnVu
dGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdG9ycXVlL29tL21hcHBlci9NYXBwaW5n
U3RyYXRlZ3kuamF2YQotLS0gYS90b3JxdWUtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9h
cGFjaGUvdG9ycXVlL29tL21hcHBlci9NYXBwaW5nU3RyYXRlZ3kuamF2YQkocmV2aXNpb24g
MTkyODk4MikKKysrIGIvdG9ycXVlLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hl
L3RvcnF1ZS9vbS9tYXBwZXIvTWFwcGluZ1N0cmF0ZWd5LmphdmEJKGRhdGUgMTc1OTg3NTMw
OTkzNikKQEAgLTMxLDM2ICszMSwzNiBAQAogCiAvKioKICAqIE1hcHBpbmcgc3RyYXRlZ3kg
dXNlZCBpbiBwcm9jZXNzUm93IG1ldGhvZCBvZiBnZW5lcmF0ZWQgbWFwcGVycy4KLSAqIAor
ICoKICAqIEBwYXJhbSA8VD4KICAqLwogcHVibGljIGNsYXNzIE1hcHBpbmdTdHJhdGVneTxU
PiB7Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBUaGUge0BsaW5rIFBhaXIjZ2V0TGVmdCgp
fSBpcyB0byBhbGxvdyBsYXp5IHNvcnRpbmcsIHtAbGluayBQYWlyI2dldFJpZ2h0KCl9IGNv
bnRhaW5zIHRoZSBvYmplY3QgdG8gYmUgbWFwcGVkIAorICAgICAqIFRoZSB7QGxpbmsgUGFp
ciNnZXRMZWZ0KCl9IGlzIHRvIGFsbG93IGxhenkgc29ydGluZywge0BsaW5rIFBhaXIjZ2V0
UmlnaHQoKX0gY29udGFpbnMgdGhlIG9iamVjdCB0byBiZSBtYXBwZWQKICAgICAgKi8KLSAg
ICBwcml2YXRlIGZpbmFsIExpc3Q8UGFpcjxJbnRlZ2VyLCBGYWlsYWJsZUJpQ29uc3VtZXI8
UmVzdWx0U2V0LCBULCBUb3JxdWVFeGNlcHRpb24+Pj4gdGFza3M7Ci0gICAgCi0gICAgcHJp
dmF0ZSBib29sZWFuIGFsbFNldDsKKyAgICBwcml2YXRlIGZpbmFsIExpc3Q8UGFpcjxMb25n
LCBGYWlsYWJsZUJpQ29uc3VtZXI8UmVzdWx0U2V0LCBULCBUb3JxdWVFeGNlcHRpb24+Pj4g
dGFza3M7CiAKLSAgICBwdWJsaWMgTWFwcGluZ1N0cmF0ZWd5KCkKLSAgICB7CisgICAgcHVi
bGljIE1hcHBpbmdTdHJhdGVneSgpIHsKICAgICAgICAgdGhpcy50YXNrcyA9IG5ldyBBcnJh
eUxpc3Q8PigpOwotICAgICAgICB0aGlzLmFsbFNldCA9IGZhbHNlOwogICAgIH0KIAotICAg
IHB1YmxpYyB2b2lkIGFkZENvbHVtbihpbnQgb2Zmc2V0LCBGYWlsYWJsZUJpQ29uc3VtZXI8
UmVzdWx0U2V0LCBULCBUb3JxdWVFeGNlcHRpb24+IHNldHRlcikKKyAgICAvKioKKyAgICAg
KiBBZGQgYSBjb2x1bW4gdG8gYmUgc2V0IGF0IHRoZSBnaXZlbiBvZmZzZXQgKGNvbHVtbiku
CisgICAgICogQHBhcmFtIG9mZnNldCB0aGUgY29sdW1uIG9mZnNldCBpbnNpZGUgYSBSZXN1
bHRzZXQgYXQgd2hpY2ggdGhlIHZhbHVlIGNhbiBiZSBmb3VuZC4KKyAgICAgKiBAcGFyYW0g
c2V0dGVyIGEgbWV0aG9kIG9yIGxhbWJkYSB3aGljaCBhY3R1YWxseSBzZXRzIHRoZSB2YWx1
ZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBhZGRDb2x1bW4obG9uZyBvZmZzZXQsIEZh
aWxhYmxlQmlDb25zdW1lcjxSZXN1bHRTZXQsIFQsIFRvcnF1ZUV4Y2VwdGlvbj4gc2V0dGVy
KQogICAgIHsKICAgICAgICAgdGhpcy50YXNrcy5hZGQoUGFpci5vZihvZmZzZXQsIHNldHRl
cikpOwogICAgIH0KIAogICAgIC8qKgotICAgICAqIExhc3QgZmluaXNoaW5nIHN0ZXBzIGJl
Zm9yZSBleGVjdXRlLgotICAgICAqIAotICAgICAqIEBwYXJhbSBudW1fZmllbGRzIHRoZSB0
b3RhbCBjb2x1bW4gc2l6ZSBvZiB0aGUgb2JqZWN0Ci0gICAgICogQHBhcmFtIHNvcnQgPGNv
ZGU+dHJ1ZTwvY29kZT4gZXhwbGljaXRlbHkgc29ydCB3aXRoIHtAbGluayBQYWlyI2dldExl
ZnQoKX0gb2YgdGhlIHtAbGluayAjdGFza3N9LgorICAgICAqIExhc3QgZmluaXNoaW5nIHN0
ZXBzIGJlZm9yZSB0aGlzIHN0cmF0ZWd5IGNhbiBiZSBleGVjdXRlZC4KKyAgICAgKgorICAg
ICAqIEBwYXJhbSBzb3J0IDxjb2RlPnRydWU8L2NvZGU+IGV4cGxpY2l0bHkgc29ydCB3aXRo
IHtAbGluayBQYWlyI2dldExlZnQoKX0gb2YgdGhlIHtAbGluayAjdGFza3N9LgogICAgICAq
LwotICAgIHB1YmxpYyB2b2lkIGZpbmlzaChpbnQgbnVtX2ZpZWxkcywgYm9vbGVhbiBzb3J0
KQorICAgIHB1YmxpYyB2b2lkIGZpbmlzaChib29sZWFuIHNvcnQpCiAgICAgewogICAgICAg
ICAvLyBUaGUgbGlzdCBzaG91bGQgYWxyZWFkeSBiZSBpbiB0aGUgY29ycmVjdCBvcmRlciBi
ZWNhdXNlIENyaXRlcmlhIGxvb3BzIHRocm91Z2ggdGhlIGNvbHVtbnMKICAgICAgICAgLy8g
aW4gdGhlIHNhbWUgb3JkZXIgaW4gd2hpY2ggdGhleSBhcmUgYWRkZWQgdG8gdGhlIFNRTCBz
dGF0ZW1lbnQgYnV0IGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgd2VpcmQKQEAgLTY5LDcgKzY5
LDYgQEAKICAgICAgICAgaWYgKHNvcnQpIHsKICAgICAgICAgICAgIHRoaXMudGFza3Muc29y
dChDb21wYXJhdG9yLmNvbXBhcmluZyhQYWlyOjpnZXRMZWZ0KSk7CiAgICAgICAgIH0KLSAg
ICAgICAgdGhpcy5hbGxTZXQgPSB0aGlzLnRhc2tzLnNpemUoKSA9PSBudW1fZmllbGRzOwog
ICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIGlzRW1wdHkoKQpAQCAtNzcsMTAgKzc2LDYg
QEAKICAgICAgICAgcmV0dXJuIHRoaXMudGFza3MuaXNFbXB0eSgpOwogICAgIH0KIAotICAg
IHB1YmxpYyBib29sZWFuIGlzQWxsU2V0KCkgewotICAgICAgICByZXR1cm4gdGhpcy5hbGxT
ZXQ7Ci0gICAgfQotICAgIAogICAgIHB1YmxpYyB2b2lkIHJlc2V0KCkKICAgICB7CiAgICAg
ICAgIC8vIHRvIHVzZSB0aGlzIGFuZCB0byB1c2Ugb25seSBhIHNpbmdsZSBzdHJhdGVneSB3
ZSBtaWdodCBuZWVkIHRvIENvbGxlY3Rpb25zLnN5bmMoQXJyYXlMaXN0KS4KQEAgLTg5LDE0
ICs4NCwxNCBAQAogCiAgICAgLyoqCiAgICAgICogSXRlcmF0ZXMgdGhyb3VnaCB0aGUge0Bs
aW5rICN0YXNrc30gbGlzdCBhbmQgZXhlY3V0ZXMgZWFjaCB0YXNrLgotICAgICAqIAorICAg
ICAqCiAgICAgICogQHBhcmFtIHJlc3VsdCBSZXN1bHRzZXQKICAgICAgKiBAcGFyYW0gaW5z
dGFuY2UgdGFyZ2V0IG9iamVjdAotICAgICAqIAorICAgICAqCiAgICAgICovCiAgICAgcHVi
bGljIHZvaWQgZXhlY3V0ZShSZXN1bHRTZXQgcmVzdWx0LCBUIGluc3RhbmNlKQogICAgIHsK
LSAgICAgICAgdGhpcy50YXNrcy5zdHJlYW0oKS5mb3JFYWNoKCBzdHJhdGVneSAtPgorICAg
ICAgICB0aGlzLnRhc2tzLmZvckVhY2goIHN0cmF0ZWd5IC0+CiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgIHRyeQogICAgICAgICAgICAgewpJbmRleDogdG9ycXVlLXRlbXBsYXRlcy9z
cmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90b3JxdWUvdGVtcGxhdGVzL29tL3RlbXBs
YXRlcy9yZWNvcmRtYXBwZXIvYmFzZS9tYXBwaW5nU3RyYXRlZ3lQYXRoLnZtCjwrPklTTy04
ODU5LTEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvdG9ycXVlLXRlbXBsYXRlcy9zcmMv
bWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90b3JxdWUvdGVtcGxhdGVzL29tL3RlbXBsYXRl
cy9yZWNvcmRtYXBwZXIvYmFzZS9tYXBwaW5nU3RyYXRlZ3lQYXRoLnZtIGIvdG9ycXVlLXRl
bXBsYXRlcy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90b3JxdWUvdGVtcGxhdGVz
L29tL3RlbXBsYXRlcy9yZWNvcmRtYXBwZXIvYmFzZS9tYXBwaW5nU3RyYXRlZ3lQYXRoLnZt
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwJKGRhdGUgMTc1OTg3NzkwNTk4
MCkKKysrIGIvdG9ycXVlLXRlbXBsYXRlcy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNo
ZS90b3JxdWUvdGVtcGxhdGVzL29tL3RlbXBsYXRlcy9yZWNvcmRtYXBwZXIvYmFzZS9tYXBw
aW5nU3RyYXRlZ3lQYXRoLnZtCShkYXRlIDE3NTk4Nzc5MDU5ODApCkBAIC0wLDAgKzEsMTMz
IEBACisjIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFT
RikgdW5kZXIgb25lCisjIyBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50
cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyMjIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3Jr
IGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisjIyByZWdhcmRpbmcgY29weXJpZ2h0IG93
bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisjIyB0byB5b3UgdW5kZXIg
dGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisjIyAiTGljZW5zZSIpOyB5
b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisjIyB3aXRo
IHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0
CisjIworIyMgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAK
KyMjCisjIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRv
IGluIHdyaXRpbmcsCisjIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5z
ZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorIyMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJS
QU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisjIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBv
ciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyMjIHNwZWNpZmljIGxhbmd1
YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyMjIHVuZGVyIHRo
ZSBMaWNlbnNlLgorIyMKKyMjIyMjIworIyMKKyMjIHZlcnNpb24gJElkOiBtYXBwaW5nU3Ry
YXRlZ3lQYXRoLnZtIFRJTUVTVEFNUCBtd3JpZWR0ICQKKyMjCisjIyBDcmVhdGVzIHRoZSBN
YXBwaW5nU3RyYXRlZ3kgZmxvdyBmb3IgYSBSZWNvcmRNYXBwZXIuCisjIworIyMgVGhpcyB0
ZW1wbGF0ZSBleHBlY3RzIHRoZSBjdXJyZW50IHNvdXJjZSBlbGVtZW50IHRvIGJlIGEgInRh
YmxlIiBlbGVtZW50CisjIyBmcm9tIHRoZSB0b3JxdWUgc2NoZW1hLgorIyMgVGhlIHNjaGVt
YSBuZWVkcyB0byBiZSBwcm9jZXNzZWQgYnkgdGhlIE9NVHJhbnNmb3JtZXIuCisjIyBUaGUg
YXR0cmlidXRlcyBvZiB0aGUgY3VycmVudCBzb3VyY2UgZWxlbWVudCBtdXN0IGJlIHNldAor
IyMgYXMgdmVsb2NpdHkgdmFyaWFibGVzLgorIyMKKworICAgIEBPdmVycmlkZQorICAgIHB1
YmxpYyBNYXBwaW5nU3RyYXRlZ3k8JGRiT2JqZWN0Q2xhc3NOYW1lPiBnZW5lcmF0ZVN0cmF0
ZWd5KGxvbmcgcm93T2Zmc2V0LCBDcml0ZXJpYSBjcml0ZXJpYSkgeworICAgICAgICBpZiAo
Y3JpdGVyaWEgPT0gbnVsbCB8fCBjcml0ZXJpYS5pc0NvbXBvc2l0ZSgpKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBMaXN0PENv
bHVtbj4gc2VsZWN0Q29sdW1ucyA9IGNyaXRlcmlhLmdldFNlbGVjdENvbHVtbnMoKTsKKyAg
ICAgICAgTGlzdDxDb2x1bW4+IGNvbHVtbnNXaXRob3V0T2Zmc2V0ID0gc2VsZWN0Q29sdW1u
cy5zdHJlYW0oKS5za2lwKHJvd09mZnNldCkudG9MaXN0KCk7CisgICAgICAgICMjIFRoZSBz
ZWxlY3RDb2x1bW5zIHNob3VsZCBub3QgYmUgZW1wdHkgaGVyZSBpZiB3ZSBhcmUgY2FsbGVk
IGJ5IHRoZSB1c3VhbCBSZXN1bHRzZXRTcGxpdGVyYXRvci4KKyAgICAgICAgaWYgKGNvbHVt
bnNXaXRob3V0T2Zmc2V0LmlzRW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgTWFwcGluZ1N0cmF0ZWd5PCRkYk9iamVj
dENsYXNzTmFtZT4gc3RyYXRlZ3kgPSBuZXcgTWFwcGluZ1N0cmF0ZWd5PD4oKTsKKworICAg
ICAgICBTZXQ8U3RyaW5nPiBjb2x1bW5zTWFwcGVkID0gbmV3IEhhc2hTZXQ8PigpOworICAg
ICAgICBsb25nIHBoeXNpY2FsQ29sdW1uSW5kZXggPSByb3dPZmZzZXQgKyAxOworICAgICAg
ICBmb3IgKENvbHVtbiBjb2x1bW4gOiBjb2x1bW5zV2l0aG91dE9mZnNldCkKKyAgICAgICAg
eworICAgICAgICAgICAgI3NldCAoICRlbHNlID0gIiIgKQorICAgICAgICAgICAgI2ZvcmVh
Y2ggKCRjb2x1bW5FbGVtZW50IGluICR0b3JxdWVHZW4uZ2V0Q2hpbGRyZW4oImNvbHVtbiIp
KQorICAgICAgICAgICAgICAgICNzZXQgKCAkc2V0dGVyID0gJGNvbHVtbkVsZW1lbnQuZ2V0
QXR0cmlidXRlKCJzZXR0ZXIiKSApCisgICAgICAgICAgICAgICAgI3NldCAoICRnZXR0ZXIg
PSAkY29sdW1uRWxlbWVudC5nZXRBdHRyaWJ1dGUoImdldHRlciIpICkKKyAgICAgICAgICAg
ICAgICAjc2V0ICggJHBlZXJDb2x1bW5OYW1lID0gJGNvbHVtbkVsZW1lbnQuZ2V0QXR0cmli
dXRlKCJwZWVyQ29sdW1uTmFtZSIpICkKKyAgICAgICAgICAgICAgICAke2Vsc2V9aWYgKCFj
b2x1bW5zTWFwcGVkLmNvbnRhaW5zKCR7cGVlckNvbHVtbk5hbWV9X0VYUFJFU1NJT04gKSAm
JiAke3BlZXJDb2x1bW5OYW1lfV9FWFBSRVNTSU9OLmVxdWFscygKKyAgICAgICAgICAgICAg
ICAgICAgY29sdW1uLmdldFNxbEV4cHJlc3Npb24oKSkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgaW50IGN1cnJlbnRJbmRleCA9IE1hdGgudG9JbnRFeGFjdChwaHlzaWNh
bENvbHVtbkluZGV4KTsKKyAgICAgICAgICAgICAgICBzdHJhdGVneS5hZGRDb2x1bW4ocGh5
c2ljYWxDb2x1bW5JbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgIChyZXMsIGluc3Qp
IC0+IGluc3QuJHtzZXR0ZXJ9KCR7Z2V0dGVyfShyZXMsIGN1cnJlbnRJbmRleCkpKTsKKyAg
ICAgICAgICAgICAgICBjb2x1bW5zTWFwcGVkLmFkZCggJHtwZWVyQ29sdW1uTmFtZX1fRVhQ
UkVTU0lPTiApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICNzZXQgKCAkZWxz
ZSA9ICJlbHNlICIgKQorICAgICAgICAgICAgI2VuZAorICAgICAgICAgICAgcGh5c2ljYWxD
b2x1bW5JbmRleCsrOworICAgICAgICB9CisgICAgICAgIGlmIChjb2x1bW5zTWFwcGVkLmlz
RW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHN0cmF0ZWd5OworICAgIH0KKworICAgIC8qKgorICAgICog
Q29uc3RydWN0cyB0aGUgb2JqZWN0IGZyb20gdGhlIGN1cnJlbnQgcm93IGluIHRoZSByZXN1
bHRTZXQuCisgICAgKiBJbXBsZW1lbnRpbmcgbWV0aG9kcyBjYW4gYmUgc3VyZSB0aGF0IHRo
ZSByZXN1bHRTZXQgY29udGFpbnMgYSByb3csCisgICAgKiBidXQgdGhleSBtdXN0IG9ubHkg
b3BlcmF0ZSBvbiB0aGUgY3VycmVudCByb3csIGkuZSB0aGV5IG11c3Qgbm90IGNhbGwKKyAg
ICAqIHJlc3VsdFNldC5uZXh0KCkuCisgICAgKiBUaGlzIHZlcnNpb24gbWF5IGFsc28gcmVj
ZWl2ZSBhIE1hcHBpbmdTdHJhdGVneSBvYmplY3QgdG8gc3BlZWQgdXAKKyAgICAqIHRoZSBw
cm9jZXNzaW5nLiBIb3dldmVyLCB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkaXNyZWdh
cmRzIGFueQorICAgICogcGFzc2VkIHN0cmF0ZWd5IGFuZCBzaW1wbHkgZm9yd2FyZHMgdG8g
cHJvY2Vzc1JvdyhSZXN1bHRTZXQsIGludCwgQ3JpdGVyaWEpLiAvL0ZJWE1FOiBGaXggZG9j
bGluayEKKyAgICAqCisgICAgKiBAcGFyYW0gcmVzdWx0U2V0IHRoZSByZXN1bHRTZXQgdG8g
b3BlcmF0ZSBvbiwgYWxyZWFkeSBwb2ludGluZworICAgICogICAgICAgIHRvIHRoZSBjb3Jy
ZWN0IHJvdy4gTm90IG51bGwuCisgICAgKiBAcGFyYW0gb2Zmc2V0IGEgcG9zc2libGUgb2Zm
c2V0IGluIHRoZSBjb2x1bW5zIHRvIGJlIGNvbnNpZGVyZWQKKyAgICAqICAgICAgICAoaWYg
cHJldmlvdXMgY29sdW1ucyBjb250YWluIG90aGVyIG9iamVjdHMpLCBvciAwIGZvciBubyBv
ZmZzZXQuCisgICAgKiBAcGFyYW0gY3JpdGVyaWEgdGhlIENyaXRlcmlhIHdoaWNoIGNvbnRh
aW5zIHRoZSBxdWVyeSB0byBwcm9jZXNzLAorICAgICogICAgICAgIG9yIG51bGwgaWYgbm90
IGtub3duIG9yIHRoZSBxdWVyeSB3YXMgbm90IHByb2R1Y2VkIGJ5IGEgQ3JpdGVyaWEuCisg
ICAgKiAgICAgICAgQ2FuIGJlIHVzZWQgYnkgdGhlIFJlY29yZE1hcHBlciB0byBkZXRlcm1p
bmUgdGhlIGNvbHVtbnMKKyAgICAqICAgICAgICBjb250YWluZWQgaW4gdGhlIHJlc3VsdCBz
ZXQuCisgICAgKiBAcGFyYW0gc3RyYXRlZ3kgdGhlIE1hcHBpbmdTdHJhdGVneSB3aGljaCB0
ZWxscyB0aGUgUmVjb3JkTWFwcGVyIHdoaWNoCisgICAgKiAgICAgICAgb2Zmc2V0cyBpbiB0
aGUgcmVzdWx0U2V0IGNvcnJlc3BvbmQgdG8gd2hpY2ggZmllbGRzIG9mIFQuCisgICAgKiAg
ICAgICAgTmF5IGJlIG51bGwgaWYgbm90IGtub3duLgorICAgICoKKyAgICAqIEByZXR1cm4g
dGhlIG1hcHBlZCBvYmplY3QsIG5vdCBudWxsLgorICAgICoKKyAgICAqIEB0aHJvd3MgVG9y
cXVlRXhjZXB0aW9uIHdoZW4gdGhlIG1hcHBpbmcgZmFpbHMuCisgICAgKi8KKyAgICBAT3Zl
cnJpZGUKKyAgICBwdWJsaWMgJHtkYk9iamVjdENsYXNzTmFtZX0gcHJvY2Vzc1JvdygKKyAg
ICAgICAgUmVzdWx0U2V0IHJlc3VsdFNldCwKKyAgICAgICAgaW50IG9mZnNldCwKKyAgICAg
ICAgQ3JpdGVyaWEgY3JpdGVyaWEsCisgICAgICAgIE1hcHBpbmdTdHJhdGVneTwke2RiT2Jq
ZWN0Q2xhc3NOYW1lfT4gc3RyYXRlZ3kpCisgICAgICAgICAgICB0aHJvd3MgVG9ycXVlRXhj
ZXB0aW9uIHsKKyAgICAgICAgaWYgKHN0cmF0ZWd5ICE9IG51bGwpCisgICAgICAgIHsKKyNz
ZXQgKCAkaW5oZXJpdGFuY2VCYXNlQ29sdW1uRWxlbWVudCA9ICR0b3JxdWVHZW4uZ2V0Q2hp
bGQoImluaGVyaXRhbmNlLWNvbHVtbiIpICkKKyNpZiAoJGluaGVyaXRhbmNlQmFzZUNvbHVt
bkVsZW1lbnQpCisgICAgJHRvcnF1ZUdlbi5tZXJnZXBvaW50KCJjcmVhdGVEYk9iamVjdElu
c3RhbmNlRnJvbUluaGVyaXRhbmNlIikKKyNlbHNlCisgICAgJHRvcnF1ZUdlbi5tZXJnZXBv
aW50KCJjcmVhdGVEYk9iamVjdEluc3RhbmNlIikKKyNlbmQKKworI2lmICgkdG9ycXVlR2Vu
LmJvb2xlYW5PcHRpb24oInRvcnF1ZS5vbS50cmFja0xvYWRpbmciKSkKKyAgICAgICAgICAg
IHRyeQorICAgICAgICAgICAgeworICAgICAgICAgICAgJHtmaWVsZH0uc2V0TG9hZGluZyh0
cnVlKTsKKyNlbmQKKyAgICAgICAgICAgIHN0cmF0ZWd5LmV4ZWN1dGUocmVzdWx0U2V0LCAk
e2ZpZWxkfSk7CisgICAgICAgICAgICAke2ZpZWxkfS5zZXROZXcoZmFsc2UpOworICAgICAg
ICAgICAgJHtmaWVsZH0uc2V0TW9kaWZpZWQoZmFsc2UpOworI2lmICgkdG9ycXVlR2VuLmJv
b2xlYW5PcHRpb24oInRvcnF1ZS5vbS50cmFja0xvYWRpbmciKSkKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGZpbmFsbHkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAk
e2ZpZWxkfS5zZXRMb2FkaW5nKGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyNlbmQKKyAgICAg
ICAgICAgIHJldHVybiAke2ZpZWxkfTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhp
cy5wcm9jZXNzUm93KHJlc3VsdFNldCwgb2Zmc2V0LCBjcml0ZXJpYSk7CisgICAgfQpcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IHRvcnF1ZS1ydW50aW1lL3NyYy9tYWlu
L2phdmEvb3JnL2FwYWNoZS90b3JxdWUvb20vbWFwcGVyL1JlY29yZE1hcHBlci5qYXZhCjwr
PklTTy04ODU5LTEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvdG9ycXVlLXJ1bnRpbWUv
c3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RvcnF1ZS9vbS9tYXBwZXIvUmVjb3JkTWFwcGVy
LmphdmEgYi90b3JxdWUtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdG9ycXVl
L29tL21hcHBlci9SZWNvcmRNYXBwZXIuamF2YQotLS0gYS90b3JxdWUtcnVudGltZS9zcmMv
bWFpbi9qYXZhL29yZy9hcGFjaGUvdG9ycXVlL29tL21hcHBlci9SZWNvcmRNYXBwZXIuamF2
YQkocmV2aXNpb24gMTkyODk4MikKKysrIGIvdG9ycXVlLXJ1bnRpbWUvc3JjL21haW4vamF2
YS9vcmcvYXBhY2hlL3RvcnF1ZS9vbS9tYXBwZXIvUmVjb3JkTWFwcGVyLmphdmEJKGRhdGUg
MTc2MDU1NDM4NzgxNykKQEAgLTYyLDQgKzYyLDQzIEBACiAgICAgICAgICAgICBpbnQgcm93
T2Zmc2V0LAogICAgICAgICAgICAgQ3JpdGVyaWEgY3JpdGVyaWEpCiAgICAgICAgICAgICAg
ICAgICAgIHRocm93cyBUb3JxdWVFeGNlcHRpb247CisKKyAgICAvKioKKyAgICAgKiBDb25z
dHJ1Y3RzIHRoZSBvYmplY3QgZnJvbSB0aGUgY3VycmVudCByb3cgaW4gdGhlIHJlc3VsdFNl
dC4KKyAgICAgKiBJbXBsZW1lbnRpbmcgbWV0aG9kcyBjYW4gYmUgc3VyZSB0aGF0IHRoZSBy
ZXN1bHRTZXQgY29udGFpbnMgYSByb3csCisgICAgICogYnV0IHRoZXkgbXVzdCBvbmx5IG9w
ZXJhdGUgb24gdGhlIGN1cnJlbnQgcm93LCBpLmUgdGhleSBtdXN0IG5vdCBjYWxsCisgICAg
ICogcmVzdWx0U2V0Lm5leHQoKS4KKyAgICAgKiBUaGlzIHZlcnNpb24gbWF5IGFsc28gcmVj
ZWl2ZSBhIE1hcHBpbmdTdHJhdGVneSBvYmplY3QgdG8gc3BlZWQgdXAKKyAgICAgKiB0aGUg
cHJvY2Vzc2luZy4gSG93ZXZlciwgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZGlzcmVn
YXJkcyBhbnkKKyAgICAgKiBwYXNzZWQgc3RyYXRlZ3kgYW5kIHNpbXBseSBmb3J3YXJkcyB0
byBwcm9jZXNzUm93KFJlc3VsdFNldCwgaW50LCBDcml0ZXJpYSkuCisgICAgICoKKyAgICAg
KiBAcGFyYW0gcmVzdWx0U2V0IHRoZSByZXN1bHRTZXQgdG8gb3BlcmF0ZSBvbiwgYWxyZWFk
eSBwb2ludGluZworICAgICAqICAgICAgICB0byB0aGUgY29ycmVjdCByb3cuIE5vdCBudWxs
LgorICAgICAqIEBwYXJhbSByb3dPZmZzZXQgYSBwb3NzaWJsZSBvZmZzZXQgaW4gdGhlIGNv
bHVtbnMgdG8gYmUgY29uc2lkZXJlZAorICAgICAqICAgICAgICAoaWYgcHJldmlvdXMgY29s
dW1ucyBjb250YWluIG90aGVyIG9iamVjdHMpLCBvciAwIGZvciBubyBvZmZzZXQuCisgICAg
ICogQHBhcmFtIGNyaXRlcmlhIHRoZSBDcml0ZXJpYSB3aGljaCBjb250YWlucyB0aGUgcXVl
cnkgdG8gcHJvY2VzcywKKyAgICAgKiAgICAgICAgb3IgbnVsbCBpZiBub3Qga25vd24gb3Ig
dGhlIHF1ZXJ5IHdhcyBub3QgcHJvZHVjZWQgYnkgYSBDcml0ZXJpYS4KKyAgICAgKiAgICAg
ICAgQ2FuIGJlIHVzZWQgYnkgdGhlIFJlY29yZE1hcHBlciB0byBkZXRlcm1pbmUgdGhlIGNv
bHVtbnMKKyAgICAgKiAgICAgICAgY29udGFpbmVkIGluIHRoZSByZXN1bHQgc2V0LgorICAg
ICAqIEBwYXJhbSBzdHJhdGVneSB0aGUgTWFwcGluZ1N0cmF0ZWd5IHdoaWNoIHRlbGxzIHRo
ZSBSZWNvcmRNYXBwZXIgd2hpY2gKKyAgICAgKiAgICAgICAgb2Zmc2V0cyBpbiB0aGUgcmVz
dWx0U2V0IGNvcnJlc3BvbmQgdG8gd2hpY2ggZmllbGRzIG9mIFQuCisgICAgICogICAgICAg
IE5heSBiZSBudWxsIGlmIG5vdCBrbm93bi4KKyAgICAgKgorICAgICAqIEByZXR1cm4gdGhl
IG1hcHBlZCBvYmplY3QsIG5vdCBudWxsLgorICAgICAqCisgICAgICogQHRocm93cyBUb3Jx
dWVFeGNlcHRpb24gd2hlbiB0aGUgbWFwcGluZyBmYWlscy4KKyAgICAgKi8KKyAgICBkZWZh
dWx0IFQgcHJvY2Vzc1JvdygKKyAgICAgICAgICAgIFJlc3VsdFNldCByZXN1bHRTZXQsCisg
ICAgICAgICAgICBpbnQgcm93T2Zmc2V0LAorICAgICAgICAgICAgQ3JpdGVyaWEgY3JpdGVy
aWEsCisgICAgICAgICAgICBNYXBwaW5nU3RyYXRlZ3k8VD4gc3RyYXRlZ3kpCisgICAgICAg
ICAgICAgICAgICAgIHRocm93cyBUb3JxdWVFeGNlcHRpb24geworICAgICAgICByZXR1cm4g
dGhpcy5wcm9jZXNzUm93KHJlc3VsdFNldCwgcm93T2Zmc2V0LCBjcml0ZXJpYSk7CisgICAg
fQorCisgICAgZGVmYXVsdCBNYXBwaW5nU3RyYXRlZ3k8VD4gZ2VuZXJhdGVTdHJhdGVneShs
b25nIHJvd09mZnNldCwgQ3JpdGVyaWEgY3JpdGVyaWEpCisgICAgeworICAgICAgICByZXR1
cm4gbnVsbDsKKyAgICB9CiB9CkluZGV4OiB0b3JxdWUtdGVtcGxhdGVzL3NyYy9tYWluL3Jl
c291cmNlcy9vcmcvYXBhY2hlL3RvcnF1ZS90ZW1wbGF0ZXMvb20vb3V0bGV0cy9yZWNvcmRN
YXBwZXIueG1sCjwrPlVURi04Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL3RvcnF1ZS10
ZW1wbGF0ZXMvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdG9ycXVlL3RlbXBsYXRl
cy9vbS9vdXRsZXRzL3JlY29yZE1hcHBlci54bWwgYi90b3JxdWUtdGVtcGxhdGVzL3NyYy9t
YWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RvcnF1ZS90ZW1wbGF0ZXMvb20vb3V0bGV0cy9y
ZWNvcmRNYXBwZXIueG1sCi0tLSBhL3RvcnF1ZS10ZW1wbGF0ZXMvc3JjL21haW4vcmVzb3Vy
Y2VzL29yZy9hcGFjaGUvdG9ycXVlL3RlbXBsYXRlcy9vbS9vdXRsZXRzL3JlY29yZE1hcHBl
ci54bWwJKHJldmlzaW9uIDE5Mjg5ODIpCisrKyBiL3RvcnF1ZS10ZW1wbGF0ZXMvc3JjL21h
aW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdG9ycXVlL3RlbXBsYXRlcy9vbS9vdXRsZXRzL3Jl
Y29yZE1hcHBlci54bWwJKGRhdGUgMTc1ODIyMjkyNTgwOSkKQEAgLTQ4LDYgKzQ4LDEwIEBA
CiAgICAgICAgICAgZWxlbWVudD0iY29sdW1uIgogICAgICAgICAgIG91dGxldD0idG9ycXVl
Lm9tLnJlY29yZG1hcHBlci5iYXNlLmRiT2JqZWN0RmllbGRHZXR0ZXIiLz4KICAgICA8L21l
cmdlcG9pbnQ+CisgICAgPG1lcmdlcG9pbnQgbmFtZT0ibWFwcGluZ1N0cmF0ZWd5UGF0aCI+
CisgICAgICAgIDxhY3Rpb24geHNpOnR5cGU9ImFwcGx5QWN0aW9uIgorICAgICAgICAgICAg
ICAgIG91dGxldD0idG9ycXVlLm9tLnJlY29yZG1hcHBlci5iYXNlLm1hcHBpbmdTdHJhdGVn
eVBhdGgiLz4KKyAgICA8L21lcmdlcG9pbnQ+CiAgIDwvb3V0bGV0PgogCiAgIDxvdXRsZXQg
bmFtZT0idG9ycXVlLm9tLnJlY29yZG1hcHBlci5iYXNlLmRiT2JqZWN0RmllbGRHZXR0ZXIi
CkBAIC01OSw0ICs2MywxOCBAQAogICAgICAgeHNpOnR5cGU9InZlbG9jaXR5T3V0bGV0Igog
ICAgICAgcGF0aD0icmVjb3JkbWFwcGVyL2Jhc2UvY3JlYXRlRGJPYmplY3RJbnN0YW5jZUZy
b21Jbmhlcml0YW5jZS52bSI+CiAgIDwvb3V0bGV0PgorCisgIDxvdXRsZXQgbmFtZT0idG9y
cXVlLm9tLnJlY29yZG1hcHBlci5iYXNlLm1hcHBpbmdTdHJhdGVneVBhdGgiCisgICAgICB4
c2k6dHlwZT0idmVsb2NpdHlPdXRsZXQiCisgICAgICBwYXRoPSJyZWNvcmRtYXBwZXIvYmFz
ZS9tYXBwaW5nU3RyYXRlZ3lQYXRoLnZtIj4KKyAgICAgIDxtZXJnZXBvaW50IG5hbWU9ImNy
ZWF0ZURiT2JqZWN0SW5zdGFuY2UiPgorICAgICAgICAgIDxhY3Rpb24geHNpOnR5cGU9ImFw
cGx5QWN0aW9uIgorICAgICAgICAgICAgICAgICAgb3V0bGV0PSJ0b3JxdWUub20uY3JlYXRl
RGJPYmplY3RJbnN0YW5jZSIvPgorICAgICAgPC9tZXJnZXBvaW50PgorICAgICAgPG1lcmdl
cG9pbnQgbmFtZT0iY3JlYXRlRGJPYmplY3RJbnN0YW5jZUZyb21Jbmhlcml0YW5jZSI+Cisg
ICAgICAgICAgPGFjdGlvbiB4c2k6dHlwZT0idHJhdmVyc2VBbGxBY3Rpb24iCisgICAgICAg
ICAgICAgICAgICBlbGVtZW50PSJpbmhlcml0YW5jZS1jb2x1bW4iCisgICAgICAgICAgICAg
ICAgICBvdXRsZXQ9InRvcnF1ZS5vbS5yZWNvcmRtYXBwZXIuYmFzZWNyZWF0ZURiT2JqZWN0
SW5zdGFuY2VGcm9tSW5oZXJpdGFuY2UiLz4KKyAgICAgIDwvbWVyZ2Vwb2ludD4KKyAgPC9v
dXRsZXQ+CiA8L291dGxldHM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDog
dG9ycXVlLXRlbXBsYXRlcy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90b3JxdWUv
dGVtcGxhdGVzL29tL3RlbXBsYXRlcy9yZWNvcmRtYXBwZXIvYmFzZS9yZWNvcmRNYXBwZXJC
YXNlLnZtCjwrPklTTy04ODU5LTEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvdG9ycXVl
LXRlbXBsYXRlcy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90b3JxdWUvdGVtcGxh
dGVzL29tL3RlbXBsYXRlcy9yZWNvcmRtYXBwZXIvYmFzZS9yZWNvcmRNYXBwZXJCYXNlLnZt
IGIvdG9ycXVlLXRlbXBsYXRlcy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90b3Jx
dWUvdGVtcGxhdGVzL29tL3RlbXBsYXRlcy9yZWNvcmRtYXBwZXIvYmFzZS9yZWNvcmRNYXBw
ZXJCYXNlLnZtCi0tLSBhL3RvcnF1ZS10ZW1wbGF0ZXMvc3JjL21haW4vcmVzb3VyY2VzL29y
Zy9hcGFjaGUvdG9ycXVlL3RlbXBsYXRlcy9vbS90ZW1wbGF0ZXMvcmVjb3JkbWFwcGVyL2Jh
c2UvcmVjb3JkTWFwcGVyQmFzZS52bQkocmV2aXNpb24gMTkyODk4MikKKysrIGIvdG9ycXVl
LXRlbXBsYXRlcy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90b3JxdWUvdGVtcGxh
dGVzL29tL3RlbXBsYXRlcy9yZWNvcmRtYXBwZXIvYmFzZS9yZWNvcmRNYXBwZXJCYXNlLnZt
CShkYXRlIDE3NjA1NTM4Mzg1MjMpCkBAIC0xOSwyMSArMTksMjMgQEAKICMjCiAjIyB2ZXJz
aW9uICRJZDogcmVjb3JkTWFwcGVyQmFzZS52bSAxOTI3ODU0IDIwMjUtMDgtMTggMDk6NTI6
NThaIG13cmllZHQgJAogIyMKLSMjIENyZWF0ZXMgdGhlIGJhc2UgcGVlcidzIG1hcHBlciBj
bGFzcy4gCi0jIyAKLSMjIFRoaXMgdGVtcGxhdGUgZXhwZWN0cyB0aGUgY3VycmVudCBzb3Vy
Y2UgZWxlbWVudCB0byBiZSBhICJ0YWJsZSIgZWxlbWVudCAKKyMjIENyZWF0ZXMgdGhlIGJh
c2UgcGVlcidzIG1hcHBlciBjbGFzcy4KKyMjCisjIyBUaGlzIHRlbXBsYXRlIGV4cGVjdHMg
dGhlIGN1cnJlbnQgc291cmNlIGVsZW1lbnQgdG8gYmUgYSAidGFibGUiIGVsZW1lbnQKICMj
IGZyb20gdGhlIHRvcnF1ZSBzY2hlbWEuCiAjIyBUaGUgc2NoZW1hIG5lZWRzIHRvIGJlIHBy
b2Nlc3NlZCBieSB0aGUgT01UcmFuc2Zvcm1lci4KICMjIFRoZSBhdHRyaWJ1dGVzIG9mIHRo
ZSBjdXJyZW50IHNvdXJjZSBlbGVtZW50IG11c3QgYmUgc2V0Ci0jIyBhcyB2ZWxvY2l0eSB2
YXJpYWJsZXMuICAKKyMjIGFzIHZlbG9jaXR5IHZhcmlhYmxlcy4KICMjCiBwYWNrYWdlICR7
YmFzZVJlY29yZE1hcHBlclBhY2thZ2V9OwogCitpbXBvcnQgamF2YS5pby5TZXJpYWw7CiBp
bXBvcnQgamF2YS5zcWwuUmVzdWx0U2V0OwogaW1wb3J0IGphdmEuc3FsLlNRTEV4Y2VwdGlv
bjsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsK
IGltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uQ29sbGVj
dG9yczsKIAogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZzsKIGltcG9y
dCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2dGYWN0b3J5OwpAQCAtNDQsMTEgKzQ2
LDExIEBACiBpbXBvcnQgb3JnLmFwYWNoZS50b3JxdWUub20ubWFwcGVyLk1hcHBpbmdTdHJh
dGVneTsKIAogI2ZvcmVhY2ggKCRjb2x1bW5FbGVtZW50IGluICR0b3JxdWVHZW4uZ2V0U291
cmNlRWxlbWVudCgpLmdldENoaWxkcmVuKCJjb2x1bW4iKSkKLSAgI3NldCAoJGNvbEVudW1Q
YWNrYWdlID0gJGNvbHVtbkVsZW1lbnQuZ2V0QXR0cmlidXRlKCJlbnVtUGFja2FnZSIpKQot
ICAjc2V0ICgkY29sRW51bUNsYXNzTmFtZSA9ICRjb2x1bW5FbGVtZW50LmdldEF0dHJpYnV0
ZSgiZW51bUNsYXNzTmFtZSIpKQotICAjaWYgKCRjb2x1bW5FbGVtZW50LmdldEF0dHJpYnV0
ZSgiaXNFbnVtIikgPT0gInRydWUiICYmICRjb2xFbnVtUGFja2FnZSAhPSAkYmFzZVJlY29y
ZE1hcHBlclBhY2thZ2UpIAotaW1wb3J0ICR7Y29sRW51bVBhY2thZ2V9LiR7Y29sRW51bUNs
YXNzTmFtZX07Ci0gICNlbmQKKyAgICAjc2V0ICgkY29sRW51bVBhY2thZ2UgPSAkY29sdW1u
RWxlbWVudC5nZXRBdHRyaWJ1dGUoImVudW1QYWNrYWdlIikpCisgICAgI3NldCAoJGNvbEVu
dW1DbGFzc05hbWUgPSAkY29sdW1uRWxlbWVudC5nZXRBdHRyaWJ1dGUoImVudW1DbGFzc05h
bWUiKSkKKyAgICAjaWYgKCRjb2x1bW5FbGVtZW50LmdldEF0dHJpYnV0ZSgiaXNFbnVtIikg
PT0gInRydWUiICYmICRjb2xFbnVtUGFja2FnZSAhPSAkYmFzZVJlY29yZE1hcHBlclBhY2th
Z2UpCisgICAgaW1wb3J0ICR7Y29sRW51bVBhY2thZ2V9LiR7Y29sRW51bUNsYXNzTmFtZX07
CisgICAgI2VuZAogI2VuZAogI2lmICgke2Jhc2VSZWNvcmRNYXBwZXJQYWNrYWdlfSAhPSAk
ZGJPYmplY3RQYWNrYWdlKQogaW1wb3J0ICR7ZGJPYmplY3RQYWNrYWdlfS4ke2RiT2JqZWN0
Q2xhc3NOYW1lfTsKQEAgLTYzLDE3NiArNjUsMTIzIEBACiAjc2V0ICggJGluaGVyaXRhbmNl
QmFzZUNvbHVtbkVsZW1lbnRzID0gJHRvcnF1ZUdlbi5nZXRDaGlsZHJlbigiaW5oZXJpdGFu
Y2UtY29sdW1uIikpCiAjIyB0aGVyZSBzaG91bGQgYXQgbW9zdCBiZSBvbmUgaW5oZXJpdGFu
Y2UtY29sdW1uIGluIGVhY2ggdGFibGUKICNmb3JlYWNoICgkaW5oZXJpdGFuY2VCYXNlQ29s
dW1uRWxlbWVudCBpbiAkaW5oZXJpdGFuY2VCYXNlQ29sdW1uRWxlbWVudHMpCi0gICNzZXQg
KCAkY29sdW1uRWxlbWVudCA9ICRpbmhlcml0YW5jZUJhc2VDb2x1bW5FbGVtZW50LmdldENo
aWxkKCJjb2x1bW4iKSApCi0gICNzZXQgKCAkaW5oZXJpdGFuY2VFbGVtZW50cyA9ICRjb2x1
bW5FbGVtZW50LmdldENoaWxkcmVuKCJpbmhlcml0YW5jZSIpKQotICAjaWYgKCRpbmhlcml0
YW5jZUVsZW1lbnRzLnNpemUoKSA+IDApCi0gICAgI2lmICgke2Jhc2VSZWNvcmRNYXBwZXJQ
YWNrYWdlfSAhPSAkZGJPYmplY3RQYWNrYWdlKQotICAgICAgI2ZvcmVhY2ggKCRpbmhlcml0
YW5jZUVsZW1lbnQgaW4gJGluaGVyaXRhbmNlRWxlbWVudHMpCi0gICAgICAgICNzZXQgKCAk
aW5oZXJpdGFuY2VDbGFzc05hbWUgPSAkaW5oZXJpdGFuY2VFbGVtZW50LmdldEF0dHJpYnV0
ZSgiY2xhc3NOYW1lIikgKQotaW1wb3J0ICR7ZGJPYmplY3RQYWNrYWdlfS4ke2luaGVyaXRh
bmNlQ2xhc3NOYW1lfTsKLSAgICAgICNlbmQKLSAgICAjZW5kCi0gICNlbmQKKyAgICAjc2V0
ICggJGNvbHVtbkVsZW1lbnQgPSAkaW5oZXJpdGFuY2VCYXNlQ29sdW1uRWxlbWVudC5nZXRD
aGlsZCgiY29sdW1uIikgKQorICAgICNzZXQgKCAkaW5oZXJpdGFuY2VFbGVtZW50cyA9ICRj
b2x1bW5FbGVtZW50LmdldENoaWxkcmVuKCJpbmhlcml0YW5jZSIpKQorICAgICNpZiAoJGlu
aGVyaXRhbmNlRWxlbWVudHMuc2l6ZSgpID4gMCkKKyAgICAgICAgI2lmICgke2Jhc2VSZWNv
cmRNYXBwZXJQYWNrYWdlfSAhPSAkZGJPYmplY3RQYWNrYWdlKQorICAgICAgICAgICAgI2Zv
cmVhY2ggKCRpbmhlcml0YW5jZUVsZW1lbnQgaW4gJGluaGVyaXRhbmNlRWxlbWVudHMpCisg
ICAgICAgICAgICAgICAgI3NldCAoICRpbmhlcml0YW5jZUNsYXNzTmFtZSA9ICRpbmhlcml0
YW5jZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJjbGFzc05hbWUiKSApCisgICAgICAgICAgICBp
bXBvcnQgJHtkYk9iamVjdFBhY2thZ2V9LiR7aW5oZXJpdGFuY2VDbGFzc05hbWV9OworICAg
ICAgICAgICAgI2VuZAorICAgICAgICAjZW5kCisgICAgI2VuZAogI2VuZAogLyoqCiAgKiBN
YXBzIFJlc3VsdFNldCByb3dzIGludG8gJHtkYk9iamVjdENsYXNzTmFtZX0gb2JqZWN0cy4K
ICAqCi0jaWYgKCR0b3JxdWVHZW4uYm9vbGVhbk9wdGlvbigidG9ycXVlLm9tLmFkZFRpbWVT
dGFtcCIpKQotICogVGhlIHNrZWxldG9uIGZvciB0aGlzIGNsYXNzIHdhcyBhdXRvZ2VuZXJh
dGVkIGJ5IFRvcnF1ZSBvbjoKLSAqCi0gKiBbJHt0b3JxdWVHZW4ubm93KCl9XQotICoKLSNl
bmQKKyAgICAjaWYgKCR0b3JxdWVHZW4uYm9vbGVhbk9wdGlvbigidG9ycXVlLm9tLmFkZFRp
bWVTdGFtcCIpKQorICAgICAqIFRoZSBza2VsZXRvbiBmb3IgdGhpcyBjbGFzcyB3YXMgYXV0
b2dlbmVyYXRlZCBieSBUb3JxdWUgb246CisgICAgICoKKyAgICAgKiBbJHt0b3JxdWVHZW4u
bm93KCl9XQorICAgICAqCisgICAgI2VuZAogICovCiBAU3VwcHJlc3NXYXJuaW5ncygidW51
c2VkIikKIHB1YmxpYyBjbGFzcyAke2Jhc2VSZWNvcmRNYXBwZXJDbGFzc05hbWV9IGltcGxl
bWVudHMgUmVjb3JkTWFwcGVyPCR7ZGJPYmplY3RDbGFzc05hbWV9PgogewotI2lmICgkdG9y
cXVlR2VuLmJvb2xlYW5PcHRpb24oInRvcnF1ZS5vbS5hZGRUaW1lU3RhbXAiKSkKICAgICAv
KiogU2VyaWFsIHZlcnNpb24gKi8KK0BTZXJpYWwKKyAgICAjaWYgKCR0b3JxdWVHZW4uYm9v
bGVhbk9wdGlvbigidG9ycXVlLm9tLmFkZFRpbWVTdGFtcCIpKQogICAgIHByaXZhdGUgc3Rh
dGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9ICR7dG9ycXVlR2VuLm5vdygpLlRp
bWV9TDsKIAotI2Vsc2UKLSAgICAvKiogU2VyaWFsIHZlcnNpb24gKi8KLSAgICBwcml2YXRl
IHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKKyAgICAjZWxzZQor
ICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAx
TDsKIAotI2VuZAorICAgICNlbmQKICAgICAvKiogVGhlIGNsYXNzIGxvZy4gKi8KLSAgICBw
cml2YXRlIHN0YXRpYyBMb2cgbG9nCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nIGxv
ZwogICAgICAgICAgICAgPSBMb2dGYWN0b3J5LmdldExvZygke2Jhc2VSZWNvcmRNYXBwZXJD
bGFzc05hbWV9LmNsYXNzKTsKLSAgICAgICAgICAgIAorCiAgICAgIyMgVE9SUVVFLTM2NDog
Q2FjaGVkIFNRTCBleHByZXNzaW9ucyB0byBzcGVlZCB1cCBsb29raW5nIGZvciBjb2x1bW5z
IHNlbGVjdGVkIGJ5IGEgZ2l2ZW4gQ3JpdGVyaWEKLSNmb3JlYWNoICgkY29sdW1uRWxlbWVu
dCBpbiAkdG9ycXVlR2VuLmdldENoaWxkcmVuKCJjb2x1bW4iKSkKLSAgICAjc2V0ICggJHBl
ZXJDb2x1bW5OYW1lID0gJGNvbHVtbkVsZW1lbnQuZ2V0QXR0cmlidXRlKCJwZWVyQ29sdW1u
TmFtZSIpICkKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgJHtwZWVyQ29sdW1u
TmFtZX1fRVhQUkVTU0lPTiA9ICR7YmFzZVBlZXJDbGFzc05hbWV9LiR7cGVlckNvbHVtbk5h
bWV9LmdldFNxbEV4cHJlc3Npb24oKTsKLSNlbmQKKyAgICAjZm9yZWFjaCAoJGNvbHVtbkVs
ZW1lbnQgaW4gJHRvcnF1ZUdlbi5nZXRDaGlsZHJlbigiY29sdW1uIikpCisgICAgICAgICNz
ZXQgKCAkcGVlckNvbHVtbk5hbWUgPSAkY29sdW1uRWxlbWVudC5nZXRBdHRyaWJ1dGUoInBl
ZXJDb2x1bW5OYW1lIikgKQorICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcg
JHtwZWVyQ29sdW1uTmFtZX1fRVhQUkVTU0lPTiA9ICR7YmFzZVBlZXJDbGFzc05hbWV9LiR7
cGVlckNvbHVtbk5hbWV9LmdldFNxbEV4cHJlc3Npb24oKTsKKyAgICAjZW5kCiAKLSAgICAj
IyBUT1JRVUUtMzY0OiBSZW1vdmVkIHN0cmF0ZWd5IGluc3RhbmNlIHZhcmlhYmxlIGFzIHRo
aXMgYmUgY2FjaGVkIHBlciBSZWNvcmRNYXBwZXIgKFRocmVhZCBzYWZldHkvTXVsdGkgcXVl
cnkgc2FmZXR5PykKLSAgICAKLSAgICAjIyBUT1JRVUUtMzY0OiBpbml0IGEgbmV3IFN0cmF0
ZWd5IGltcGxlbWVudGF0aW9uCi0gICAgIyMgVE9SUVVFLTM3MjogaW5pdCBpcyBub3QgVGhy
ZWFkIHNhdmUgY2F1c2UgQXJyYXkgQ29uY3VycmVudE1vZGlmaWNhdGlvbkV4Y2VwdGlvbgot
ICAgIHB1YmxpYyBNYXBwaW5nU3RyYXRlZ3k8JHtkYk9iamVjdENsYXNzTmFtZX0+IGluaXRT
dHJhdGVneSgpCi0gICAgewotICAgICAgICAjaWYoIiR7dXNlTWFwcGluZ1N0cmF0ZWd5fSIg
PT0gInRydWUiKQotICAgICAgICByZXR1cm4gbmV3IE1hcHBpbmdTdHJhdGVneTwke2RiT2Jq
ZWN0Q2xhc3NOYW1lfT4oKTsKLSAgICAgICAgI2Vsc2UKLSAgICAgICAgLy8gbm8gTWFwcGlu
Z1N0cmF0ZWd5IHNpbmNlIHVzZU1hcHBpbmdTdHJhdGVneSBub3Qgc2V0Ci0gICAgICAgIHJl
dHVybiBudWxsOwotICAgICAgICAjZW5kCi0gICAgfQotI2lmKCIke3NpbXBsZU1hcHBpbmd9
IiA9PSAidHJ1ZSIpICNzZXQoICR1c2VTaW1wbGVNYXBwaW5nPTEgKSAjZW5kCi0KICAgICAv
KioKICAgICAgKiBDb25zdHJ1Y3RzIHRoZSBvYmplY3QgZnJvbSB0aGUgY3VycmVudCByb3cg
aW4gdGhlIHJlc3VsdFNldC4KICAgICAgKgogICAgICAqIEBwYXJhbSByZXN1bHRTZXQgdGhl
IHJlc3VsdFNldCB0byBvcGVyYXRlIG9uLCBhbHJlYWR5IHBvaW50aW5nCi0gICAgICogICAg
ICAgIHRvIHRoZSBjb3JyZWN0IHJvdy4gTm90IG51bGwuCisgICAgICogdG8gdGhlIGNvcnJl
Y3Qgcm93LiBOb3QgbnVsbC4KICAgICAgKiBAcGFyYW0gb2Zmc2V0IGEgcG9zc2libGUgb2Zm
c2V0IGluIHRoZSBjb2x1bW5zIHRvIGJlIGNvbnNpZGVyZWQKLSAgICAgKiAgICAgICAgKGlm
IHByZXZpb3VzIGNvbHVtbnMgY29udGFpbiBvdGhlciBvYmplY3RzKSwKLSAgICAgKiAgICAg
ICAgb3IgMCBmb3Igbm8gb2Zmc2V0LgorICAgICAqIChpZiBwcmV2aW91cyBjb2x1bW5zIGNv
bnRhaW4gb3RoZXIgb2JqZWN0cyksCisgICAgICogb3IgMCBmb3Igbm8gb2Zmc2V0LgogICAg
ICAqIEBwYXJhbSBjcml0ZXJpYSBUaGUgY3JpdGVyaWEgd2hpY2ggY3JlYXRlZCB0aGUgcmVz
dWx0IHNldC4KLSAgICAgKiAgICAgICAgSWYgc2V0LCB0aGUgYXR0cmlidXRlcyB0byBzZXQg
aW4gdGhlIGRhdGEgb2JqZWN0Ci0gICAgICogICAgICAgIGFyZSBkZXRlcm1pbmVkIGZyb20g
dGhlIHNlbGVjdCBjb2x1bW5zIGluIHRoZSBjcml0ZXJpYTsKLSAgICAgKiAgICAgICAgaWYg
bm8gbWF0Y2hpbmcgY29sdW1uIGNhbiBiZSBmb3VuZCwgbnVsbCBpcyByZXR1cm5lZC4KLSAg
ICAgKiAgICAgICAgSWYgbm90IHNldCwgYWxsIG9mIHRoZSB0YWJsZSdzIGNvbHVtbnMgYXJl
IHJlYWQgZnJvbSB0aGUKLSAgICAgKiAgICAgICAgcmVzdWx0IHNldCBpbiB0aGUgb3JkZXIg
ZGVmaW5lZCBpbiB0aGUgdGFibGUgZGVmaW5pdGlvbi4KKyAgICAgKiBJZiBzZXQsIHRoZSBh
dHRyaWJ1dGVzIHRvIHNldCBpbiB0aGUgZGF0YSBvYmplY3QKKyAgICAgKiBhcmUgZGV0ZXJt
aW5lZCBmcm9tIHRoZSBzZWxlY3QgY29sdW1ucyBpbiB0aGUgY3JpdGVyaWE7CisgICAgICog
aWYgbm8gbWF0Y2hpbmcgY29sdW1uIGNhbiBiZSBmb3VuZCwgbnVsbCBpcyByZXR1cm5lZC4K
KyAgICAgKiBJZiBub3Qgc2V0LCBhbGwgb2YgdGhlIHRhYmxlJ3MgY29sdW1ucyBhcmUgcmVh
ZCBmcm9tIHRoZQorICAgICAqIHJlc3VsdCBzZXQgaW4gdGhlIG9yZGVyIGRlZmluZWQgaW4g
dGhlIHRhYmxlIGRlZmluaXRpb24uCiAgICAgICoKICAgICAgKiBAcmV0dXJuIHRoZSBtYXBw
ZWQgb2JqZWN0LCBub3QgbnVsbC4KICAgICAgKgogICAgICAqIEB0aHJvd3MgVG9ycXVlRXhj
ZXB0aW9uIHdoZW4gcmVhZGluZyBmaWVsZHMgZnJvbSB0aGUgUmVjb3JkU2V0IGZhaWxzCi0g
ICAgICogICAgICAgICBvciBpZiBhIENyaXRlcmlhIGlzIHBhc3NlZCB3aGljaCBjb250YWlu
cyBzZWxlY3QgY29sdW1ucyBvdGhlcgotICAgICAqICAgICAgICAgdGhhbiB0aGUgY29sdW1u
cyBpbiB0aGUgJHtuYW1lfSB0YWJsZS4KKyAgICAgKiBvciBpZiBhIENyaXRlcmlhIGlzIHBh
c3NlZCB3aGljaCBjb250YWlucyBzZWxlY3QgY29sdW1ucyBvdGhlcgorICAgICAqIHRoYW4g
dGhlIGNvbHVtbnMgaW4gdGhlICR7bmFtZX0gdGFibGUuCiAgICAgICovCiAgICAgcHVibGlj
ICRkYk9iamVjdENsYXNzTmFtZSBwcm9jZXNzUm93KAotICAgICAgICAgICAgICAgIFJlc3Vs
dFNldCByZXN1bHRTZXQsCi0gICAgICAgICAgICAgICAgaW50IG9mZnNldCwKLSAgICAgICAg
ICAgICAgICBDcml0ZXJpYSBjcml0ZXJpYSkKKyAgICAgICAgUmVzdWx0U2V0IHJlc3VsdFNl
dCwKKyAgICBpbnQgb2Zmc2V0LAorICAgIENyaXRlcmlhIGNyaXRlcmlhKQogICAgICAgICAg
ICAgdGhyb3dzIFRvcnF1ZUV4Y2VwdGlvbgogICAgIHsKLSNzZXQgKCAkaW5oZXJpdGFuY2VC
YXNlQ29sdW1uRWxlbWVudCA9ICR0b3JxdWVHZW4uZ2V0Q2hpbGQoImluaGVyaXRhbmNlLWNv
bHVtbiIpICkKLSNpZiAoJGluaGVyaXRhbmNlQmFzZUNvbHVtbkVsZW1lbnQpCi0kdG9ycXVl
R2VuLm1lcmdlcG9pbnQoImNyZWF0ZURiT2JqZWN0SW5zdGFuY2VGcm9tSW5oZXJpdGFuY2Ui
KQotI2Vsc2UKLSR0b3JxdWVHZW4ubWVyZ2Vwb2ludCgiY3JlYXRlRGJPYmplY3RJbnN0YW5j
ZSIpCi0jZW5kCi0jaWYgKCR0b3JxdWVHZW4uYm9vbGVhbk9wdGlvbigidG9ycXVlLm9tLnRy
YWNrTG9hZGluZyIpKQotICAgICAgICB0cnkgCisgICAgICAgICNzZXQgKCAkaW5oZXJpdGFu
Y2VCYXNlQ29sdW1uRWxlbWVudCA9ICR0b3JxdWVHZW4uZ2V0Q2hpbGQoImluaGVyaXRhbmNl
LWNvbHVtbiIpICkKKyAgICAgICAgI2lmICgkaW5oZXJpdGFuY2VCYXNlQ29sdW1uRWxlbWVu
dCkKKyAgICAgICAgICAgICR0b3JxdWVHZW4ubWVyZ2Vwb2ludCgiY3JlYXRlRGJPYmplY3RJ
bnN0YW5jZUZyb21Jbmhlcml0YW5jZSIpCisgICAgICAgICNlbHNlCisgICAgICAgICAgICAk
dG9ycXVlR2VuLm1lcmdlcG9pbnQoImNyZWF0ZURiT2JqZWN0SW5zdGFuY2UiKQorICAgICAg
ICAjZW5kCisgICAgICAgICNpZiAoJHRvcnF1ZUdlbi5ib29sZWFuT3B0aW9uKCJ0b3JxdWUu
b20udHJhY2tMb2FkaW5nIikpCisgICAgICAgIHRyeQogICAgICAgICB7CiAgICAgICAgICAg
ICAke2ZpZWxkfS5zZXRMb2FkaW5nKHRydWUpOwotI2VuZAotICAgICAgICAjIyBUT1JRVUUt
MzY0IC0gc2ltcGxlIG1hcHBpbmcgaWYgd2UgZ290IHRoZSBleGFjdCBjb2x1bW4gc2l6ZSB3
ZSBhc3N1bWUgdGhlIGZ1bGwgdGFibGUgaXMgdXNlZCBpbiBjcml0ZXJpYSAtIHNraXBwaW5n
IHRoZSBtYXBwaW5nIG9mIGV2ZXJ5IGNvbHVtbgotICAgICAgICBpZiAoY3JpdGVyaWEgPT0g
bnVsbCAjaWYgKCR1c2VTaW1wbGVNYXBwaW5nKSB8fCAoY3JpdGVyaWEuZ2V0Sm9pbnMoKS5p
c0VtcHR5KCkgJiYgY3JpdGVyaWEuZ2V0U2VsZWN0Q29sdW1ucygpLnNpemUoKSAtIG9mZnNl
dCA9PSAgJHtiYXNlUGVlckNsYXNzTmFtZX0ubnVtQ29sdW1ucykgI2VuZCkKKyAgICAgICAg
I2VuZAorICAgICAgICBpZiAoY3JpdGVyaWEgPT0gbnVsbCkKICAgICAgICAgewotI3NldCAo
ICRuID0gMSApCi0jZm9yZWFjaCAoJGNvbHVtbkVsZW1lbnQgaW4gJHRvcnF1ZUdlbi5nZXRD
aGlsZHJlbigiY29sdW1uIikpCi0gICNzZXQgKCAkc2V0dGVyID0gJGNvbHVtbkVsZW1lbnQu
Z2V0QXR0cmlidXRlKCJzZXR0ZXIiKSApCi0gICNzZXQgKCAkZ2V0dGVyID0gJGNvbHVtbkVs
ZW1lbnQuZ2V0QXR0cmlidXRlKCJnZXR0ZXIiKSApCisgICAgICAgICAgICAjc2V0ICggJG4g
PSAxICkKKyAgICAgICAgICAgICNmb3JlYWNoICgkY29sdW1uRWxlbWVudCBpbiAkdG9ycXVl
R2VuLmdldENoaWxkcmVuKCJjb2x1bW4iKSkKKyAgICAgICAgICAgICAgICAjc2V0ICggJHNl
dHRlciA9ICRjb2x1bW5FbGVtZW50LmdldEF0dHJpYnV0ZSgic2V0dGVyIikgKQorICAgICAg
ICAgICAgICAgICNzZXQgKCAkZ2V0dGVyID0gJGNvbHVtbkVsZW1lbnQuZ2V0QXR0cmlidXRl
KCJnZXR0ZXIiKSApCiAgICAgICAgICAgICAgICAgJHtmaWVsZH0uJHtzZXR0ZXJ9KAotICAg
ICAgICAgICAgICAgICAgICAgICAgJHtnZXR0ZXJ9KHJlc3VsdFNldCwgb2Zmc2V0ICsgJG4p
KTsKLSAgI3NldCAoICRuID0gJG4gKyAxICkKLSNlbmQKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAjIyBUT1JRVUUt
MzcyOiB0aHJlYWQgc2F2ZQotICAgICAgICAgICAgICAgIE1hcHBpbmdTdHJhdGVneTwke2Ri
T2JqZWN0Q2xhc3NOYW1lfT4gc3RyYXRlZ3lMb2M9IGluaXRTdHJhdGVneSgpOyAKLQotICAg
ICAgICAgICAgICAgIC8vIHRyeSB0byBnZXQgY29sdW1ucyB0byBiZSBtYXBwZWQKLSAgICAg
ICAgICAgICAgICAvLyBmcm9tIGNyaXRlcmlhJ3Mgc2VsZWN0IGNvbHVtbnMKLSAgICAgICAg
ICAgICAgICBpbnQgdG90YWxPZmZzZXQgPSBvZmZzZXQgKyAxOwotICAgICAgICAgICAgICAg
IExpc3Q8Q29sdW1uPiBzZWxlY3RDb2x1bW5zID0gY3JpdGVyaWEuZ2V0U2VsZWN0Q29sdW1u
cygpOwotICAgICAgICAgICAgICAgIExpc3Q8Q29sdW1uPiBjb2x1bW5zV2l0aG91dE9mZnNl
dCA9IHNlbGVjdENvbHVtbnMuc3ViTGlzdCgKLSAgICAgICAgICAgICAgICAgICAgICAgIG9m
ZnNldCwgCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RDb2x1bW5zLnNpemUoKSk7
Ci0gICAgICAgICAgICAgICAgU2V0PFN0cmluZz4gY29sdW1uc01hcHBlZCA9IG5ldyBIYXNo
U2V0PFN0cmluZz4oKTsKLSAgICAgICAgICAgICAgICBmb3IgKENvbHVtbiBjb2x1bW4gOiBj
b2x1bW5zV2l0aG91dE9mZnNldCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIGZpbmFsIGludCBuZXh0T2Zmc2V0ID0gdG90YWxPZmZzZXQ7ICMjIGxlYWtpbmcg
YXNzaWdubWVudAotI3NldCAoICRlbHNlID0gIiIgKQotI2ZvcmVhY2ggKCRjb2x1bW5FbGVt
ZW50IGluICR0b3JxdWVHZW4uZ2V0Q2hpbGRyZW4oImNvbHVtbiIpKQotICAjc2V0ICggJHNl
dHRlciA9ICRjb2x1bW5FbGVtZW50LmdldEF0dHJpYnV0ZSgic2V0dGVyIikgKQotICAjc2V0
ICggJGdldHRlciA9ICRjb2x1bW5FbGVtZW50LmdldEF0dHJpYnV0ZSgiZ2V0dGVyIikgKQot
ICAjc2V0ICggJHBlZXJDb2x1bW5OYW1lID0gJGNvbHVtbkVsZW1lbnQuZ2V0QXR0cmlidXRl
KCJwZWVyQ29sdW1uTmFtZSIpICkKLSAgICAgICAgICAgICAgICAgICAgJHtlbHNlfQotICAg
ICAgICAgICAgICAgICAgICBpZiAoIWNvbHVtbnNNYXBwZWQuY29udGFpbnMoJHtwZWVyQ29s
dW1uTmFtZX1fRVhQUkVTU0lPTiApICYmICR7cGVlckNvbHVtbk5hbWV9X0VYUFJFU1NJT04u
ZXF1YWxzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5nZXRTcWxFeHBy
ZXNzaW9uKCkpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoc3RyYXRlZ3lMb2MhPW51bGwpIAotICAgICAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmF0ZWd5TG9jLmFkZENvbHVtbihu
ZXh0T2Zmc2V0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlcywgaW5z
dCkgLT4gaW5zdC4ke3NldHRlcn0oICR7Z2V0dGVyfShyZXMsIG5leHRPZmZzZXQpKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2ZpZWxkfS4ke3NldHRlcn0oICR7
Z2V0dGVyfShyZXN1bHRTZXQsIHRvdGFsT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zTWFwcGVkLmFkZCggJHtw
ZWVyQ29sdW1uTmFtZX1fRVhQUkVTU0lPTiApOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICNzZXQgKCAkZWxzZSA9ICJlbHNlICIpCi0jZW5kCi0gICAgICAgICAgICAgICAgICAgIHRv
dGFsT2Zmc2V0Kys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChj
b2x1bW5zTWFwcGVkLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIGxvZy5kZWJ1Zygibm8gY29sdW1ucyB0byBtYXAgZm91bmQgaW4gY3JpdGVy
aWEsICIKKyAgICAgICAgICAgICAgICAke2dldHRlcn0ocmVzdWx0U2V0LCBvZmZzZXQgKyAk
bikpOworICAgICAgICAgICAgICAgICNzZXQgKCAkbiA9ICRuICsgMSApCisgICAgICAgICAg
ICAjZW5kCisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAg
ICAjIyBUaGlzIGlzIHRoZSBzbG93IHBhdGgsIGJ1dCB3ZSBjYW4gcmV1c2UgdGhlIHN0cmF0
ZWd5IGdlbmVyYXRpb24gbG9naWMKKyAgICAgICAgICAgICMjIHRvIGF2b2lkIGR1cGxpY2F0
aW5nIHRoZSBtYXBwaW5nIGNvZGUuCisgICAgICAgICAgICBNYXBwaW5nU3RyYXRlZ3k8JHtk
Yk9iamVjdENsYXNzTmFtZX0+IHN0cmF0ZWd5ID0gZ2VuZXJhdGVTdHJhdGVneShvZmZzZXQs
IGNyaXRlcmlhKTsKKyAgICAgICAgICAgIGlmIChzdHJhdGVneSA9PSBudWxsKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygiQ291bGQgbm90IGdlbmVyYXRl
IGEgbWFwcGluZyBzdHJhdGVneSBmb3IgdGhlIGdpdmVuIGNyaXRlcmlhLCAiCiAgICAgICAg
ICAgICAgICAgICAgICAgICArICJyZXR1cm5pbmcgbnVsbCIpOwotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
aWYgKHN0cmF0ZWd5TG9jIT1udWxsKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgIHN0cmF0ZWd5TG9jLmZpbmlzaCgkdG9ycXVlR2VuLmdldENoaWxkcmVuKCJjb2x1
bW4iKS5zaXplKCksICNpZigiJHttYXBwaW5nU3RyYXRlZ3lTb3J0fSI9PSJ0cnVlIil0cnVl
I3tlbHNlfWZhbHNlI2VuZCk7Ci0gICAgICAgICAgICAgICAgICBzdHJhdGVneUxvYy5leGVj
dXRlKHJlc3VsdFNldCwgJGZpZWxkKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAke2ZpZWxkfS5zZXROZXcoZmFsc2UpOwotICAgICAgICAgICAg
JHtmaWVsZH0uc2V0TW9kaWZpZWQoZmFsc2UpOwotI2lmICgkdG9ycXVlR2VuLmJvb2xlYW5P
cHRpb24oInRvcnF1ZS5vbS50cmFja0xvYWRpbmciKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0cmF0ZWd5LmV4ZWN1dGUo
cmVzdWx0U2V0LCAke2ZpZWxkfSk7CisgICAgICAgIH0KKyAgICAgICAgJHtmaWVsZH0uc2V0
TmV3KGZhbHNlKTsKKyAgICAgICAgJHtmaWVsZH0uc2V0TW9kaWZpZWQoZmFsc2UpOworICAg
ICAgICAjaWYgKCR0b3JxdWVHZW4uYm9vbGVhbk9wdGlvbigidG9ycXVlLm9tLnRyYWNrTG9h
ZGluZyIpKQogICAgICAgICB9CiAgICAgICAgIGZpbmFsbHkKICAgICAgICAgewogICAgICAg
ICAgICAgJHtmaWVsZH0uc2V0TG9hZGluZyhmYWxzZSk7CiAgICAgICAgIH0KLSNlbmQKKyAg
ICAgICAgI2VuZAogICAgICAgICByZXR1cm4gJHtmaWVsZH07CiAgICAgfQogCi0kdG9ycXVl
R2VuLm1lcmdlcG9pbnQoImRiT2JqZWN0RmllbGRHZXR0ZXJzIikKLX0KKyAgICAkdG9ycXVl
R2VuLm1lcmdlcG9pbnQoIm1hcHBpbmdTdHJhdGVneVBhdGgiKQorICAgICR0b3JxdWVHZW4u
bWVyZ2Vwb2ludCgiZGJPYmplY3RGaWVsZEdldHRlcnMiKQorfQpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIGZpbGUKSW5kZXg6IHRvcnF1ZS1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2Fw
YWNoZS90b3JxdWUvdXRpbC9SZXN1bHRzZXRTcGxpdGVyYXRvci5qYXZhCjwrPklTTy04ODU5
LTEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvdG9ycXVlLXJ1bnRpbWUvc3JjL21haW4v
amF2YS9vcmcvYXBhY2hlL3RvcnF1ZS91dGlsL1Jlc3VsdHNldFNwbGl0ZXJhdG9yLmphdmEg
Yi90b3JxdWUtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdG9ycXVlL3V0aWwv
UmVzdWx0c2V0U3BsaXRlcmF0b3IuamF2YQotLS0gYS90b3JxdWUtcnVudGltZS9zcmMvbWFp
bi9qYXZhL29yZy9hcGFjaGUvdG9ycXVlL3V0aWwvUmVzdWx0c2V0U3BsaXRlcmF0b3IuamF2
YQkocmV2aXNpb24gMTkyODk4MikKKysrIGIvdG9ycXVlLXJ1bnRpbWUvc3JjL21haW4vamF2
YS9vcmcvYXBhY2hlL3RvcnF1ZS91dGlsL1Jlc3VsdHNldFNwbGl0ZXJhdG9yLmphdmEJKGRh
dGUgMTc1ODY1MzA5MjMzMCkKQEAgLTMxLDYgKzMxLDcgQEAKIGltcG9ydCBvcmcuYXBhY2hl
LnRvcnF1ZS5Ub3JxdWVFeGNlcHRpb247CiBpbXBvcnQgb3JnLmFwYWNoZS50b3JxdWUuVG9y
cXVlUnVudGltZUV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLnRvcnF1ZS5jcml0ZXJp
YS5Dcml0ZXJpYTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRvcnF1ZS5vbS5tYXBwZXIuTWFwcGlu
Z1N0cmF0ZWd5OwogaW1wb3J0IG9yZy5hcGFjaGUudG9ycXVlLm9tLm1hcHBlci5SZWNvcmRN
YXBwZXI7CiAKIC8qKgpAQCAtNDEsNiArNDIsNyBAQAogcHVibGljIGNsYXNzIFJlc3VsdHNl
dFNwbGl0ZXJhdG9yPFQ+IGV4dGVuZHMgQWJzdHJhY3RTcGxpdGVyYXRvcjxUPiBpbXBsZW1l
bnRzIFJ1bm5hYmxlCiB7CiAgICAgcHJpdmF0ZSBmaW5hbCBSZWNvcmRNYXBwZXI8VD4gcmVj
b3JkTWFwcGVyOworICAgIHByaXZhdGUgZmluYWwgTWFwcGluZ1N0cmF0ZWd5PFQ+IG1hcHBp
bmdTdHJhdGVneTsKICAgICBwcml2YXRlIGZpbmFsIENyaXRlcmlhIGNyaXRlcmlhOwogICAg
IHByaXZhdGUgZmluYWwgU3RhdGVtZW50IHN0YXRlbWVudDsKICAgICBwcml2YXRlIGZpbmFs
IFJlc3VsdFNldCByZXN1bHRTZXQ7CkBAIC01MCwxNiArNTIsMTcgQEAKICAgICBwcml2YXRl
IGxvbmcgcm93TnVtYmVyOwogCiAgICAgLyoqCi0gICAgICogQ29uc3RydWN0b3IKKyAgICAg
KiBDb25zdHJ1Y3RvciB3aXRoIGFuIGV4cGxpY2l0IE1hcHBpbmdTdHJhdGVneS4KICAgICAg
KgogICAgICAqIEBwYXJhbSByZWNvcmRNYXBwZXIgYSBSZWNvcmRNYXBwZXIgdG8gbWFwIFJl
c3VsdFNldCByb3dzIHRvIGVudGl0aWVzIG9mIHR5cGUgVAogICAgICAqIEBwYXJhbSBjcml0
ZXJpYSAgICAgYSBDcml0ZXJpYQogICAgICAqIEBwYXJhbSBzdGF0ZW1lbnQgICAgdGhlIHN0
YXRlbWVudCB0aGF0IGNyZWF0ZWQgdGhlIFJlc3VsdFNldAogICAgICAqIEBwYXJhbSByZXN1
bHRTZXQgICAgdGhlIEpEQkMgcmVzdWx0IHNldAorICAgICAqIEBwYXJhbSBtYXBwaW5nU3Ry
YXRlZ3kgICAgIGEgTWFwcGluZ1N0cmF0ZWd5IHRvIHVzZQogICAgICAqIEB0aHJvd3MgVG9y
cXVlRXhjZXB0aW9uIGJhY2tlbmQgZGF0YWJhc2UgZXhjZXB0aW9uCiAgICAgICovCiAgICAg
cHVibGljIFJlc3VsdHNldFNwbGl0ZXJhdG9yKFJlY29yZE1hcHBlcjxUPiByZWNvcmRNYXBw
ZXIsIENyaXRlcmlhIGNyaXRlcmlhLAotICAgICAgICAgICAgU3RhdGVtZW50IHN0YXRlbWVu
dCwgUmVzdWx0U2V0IHJlc3VsdFNldCkgdGhyb3dzIFRvcnF1ZUV4Y2VwdGlvbgorICAgICAg
ICAgICAgU3RhdGVtZW50IHN0YXRlbWVudCwgUmVzdWx0U2V0IHJlc3VsdFNldCwgTWFwcGlu
Z1N0cmF0ZWd5PFQ+IG1hcHBpbmdTdHJhdGVneSkgdGhyb3dzIFRvcnF1ZUV4Y2VwdGlvbgog
ICAgIHsKICAgICAgICAgc3VwZXIoTG9uZy5NQVhfVkFMVUUsIFNwbGl0ZXJhdG9yLk9SREVS
RUQpOwogCkBAIC02Nyw2ICs3MCw4IEBACiAgICAgICAgIHRoaXMuY3JpdGVyaWEgPSBjcml0
ZXJpYTsKICAgICAgICAgdGhpcy5zdGF0ZW1lbnQgPSBzdGF0ZW1lbnQ7CiAgICAgICAgIHRo
aXMucmVzdWx0U2V0ID0gcmVzdWx0U2V0OworICAgICAgICBNYXBwaW5nU3RyYXRlZ3k8VD4g
bXlNYXBwaW5nU3RyYXRlZ3kgPSBtYXBwaW5nU3RyYXRlZ3k7CisKICAgICAgICAgdGhpcy5v
ZmZzZXQgPSAwOyAvL2RhdGFiYXNlIHRha2VzIGNhcmUgb2Ygb2Zmc2V0CiAgICAgICAgIHRo
aXMubGltaXQgPSAtMTsgLy9kYXRhYmFzZSB0YWtlcyBjYXJlIG9mIGxpbWl0CiAgICAgICAg
IHRoaXMucm93TnVtYmVyID0gMDsKQEAgLTkxLDcgKzk2LDI4IEBACiAgICAgICAgICAgICAg
ICAgICAgIGxpbWl0ID0gb2Zmc2V0ICsgY3JpdGVyaWEuZ2V0TGltaXQoKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGdlbmVyYXRlIGEg
c3RyYXRlZ3ksIGlmIG5vdCBhbHJlYWR5IHByb3ZpZGVkCisgICAgICAgICAgICBpZiAobWFw
cGluZ1N0cmF0ZWd5ID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBteU1hcHBpbmdTdHJh
dGVneSA9IHJlY29yZE1hcHBlci5nZW5lcmF0ZVN0cmF0ZWd5KG9mZnNldCwgY3JpdGVyaWEp
OworICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIHRoaXMubWFwcGluZ1N0cmF0
ZWd5ID0gbXlNYXBwaW5nU3RyYXRlZ3k7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29u
c3RydWN0b3IKKyAgICAgKgorICAgICAqIEBwYXJhbSByZWNvcmRNYXBwZXIgYSBSZWNvcmRN
YXBwZXIgdG8gbWFwIFJlc3VsdFNldCByb3dzIHRvIGVudGl0aWVzIG9mIHR5cGUgVAorICAg
ICAqIEBwYXJhbSBjcml0ZXJpYSAgICAgYSBDcml0ZXJpYQorICAgICAqIEBwYXJhbSBzdGF0
ZW1lbnQgICAgdGhlIHN0YXRlbWVudCB0aGF0IGNyZWF0ZWQgdGhlIFJlc3VsdFNldAorICAg
ICAqIEBwYXJhbSByZXN1bHRTZXQgICAgdGhlIEpEQkMgcmVzdWx0IHNldAorICAgICAqIEB0
aHJvd3MgVG9ycXVlRXhjZXB0aW9uIGJhY2tlbmQgZGF0YWJhc2UgZXhjZXB0aW9uCisgICAg
ICovCisgICAgcHVibGljIFJlc3VsdHNldFNwbGl0ZXJhdG9yKFJlY29yZE1hcHBlcjxUPiBy
ZWNvcmRNYXBwZXIsIENyaXRlcmlhIGNyaXRlcmlhLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTdGF0ZW1lbnQgc3RhdGVtZW50LCBSZXN1bHRTZXQgcmVzdWx0U2V0KSB0
aHJvd3MgVG9ycXVlRXhjZXB0aW9uCisgICAgeworICAgICAgICB0aGlzKHJlY29yZE1hcHBl
ciwgY3JpdGVyaWEsIHN0YXRlbWVudCwgcmVzdWx0U2V0LCBudWxsKTsKICAgICB9CiAKICAg
ICAvKiAobm9uLUphdmFkb2MpCkBAIC0xMTcsNyArMTQzLDcgQEAKICAgICAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgICAgICByb3dOdW1iZXIrKzsKLSAgICAgICAgICAgICAgICBU
IHJlc3VsdCA9IHJlY29yZE1hcHBlci5wcm9jZXNzUm93KHJlc3VsdFNldCwgMCwgY3JpdGVy
aWEpOworICAgICAgICAgICAgICAgIFQgcmVzdWx0ID0gcmVjb3JkTWFwcGVyLnByb2Nlc3NS
b3cocmVzdWx0U2V0LCAwLCBjcml0ZXJpYSwgbWFwcGluZ1N0cmF0ZWd5KTsKICAgICAgICAg
ICAgICAgICBhY3Rpb24uYWNjZXB0KHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgICAgICB9Cg==


--------------P111Vv5onH3jsurckgAjxjAa
Content-Type: text/plain; charset=us-ascii


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
--------------P111Vv5onH3jsurckgAjxjAa--