x86-64, amd64, contrib: sb-fiber
Jesse Bouwman via Sbcl-devel <[email protected]> Mon, 01 Jun 2026 19:12:53 +0000
| Newsgroups | gmane.lisp.steel-bank.devel |
|---|---|
| Message-ID | <[email protected]> |
--b1=_D6HjCpfIgRg39jtH6OSxSrrDhqiWoDiY5lB10hD94 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Howdy sbcl-devel, Here is a revised patch to introduce fibers/coroutines via a sb-fiber contr= ib and what I believe to be idiomatic x86-64/arm64 runtime support. Subsequ= ent to providing invaluable guidance on implementation, Charles Zhang was k= ind enough to review a version a few weeks ago and suggested that it was in= good enough shape that I share it here to solicit feedback on interface sh= ape, completeness and fitness to purpose. There's been further work over the past few weeks, mainly an outcome of exp= osing a fiber-based HTTP proxy in a DMZ, where it was promptly incinerated = by scanners, php probes, etc. The package has gained more consistent interr= upt and condition support, and notably the ability to migrate fibers betwee= n threads, which should allow users good flexibility in scheduler design. F= urther to that, I'll say again that the main goal here has been to introduc= e the minimal operation set to support user applications: concrete schedule= r and generator implementations are not provided. I'll share gists of what = I'm using for those, if there is interest. Some measurements on arm64, Apple M2, Mac14,2 are: pingpong (resume, yield) ~62 ns/op (2 switches/iter -> ~31 ns/swi= tch) switch, 32 live bindings ~97 ns/op (binding-stack swap =3D ~2 ns/bin= ding) make-fiber, release ~4.6 us/op (stack mmap, struct alloc) (Creation is mmap-bound; pooling is the obvious mitigation.) A patch is attached, corresponding to https://github.com/jbouwman/sbcl/comm= it/1c5ba1fc4ee3246e4455e2af998b9e7eb004cbf2 =E2=80=94 Jesse --b1=_D6HjCpfIgRg39jtH6OSxSrrDhqiWoDiY5lB10hD94 Content-Type: application/octet-stream; x-unix-mode=0644; name=0001-x86-64-arm64-contrib-cooperative-user-space-coroutin.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=0001-x86-64-arm64-contrib-cooperative-user-space-coroutin.patch RnJvbSAxYzViYTFmYzRlZTMyNDZlNDQ1NWUyYWY5OThiOWU3ZWIwMDRjYmYyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZXNzZSBCb3V3bWFuIDxqZXNzZS5ib3V3bWFuQHBtLm1lPgpE YXRlOiBTYXQsIDMwIE1heSAyMDI2IDA4OjM3OjMzIC0wNzAwClN1YmplY3Q6IFtQQVRDSF0geDg2 LTY0LCBhcm02NCwgY29udHJpYjogY29vcGVyYXRpdmUgdXNlci1zcGFjZSBjb3JvdXRpbmVzCgpS dW50aW1lIHN1cHBvcnQgYW5kIGEgY29udHJpYiAoJ3NiLWZpYmVyJykgdGhhdCBwcm92aWRlIHVz ZXItc3BhY2UKY29yb3V0aW5lcyB3aXRoIGNvbnRyb2wgYW5kIGJpbmRpbmcgc3RhY2tzLCBjb29w ZXJhdGl2ZWx5IHNjaGVkdWxlZCwKbWlncmF0YWJsZSBiZXR3ZWVuIE9TIHRocmVhZHMuCgpHYXRl ZCBvbiA6c2ItZmliZXIgKG9mZiBieSBkZWZhdWx0KSBmb3IgeDg2LTY0IGFuZCBhcm02NCBQT1NJ WCBidWlsZHMuCkFQSSBkb2N1bWVudGF0aW9uIGluIGNvbnRyaWIvc2ItZmliZXIvc2ItZmliZXIu dGV4aW5mby4KLS0tCiBjb250cmliL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgfCAg IDIgKy0KIGNvbnRyaWIvc2ItZmliZXIvTWFrZWZpbGUgICAgICAgICAgICAgICB8ICAgMyArCiBj b250cmliL3NiLWZpYmVyL1JFQURNRS5tZCAgICAgICAgICAgICAgfCAxMTIgKysrKysKIGNvbnRy aWIvc2ItZmliZXIvYXJtNjQtdm9wcy5saXNwICAgICAgICB8ICAzOCArKwogY29udHJpYi9zYi1m aWJlci9jb25zdGFudHMubGlzcCAgICAgICAgIHwgIDIwICsKIGNvbnRyaWIvc2ItZmliZXIvZmli ZXItZmZpLmxpc3AgICAgICAgICB8IDMwMCArKysrKysrKysrKysKIGNvbnRyaWIvc2ItZmliZXIv ZmliZXIubGlzcCAgICAgICAgICAgICB8IDM0OCArKysrKysrKysrKysrCiBjb250cmliL3NiLWZp YmVyL3BhY2thZ2UubGlzcCAgICAgICAgICAgfCAgNTQgKysKIGNvbnRyaWIvc2ItZmliZXIvc2It ZmliZXIuYXNkICAgICAgICAgICB8ICAyMSArCiBjb250cmliL3NiLWZpYmVyL3NiLWZpYmVyLnRl eGluZm8gICAgICAgfCAyNDkgKysrKysrKysrKwogY29udHJpYi9zYi1maWJlci94ODYtNjQtdm9w cy5saXNwICAgICAgIHwgIDMxICsrCiBtYWtlLXRhcmdldC0yLWxvYWQubGlzcCAgICAgICAgICAg ICAgICAgfCAgIDUgKy0KIHNyYy9hc3NlbWJseS9hcm02NC90cmFtcHMubGlzcCAgICAgICAgICB8 ICAyMCArCiBzcmMvYXNzZW1ibHkveDg2LTY0L3RyYW1wcy5saXNwICAgICAgICAgfCAgMTcgKwog c3JjL2NvbGQvYmFzZS10YXJnZXQtZmVhdHVyZXMubGlzcC1leHByIHwgICAzICsKIHNyYy9jb2xk L3NoYXJlZC5saXNwICAgICAgICAgICAgICAgICAgICB8ICAgNiArCiBzcmMvY29tcGlsZXIvYXJt NjQvbWFjcm9zLmxpc3AgICAgICAgICAgfCAgMzUgKysKIHNyYy9jb21waWxlci9hcm02NC9wYXJt cy5saXNwICAgICAgICAgICB8ICAxMCArLQogc3JjL2NvbXBpbGVyL3g4Ni02NC9tYWNyb3MubGlz cCAgICAgICAgIHwgIDI1ICsKIHNyYy9jb21waWxlci94ODYtNjQvcGFybXMubGlzcCAgICAgICAg ICB8ICAxMSArLQogc3JjL3J1bnRpbWUvQ29uZmlnLmFybTY0LWFuZHJvaWQgICAgICAgIHwgICA1 ICsKIHNyYy9ydW50aW1lL0NvbmZpZy5hcm02NC1ic2QgICAgICAgICAgICB8ICAgNCArCiBzcmMv cnVudGltZS9Db25maWcuYXJtNjQtZGFyd2luICAgICAgICAgfCAgIDQgKwogc3JjL3J1bnRpbWUv Q29uZmlnLmFybTY0LWxpbnV4ICAgICAgICAgIHwgICA1ICsKIHNyYy9ydW50aW1lL0NvbmZpZy54 ODYtNjQtYW5kcm9pZCAgICAgICB8ICAgNCArCiBzcmMvcnVudGltZS9Db25maWcueDg2LTY0LWJz ZCAgICAgICAgICAgfCAgIDQgKwogc3JjL3J1bnRpbWUvQ29uZmlnLng4Ni02NC1kYXJ3aW4gICAg ICAgIHwgICA0ICsKIHNyYy9ydW50aW1lL0NvbmZpZy54ODYtNjQtaGFpa3UgICAgICAgICB8ICAg NCArCiBzcmMvcnVudGltZS9Db25maWcueDg2LTY0LWxpbnV4ICAgICAgICAgfCAgIDQgKwogc3Jj L3J1bnRpbWUvQ29uZmlnLng4Ni02NC1zdW5vcyAgICAgICAgIHwgICA0ICsKIHNyYy9ydW50aW1l L2FsbG9jLmMgICAgICAgICAgICAgICAgICAgICB8ICAgNCArCiBzcmMvcnVudGltZS9hcm02NC1m aWJlci5jICAgICAgICAgICAgICAgfCAxNjEgKysrKysrCiBzcmMvcnVudGltZS9hcm02NC1maWJl ci5oICAgICAgICAgICAgICAgfCAgMjggKysKIHNyYy9ydW50aW1lL2ZpYmVyLmMgICAgICAgICAg ICAgICAgICAgICB8IDQ2MiArKysrKysrKysrKysrKysrKysKIHNyYy9ydW50aW1lL2ZpYmVyLmgg ICAgICAgICAgICAgICAgICAgICB8IDEyNCArKysrKwogc3JjL3J1bnRpbWUvZ2VuY2djLmMgICAg ICAgICAgICAgICAgICAgIHwgIDM0ICstCiBzcmMvcnVudGltZS9pbnRlcnJ1cHQuYyAgICAgICAg ICAgICAgICAgfCAgIDcgKy0KIHNyYy9ydW50aW1lL2ludGVycnVwdC5oICAgICAgICAgICAgICAg ICB8ICAgMSArCiBzcmMvcnVudGltZS9wbXJnYy5jICAgICAgICAgICAgICAgICAgICAgfCAgMjMg Ky0KIHNyYy9ydW50aW1lL3RocmVhZC5oICAgICAgICAgICAgICAgICAgICB8ICAgNyArCiBzcmMv cnVudGltZS94ODYtNjQtZmliZXIuYyAgICAgICAgICAgICAgfCAxMDkgKysrKysKIHNyYy9ydW50 aW1lL3g4Ni02NC1maWJlci5oICAgICAgICAgICAgICB8ICAyMyArCiB0ZXN0cy9maWJlci5pbXB1 cmUubGlzcCAgICAgICAgICAgICAgICAgfCA2MjUgKysrKysrKysrKysrKysrKysrKysrKysrCiB0 ZXN0cy9maWJlci5wdXJlLmxpc3AgICAgICAgICAgICAgICAgICAgfCA0NTcgKysrKysrKysrKysr KysrKysKIHRlc3RzL2lucHV0LW1hbmlmZXN0Lmxpc3AtZXhwciAgICAgICAgICB8ICAgMiArCiA0 NSBmaWxlcyBjaGFuZ2VkLCAzNDEwIGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCiBjcmVh dGUgbW9kZSAxMDA2NDQgY29udHJpYi9zYi1maWJlci9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAw NjQ0IGNvbnRyaWIvc2ItZmliZXIvUkVBRE1FLm1kCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJp Yi9zYi1maWJlci9hcm02NC12b3BzLmxpc3AKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3Ni LWZpYmVyL2NvbnN0YW50cy5saXNwCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9zYi1maWJl ci9maWJlci1mZmkubGlzcAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvc2ItZmliZXIvZmli ZXIubGlzcAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvc2ItZmliZXIvcGFja2FnZS5saXNw CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9zYi1maWJlci9zYi1maWJlci5hc2QKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBjb250cmliL3NiLWZpYmVyL3NiLWZpYmVyLnRleGluZm8KIGNyZWF0ZSBt b2RlIDEwMDY0NCBjb250cmliL3NiLWZpYmVyL3g4Ni02NC12b3BzLmxpc3AKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzcmMvcnVudGltZS9hcm02NC1maWJlci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3Jj L3J1bnRpbWUvYXJtNjQtZmliZXIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9ydW50aW1lL2Zp YmVyLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvcnVudGltZS9maWJlci5oCiBjcmVhdGUgbW9k ZSAxMDA2NDQgc3JjL3J1bnRpbWUveDg2LTY0LWZpYmVyLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz cmMvcnVudGltZS94ODYtNjQtZmliZXIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2ZpYmVy LmltcHVyZS5saXNwCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMvZmliZXIucHVyZS5saXNwCgpk aWZmIC0tZ2l0IGEvY29udHJpYi9NYWtlZmlsZSBiL2NvbnRyaWIvTWFrZWZpbGUKaW5kZXggMDBl YzM4OWIzLi5hYWJiMmQ3ZDkgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvTWFrZWZpbGUKKysrIGIvY29u dHJpYi9NYWtlZmlsZQpAQCAtMyw3ICszLDcgQEAgdnBhdGggJS5mYXNsIC4uL29iai9zYmNsLWhv bWUvY29udHJpYi8KIGNvbnRyaWJzID0gc2ItcG9zaXggc2ItYnNkLXNvY2tldHMgc2ItaW50cm9z cGVjdCBzYi1jbHRsMiBzYi1hY2xyZXBsIFwKICAgICAgc2Itc3Byb2Ygc2ItY2Fwc3RvbmUgc2It bWQ1IHNiLWNhcHN0b25lIHNiLWV4ZWN1dGFibGUgc2ItZ21wIHNiLW1wZnIgXAogICAgICBzYi1x dWV1ZSBzYi1yb3RhdGUtYnl0ZSBzYi1ydCBzYi1zaW1wbGUtc3RyZWFtcyBzYi1jb25jdXJyZW5j eSBzYi1jb3ZlciBcCi0gICAgIHNiLXNpbWQgc2ItZ3JvdmVsIHNiLXBlcmYgYXNkZgorICAgICBz Yi1zaW1kIHNiLWdyb3ZlbCBzYi1wZXJmIHNiLWZpYmVyIGFzZGYKIAogYWN0aXZlX2NvbnRyaWJz ID0gJChmaWx0ZXItb3V0ICQoU0JDTF9DT05UUklCX0JMT0NLTElTVCksJChjb250cmlicykpCiAK ZGlmZiAtLWdpdCBhL2NvbnRyaWIvc2ItZmliZXIvTWFrZWZpbGUgYi9jb250cmliL3NiLWZpYmVy L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uNjgxNWU2ODc2 Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9zYi1maWJlci9NYWtlZmlsZQpAQCAtMCwwICsx LDMgQEAKK1NZU1RFTT1zYi1maWJlcgorQ0ZMQUdTKz0tSSQoU0JDTF9UT1ApL3NyYy9ydW50aW1l CitpbmNsdWRlIC4uL2FzZGYtbW9kdWxlLm1rCmRpZmYgLS1naXQgYS9jb250cmliL3NiLWZpYmVy L1JFQURNRS5tZCBiL2NvbnRyaWIvc2ItZmliZXIvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMC4uMmVmY2U0ZjM3Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJp Yi9zYi1maWJlci9SRUFETUUubWQKQEAgLTAsMCArMSwxMTIgQEAKKyMgc2ItZmliZXIgbm90ZXMK KworVGhlc2UgYXJlIHNvbWUgdGVjaG5pY2FsIG5vdGVzIG9uIGltcGxlbWVudGF0aW9uIG9mIGZp YmVycy4KK1VzZXItZmFjaW5nIEFQSSBkb2N1bWVudGF0aW9uIGNhbiBiZSBmb3VuZCBpbiBgc2It ZmliZXIudGV4aW5mb2AuCisKKyMjIENvZGUgb3JnYW5pemF0aW9uCisKK3wgUm9sZSAgICAgICB8 IEZpbGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wtLS0tLS0tLS0tLS18LS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKK3wgTGlzcCBBUEkgICB8IGBjb250 cmliL3NiLWZpYmVyL2ZpYmVyLmxpc3BgICAgICAgIHwKK3wgTGlzcCA8LT4gQyB8IGBjb250cmli L3NiLWZpYmVyL2ZpYmVyLWZmaS5saXNwYCAgIHwKK3wgVk9QcyAgICAgICB8IGBjb250cmliL3Ni LWZpYmVyLzxhcmNoPi12b3BzLmxpc3BgIHwKK3wgQXNzZW1ibHkgICB8IGBzcmMvYXNzZW1ibHkv PGFyY2g+L3RyYW1wcy5saXNwYCAgIHwKK3wgUnVudGltZSAgICB8IGBzcmMvcnVudGltZS88YXJj aD4tZmliZXIue2MsIGh9YCAgIHwKK3wgICAgICAgICAgICB8IGBzcmMvcnVudGltZS9maWJlci57 YywgaH1gICAgICAgICAgIHwKKworQyBtYW5hZ2VzIGFsbG9jYXRpb24gb2Ygc3RhY2tzLCBHQyBp bnRlZ3JhdGlvbiwgYmluZGluZyBzdGFjayBzd2FwLAorcHNldWRvLWF0b21pYyBlbnRyeSBhbmQg ZXhpdCwgYW5kIGRlZmluZXMgcGVyLWFyY2hpdGVjdHVyZSBjb250ZXh0CitzdHJ1Y3R1cmVzIHRv IGhvbGQgY2FsbGVlLXNhdmVkIHJlZ2lzdGVycyB0aGF0IGFyZSBwcmVzZXJ2ZWQgd2hlbiBhCitm aWJlciBpcyBzd2l0Y2hlZC4KKworTGlzcCBtYW5hZ2VzIGFyZ3VtZW50IHZhbGlkYXRpb24sIGNh dGNoIGFuZCB1bndpbmQgY2hhaW4gc2F2ZSBhbmQKK2luc3RhbGwsIGAqY3VycmVudC1maWJlcipg LCByZS1zaWduYWxpbmcgY29uZGl0aW9ucyBjYXB0dXJlZCBieSB0aGUKK3RyYW1wb2xpbmUsIGFu ZCBkZWZpbmVzIHRoZSBWT1AgdGhhdCBpbXBsZW1lbnRzIHJlZ2lzdGVyIHN3YXAgaW5saW5lCith dCB0aGUgYHN3aXRjaC1maWJlcmAgY2FsbCBzaXRlLgorCisjIyBTdGFjayBsYXlvdXQKKworRmli ZXJzJyBjb250cm9sIGFuZCBiaW5kaW5nIHN0YWNrcyBhcmUgbWFwcGVkIHJlZ2lvbnMgd2l0aCBn dWFyZCBwYWdlcwordGhhdCBmb2xsb3cgdGhlIHBlci10aHJlYWQgb3ZlcmZsb3cgbGF5b3V0LiAg T24KK2AjLWMtc3RhY2staXMtY29udHJvbC1zdGFja2AgdGFyZ2V0cyAoZS5nLiBhcm02NCkgdGhl IExpc3AgY29udHJvbAorc3RhY2sgYW5kIHRoZSBDIHN0YWNrIGFyZSBzZXBhcmF0ZSByZWdpb25z IHRoYXQgYm90aCBiZWxvbmcgdG8gYQorZmliZXIuCisKKyMjIEJpbmRpbmcgc3RhY2sgc3dhcAor CitBIGJpbmRpbmcgc3RhY2sgZW50cnkgaXMgYCh2YWx1ZSwgdGxzLWluZGV4KWAsIHdoZXJlIHZh bHVlIGlzIHRoZQorVExTIHZhbHVlIGhlbGQganVzdCBiZWZvcmUgdGhlIGJpbmRpbmcgd2FzIHB1 c2hlZC4gIGBOYCBuZXN0ZWQKK2JpbmRpbmdzIG9mIHRoZSBzYW1lIHN5bWJvbCBmb3JtIGEgY2hh aW46IGVudHJ5IGBrYCBzdG9yZXMgYFZfe2stMX1gLAorYW5kIHRoZSBsaXZlIFRMUyBzbG90IGhv bGRzIGBWX05gLgorCitgc3dhcF9iaW5kaW5nc197Zm9yd2FyZCxiYWNrd2FyZH1gIGluIGBmaWJl ci5jYDoKKworVG8gc3VzcGVuZCBhIGZpYmVyLCB3YWxrIHRoZSBlbnRyaWVzIGZyb20gbmV3ZXN0 IHRvIG9sZGVzdCwgZXhjaGFuZ2luZworZWFjaCBlbnRyeSdzIHNhdmVkIHZhbHVlIHdpdGggdGhl IGxpdmUgVExTLiAgQWZ0ZXIgdGhlIHBhc3MsIGVudHJ5IGBrYAoraG9sZHMgYFZfa2AgYW5kIFRM UyBob2xkcyBgVl8wYC4gVG8gcmVzdW1lLCB3YWxrIG9sZGVzdCB0byBuZXdlc3QuCisKK1RoZSBg OnRscy1sb2FkLWluZGlyZWN0YCBmZWF0dXJlIG1haW50YWlucyBhbiBpbmRpcmVjdCBjZWxsIHBl ciBUTFMKK3Nsb3QgcG9pbnRpbmcgYXQgdGhlIGxpdmUgdmFsdWU7IGBleGNoYW5nZV9iaW5kaW5n X3dpdGhfdGxzYCBtYWludGFpbnMKK2l0IGFsb25nc2lkZSB0aGUgVExTIGV4Y2hhbmdlLgorCisj IyBQc2V1ZG8tYXRvbWljIHN3aXRjaCB3aW5kb3cKKworQSB0aHJlYWQgaXMgaW5jb25zaXN0ZW50 IGR1cmluZyBgc3dpdGNoLWZpYmVyYCwgc28gdGhlIHN3YXAgaXMgYnJhY2tldGVkCitieSBwc2V1 ZG8tYXRvbWljLiBUaGUgTGlzcCBzaGltIGVudGVycyBQQSBieSBjYWxsaW5nIHRoZSBDIGZ1bmN0 aW9uCitgc2JfZmliZXJfc3dpdGNoX3ByZXBgLCB3aGljaCBzdGFnZXMgQlNQIHN3YXAsIGNvbnRy b2wgc3RhY2sgYm91bmRzCitzd2FwLCBzdGF0ZSBmbGlwLCBhbmQgYmluZGluZyBzdGFjayBzd2Fw LgorCitUaGUgYCVzd2FwLXJlZ3NgIFZPUCB0aGVuIGRvZXMgdGhlIHJlZ2lzdGVyIGFuZCBTUCBz d2FwLCBhbmQKK3RyYW5zZmVycyBjb250cm9sIHRvIHRoZSByZXN1bWluZyBmaWJlcidzIHN0YWNr LiAgVGhlIHJlc3VtaW5nIHNpZGUsCithdCB0aGUgVk9QJ3MgYFJFU1VNRWAgbGFiZWwsIGV4aXRz IFBBIGFuZCBjaGVja3MgdG8gc2VlIGlmIGEgc2lnbmFsCithcnJpdmVkIGR1cmluZyB0aGUgd2lu ZG93LgorCitgc2JfZmliZXJfZXhpdF9wYWAgaXMgdGhlIHNhbWUgZXhpdCBwYXRoIGZvciB0aGUg dHJhbXBvbGluZSdzCithdXRvLXJldHVybiBmbG93LCB3aGljaCBydW5zIGluIEMgYW5kIGNhbid0 IHVzZSB0aGUgVk9QJ3MgZXhpdC4KKworIyMgR0MKKworYGV4dHJhX3RocmVhZF9kYXRhLT5maWJl cl9saXN0YCBlbnVtZXJhdGVzIGV2ZXJ5IHJlZ2lzdGVyZWQgZmliZXIgb24KK2EgdGhyZWFkOiBH QyB3YWxrcyBpdC4KKworU3VzcGVuZGVkIGZpYmVycyBtYXJrZWQgcnVubmFibGUgb3IgbmV3IGhh dmUgdGhlaXIgc2F2ZWQgU1AgcmFuZ2UKK2BbY3R4LnNwIC4uIHN0YWNrX2VuZClgIGFuZCB0aGVp ciBjYWxsZWUtc2F2ZWQgcmVnaXN0ZXJzCitjb25zZXJ2YXRpdmVseSBwaW5uZWQuICBPbiBhcm02 NCB0aGUgc2VwYXJhdGUgTGlzcCBjb250cm9sIHN0YWNrCitgW2Jhc2UsIGNzcF9zYXZlKWAgaXMg cGlubmVkIHRoZSBzYW1lIHdheTsgdGhlIHJlZ2lvbiBhYm92ZQorYGNzcF9zYXZlYCBpcyBkZWFk IGFuZCB1bnNjYW5uZWQuCisKK09uIGFybTY0LCBhIGNvbnNlcnZhdGl2ZSBzY2FubmVyIHdhbGtz IGBbYmFzZSwgQ1NQX3NhdmUpYCBvbiBhCitzdXNwZW5kZWQgZmliZXIgYW5kIHBpbnMgYW55dGhp bmcgcG9pbnRlci1zaGFwZWQuCisKK2BzYl9maWJlcl9saXNwX3N0YWNrX3N1c3BlbmRgIG1haW50 YWlucyBhIGBkaXJ0eV9oaWdoYCBwZXIgZmliZXI6IHRoZQorYWRkcmVzcyBzdWNoIHRoYXQgYFtk aXJ0eV9oaWdoLCB1c2FibGVfZW5kKWAgaXMga25vd24gY2xlYW4uICBPbiBlYWNoCitzdXNwZW5k OgorCistIGBDU1AgPT0gZGlydHlfaGlnaGAgKHRpZ2h0IHlpZWxkIGxvb3ApOiBubyBzY3J1Yi4K Ky0gYENTUCA8IGRpcnR5X2hpZ2hgIChmaWJlciByZXR1cm5lZCB0byBhIHNoYWxsb3dlciBkZXB0 aCk6IHNjcnViCisgIGBbQ1NQLCBkaXJ0eV9oaWdoKWAuCistIGBDU1AgPiBkaXJ0eV9oaWdoYCAo ZmliZXIgZ3JldyBhYm92ZSBwcmlvciBjbGVhbiBib3VuZGFyeSk6CisgIHNjcnViIGFsbCB0aGUg d2F5IHRvIGB1c2FibGVfZW5kYC4KKworVGlnaHQteWllbGQgZmliZXJzIHBheSB6ZXJvIHNjcnVi IGNvc3QgYWZ0ZXIgdGhlIGZpcnN0IHN1c3BlbmQuCisKKyMjIFRyYW1wb2xpbmUKKworV2hlbiBh IGZpYmVyJ3MgZW50cnkgZnVuY3Rpb24gcmV0dXJucyBub3JtYWxseSwgY29udHJvbCByZS1lbnRl cnMKK2BmaWJlcl90cmFtcF9jYCwgd2hpY2ggbWFya3MgdGhlIGZpYmVyIGRlYWQgYW5kIHN3aXRj aGVzIHRvCitgc2VsZi0+cmV0dXJuX2ZpYmVyYCB2aWEgYHNiX2ZpYmVyX3N3aXRjaF9wcmVwYCAr IHRoZSBhc3NlbWJseQorYGZpYmVyX3N3YXBfY29udGV4dGAuCisKK1RoZSByZXN1bWluZyBmaWJl ciBleGl0cyBQQSB2aWEgaXRzIG93biBWT1AgdGFpbCBvcgorYHNiX2ZpYmVyX2V4aXRfcGFgLgor CitUaGUgTGlzcCB3cmFwcGVyIGZvciB0aGUgcmVzdW1lZCBmaWJlciBpcyBmb3VuZCB2aWEKK2Aq Y3VycmVudC1maWJlcipgLiBUaGUgTGlzcCBzaGltIHNldHMgaXQgdG8gYHRvYCBiZWZvcmUgdGhl IHN3YXAsIGFuZAorVExTIHBlcnNpc3RzIGFjcm9zcyB0aGUgc3RhY2sgc3dhcCB1bmNoYW5nZWQu CisKKyMjIEltYWdlIHN1cnZpdmFsCisKK0Egc2F2ZWQgY29yZSdzIHJlc3RhcnQgcmVzdG9yZXMg TGlzcCB3cmFwcGVycyBidXQgbm90IHRoZSBDCitgc2JfZmliZXJfY3R4YCBzdHJ1Y3RzIHRoZXkg cG9pbnQgYXQuICBBbiBgKmluaXQtaG9va3MqYCBjYWxsYmFjaworY2xlYXJzIGAqY3VycmVudC1m aWJlcipgIG9uIHN0YXJ0dXA7IHVzZXIgY29kZSBob2xkaW5nIHdyYXBwZXJzIGFjcm9zcworYHNh dmUtbGlzcC1hbmQtZGllYCBpcyBvbiBpdHMgb3duLCBsaWtlIGBzYi10aHJlYWRgLgpkaWZmIC0t Z2l0IGEvY29udHJpYi9zYi1maWJlci9hcm02NC12b3BzLmxpc3AgYi9jb250cmliL3NiLWZpYmVy L2FybTY0LXZvcHMubGlzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjA4 MjE1MDZlNQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvc2ItZmliZXIvYXJtNjQtdm9wcy5s aXNwCkBAIC0wLDAgKzEsMzggQEAKKzs7OzsgSW5saW5lIHJlZ2lzdGVyL1NQIHN3YXAgZm9yIFNX SVRDSC1GSUJFUgorCisoaW4tcGFja2FnZSAiU0ItVk0iKQorCisoc2ItYzpkZWZrbm93biBzYi1m aWJlcjo6JXN3YXAtcmVncworICAgIChzeXN0ZW0tYXJlYS1wb2ludGVyIHN5c3RlbS1hcmVhLXBv aW50ZXIpICh2YWx1ZXMpCisgICAgKHNiLWM6YWx3YXlzLXRyYW5zbGF0YWJsZSkpCisKKyhkZWZp bmUtdm9wIChmaWJlci1zd2FwLXJlZ3MpCisgICg6dHJhbnNsYXRlIHNiLWZpYmVyOjolc3dhcC1y ZWdzKQorICAoOnBvbGljeSA6ZmFzdC1zYWZlKQorICAoOmFyZ3MgKGZyb20gOnNjcyAoc2FwLXJl ZykgOnRhcmdldCBmcm9tLXRtcCkKKyAgICAgICAgICh0byA6c2NzIChzYXAtcmVnKSA6dGFyZ2V0 IHRvLXRtcCkpCisgICg6YXJnLXR5cGVzIHN5c3RlbS1hcmVhLXBvaW50ZXIgc3lzdGVtLWFyZWEt cG9pbnRlcikKKyAgKDp0ZW1wb3JhcnkgKDpzYyBzYXAtcmVnIDpvZmZzZXQgbmwwLW9mZnNldAor ICAgICAgICAgICAgICAgOmZyb20gKDphcmd1bWVudCAwKSA6dG8gKDpyZXN1bHQgMCkpCisgICAg ICAgICAgICAgIGZyb20tdG1wKQorICAoOnRlbXBvcmFyeSAoOnNjIHNhcC1yZWcgOm9mZnNldCBu bDEtb2Zmc2V0CisgICAgICAgICAgICAgICA6ZnJvbSAoOmFyZ3VtZW50IDEpIDp0byAoOnJlc3Vs dCAwKSkKKyAgICAgICAgICAgICAgdG8tdG1wKQorICAoOnRlbXBvcmFyeSAoOnNjIHVuc2lnbmVk LXJlZyA6b2Zmc2V0IG5sMi1vZmZzZXQpIHRlbXApCisgICg6Z2VuZXJhdG9yIDEwCisgICAgKG1v dmUgZnJvbS10bXAgZnJvbSkKKyAgICAobW92ZSB0by10bXAgdG8pCisgICAgKGluc3QgYWRyIGxy LXRuIFJFU1VNRSkKKyAgICAoZW1pdC1zYXZlLWZpYmVyLXJlZ3MgZnJvbS10bXAgdGVtcCkKKyAg ICAoZW1pdC1yZXN0b3JlLWZpYmVyLXJlZ3MgdG8tdG1wIHRlbXApCisgICAgKGluc3QgcmV0KQor ICAgIFJFU1VNRQorICAgIChpbnN0IGRtYiA6aXNoc3QpCisgICAgKGluc3Qgc3RyIHd6ci10bgor ICAgICAgICAgIChAIHRocmVhZC10biAoKiBuLXdvcmQtYnl0ZXMgdGhyZWFkLXBzZXVkby1hdG9t aWMtYml0cy1zbG90KSkpCisgICAgKGluc3QgbGRyICgzMi1iaXQtcmVnIHRlbXApCisgICAgICAg ICAgKEAgdGhyZWFkLXRuICgrICgqIG4td29yZC1ieXRlcyB0aHJlYWQtcHNldWRvLWF0b21pYy1i aXRzLXNsb3QpIDQpKSkKKyAgICAobGV0ICgobm90LWludGVycnVwdGVkIChnZW4tbGFiZWwpKSkK KyAgICAgIChpbnN0IGNieiB0ZW1wIG5vdC1pbnRlcnJ1cHRlZCkKKyAgICAgIChpbnN0IGJyayBw ZW5kaW5nLWludGVycnVwdC10cmFwKQorICAgICAgKGVtaXQtbGFiZWwgbm90LWludGVycnVwdGVk KSkpKQpkaWZmIC0tZ2l0IGEvY29udHJpYi9zYi1maWJlci9jb25zdGFudHMubGlzcCBiL2NvbnRy aWIvc2ItZmliZXIvY29uc3RhbnRzLmxpc3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwLi42ZGMxZjAzNmUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3NiLWZpYmVyL2Nv bnN0YW50cy5saXNwCkBAIC0wLDAgKzEsMjAgQEAKKzs7OyAtKi0gTGlzcCAtKi0KKworKCJmaWJl ci5oIiAic3RkZGVmLmgiKQorCisoKDppbnRlZ2VyLW5vLWNoZWNrICtmaWJlci1uZXcrICAgICAg IkZJQkVSX05FVyIpCisgKDppbnRlZ2VyLW5vLWNoZWNrICtmaWJlci1ydW5uYWJsZSsgIkZJQkVS X1JVTk5BQkxFIikKKyAoOmludGVnZXItbm8tY2hlY2sgK2ZpYmVyLXJ1bm5pbmcrICAiRklCRVJf UlVOTklORyIpCisgKDppbnRlZ2VyLW5vLWNoZWNrICtmaWJlci1kZWFkKyAgICAgIkZJQkVSX0RF QUQiKQorCisgOzsgKG9ubHkgbWFwIHRoZSBmaWVsZHMgdGhlIExpc3Agc2hpbSBhY3R1YWxseSB0 b3VjaGVzKQorICg6c3RydWN0dXJlIGZpYmVyLWN0eCAoInN0cnVjdCBzYl9maWJlcl9jdHgiCisg ICAgICAgICAgICAgICAgICAgICAgICAgKChzaWduZWQgMzIpIHN0YXRlICJpbnQiICJzdGF0ZSIp CisgICAgICAgICAgICAgICAgICAgICAgICAgKGludGVnZXIgb3duZXIgInZvaWQgKiIgIm93bmVy IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAoaW50ZWdlciByZXR1cm4tZmliZXIgInZvaWQg KiIgInJldHVybl9maWJlciIpCisgICAgICAgICAgICAgICAgICAgICAgICAgKGludGVnZXIgY2F0 Y2ggImxpc3BvYmoiICJjdXJyZW50X2NhdGNoX2Jsb2NrIikKKyAgICAgICAgICAgICAgICAgICAg ICAgICAoaW50ZWdlciB1bndpbmQgImxpc3BvYmoiICJjdXJyZW50X3Vud2luZF9wcm90ZWN0X2Js b2NrIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAoaW50ZWdlciBic3AgImxpc3BvYmogKiIg ImJpbmRpbmdfc3RhY2tfcG9pbnRlciIpCisgICAgICAgICAgICAgICAgICAgICAgICAgKGludGVn ZXIgYnMtc3RhcnQgImxpc3BvYmogKiIgImJpbmRpbmdfc3RhY2tfc3RhcnRfZm9yX3RocmVhZCIp CisgICAgICAgICAgICAgICAgICAgICAgICAgKGludGVnZXIgYnMtYmFzZSAibGlzcG9iaiAqIiAi YmluZGluZ19zdGFja19iYXNlIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAoaW50ZWdlciBi cy1lbmQgImxpc3BvYmogKiIgImJpbmRpbmdfc3RhY2tfZW5kIikpKSkKZGlmZiAtLWdpdCBhL2Nv bnRyaWIvc2ItZmliZXIvZmliZXItZmZpLmxpc3AgYi9jb250cmliL3NiLWZpYmVyL2ZpYmVyLWZm aS5saXNwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uYmRkMGM1MTEwCi0t LSAvZGV2L251bGwKKysrIGIvY29udHJpYi9zYi1maWJlci9maWJlci1mZmkubGlzcApAQCAtMCww ICsxLDMwMCBAQAorOzs7OyAtKi0gIExpc3AgLSotCis7Ozs7Cis7Ozs7IHNiLWZpYmVyIEZGSSBi aW5kaW5ncywgYWxpZW4tcm91dGluZXMsIGZpYmVyIHN0cnVjdCBhbmQgb3RoZXIKKzs7OzsgcnVu dGltZSBzdXBwb3J0CisKKyhpbi1wYWNrYWdlIDpzYi1maWJlcikKKworIytzYi1maWJlcgorKHBy b2duCisKKyhkZWZpbmUtYWxpZW4tcm91dGluZSAoInNiX2ZpYmVyX2NyZWF0ZSIgJWZpYmVyLWNy ZWF0ZSkKKyAgICBzeXN0ZW0tYXJlYS1wb2ludGVyCisgIChzdGFjay1zaXplIHVuc2lnbmVkLWxv bmcpCisgIChiaW5kaW5nLXN0YWNrLXNpemUgdW5zaWduZWQtbG9uZykpCisKKyhkZWZpbmUtYWxp ZW4tcm91dGluZSAoInNiX2ZpYmVyX2NyZWF0ZV9tYWluIiAlZmliZXItY3JlYXRlLW1haW4pCisg ICAgc3lzdGVtLWFyZWEtcG9pbnRlcgorICAodGhyZWFkIHN5c3RlbS1hcmVhLXBvaW50ZXIpKQor CisoZGVmaW5lLWFsaWVuLXJvdXRpbmUgKCJzYl9maWJlcl9yZWxlYXNlIiAlZmliZXItcmVsZWFz ZSkKKyAgICB2b2lkCisgIChmaWJlciBzeXN0ZW0tYXJlYS1wb2ludGVyKSkKKworKGRlZmluZS1h bGllbi1yb3V0aW5lICgic2JfZmliZXJfcmVnaXN0ZXIiICVmaWJlci1yZWdpc3RlcikKKyAgICB2 b2lkCisgICh0aHJlYWQgc3lzdGVtLWFyZWEtcG9pbnRlcikKKyAgKGZpYmVyIHN5c3RlbS1hcmVh LXBvaW50ZXIpKQorCisoZGVmaW5lLWFsaWVuLXJvdXRpbmUgKCJzYl9maWJlcl91bnJlZ2lzdGVy IiAlZmliZXItdW5yZWdpc3RlcikKKyAgICB2b2lkCisgICh0aHJlYWQgc3lzdGVtLWFyZWEtcG9p bnRlcikKKyAgKGZpYmVyIHN5c3RlbS1hcmVhLXBvaW50ZXIpKQorCisoZGVmaW5lLWFsaWVuLXJv dXRpbmUgKCJzYl9maWJlcl9taWdyYXRlIiAlZmliZXItbWlncmF0ZSkKKyAgICBpbnQKKyAgKGZp YmVyIHN5c3RlbS1hcmVhLXBvaW50ZXIpCisgIChkZXN0LXRocmVhZCBzeXN0ZW0tYXJlYS1wb2lu dGVyKSkKKworKGRlZmluZS1hbGllbi1yb3V0aW5lICgic2JfZmliZXJfcHJlcGFyZSIgJWZpYmVy LXByZXBhcmUpCisgICAgdm9pZAorICAoZmliZXIgc3lzdGVtLWFyZWEtcG9pbnRlcikKKyAgKGZu IHN5c3RlbS1hcmVhLXBvaW50ZXIpCisgIChhcmcgc3lzdGVtLWFyZWEtcG9pbnRlcikpCisKKyhk ZWZpbmUtYWxpZW4tcm91dGluZSAoInNiX2ZpYmVyX2NvbnRyb2xfc3RhY2tfc2l6ZV9ieXRlcyIK KyAgICAgICAgICAgICAgICAgICAgICAgJWZpYmVyLWNvbnRyb2wtc3RhY2stc2l6ZS1ieXRlcykK KyAgICB1bnNpZ25lZC1sb25nCisgIChmaWJlciBzeXN0ZW0tYXJlYS1wb2ludGVyKSkKKworKGRl ZmluZS1hbGllbi1yb3V0aW5lICgic2JfZmliZXJfY29udHJvbF9zdGFja191c2VkX2J5dGVzIgor ICAgICAgICAgICAgICAgICAgICAgICAlZmliZXItY29udHJvbC1zdGFjay11c2VkLWJ5dGVzKQor ICAgIHVuc2lnbmVkLWxvbmcKKyAgKGZpYmVyIHN5c3RlbS1hcmVhLXBvaW50ZXIpKQorCis7Ozsg LS0tIENvbmRpdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisKKyhkZWZpbmUtY29uZGl0aW9uIGZpYmVyLWVycm9yIChlcnJvcikK KyAgKChmaWJlciA6aW5pdGFyZyA6ZmliZXIgOnJlYWRlciBmaWJlci1lcnJvci1maWJlciA6aW5p dGZvcm0gbmlsKSkKKyAgKDpkb2N1bWVudGF0aW9uCisgICAiQmFzZSBjbGFzcyBmb3Igc2ItZmli ZXIgZXJyb3JzIHRoYXQgY2FycnkgYSBmaWJlci4gU3ViY2xhc3NlcyBhcmUKK3RoZSByZWNvbW1l bmRlZCB0YXJnZXRzIGZvciBIQU5ETEVSLUNBU0UgaW4gc2NoZWR1bGVyIGNvZGUuIikpCisKKyhk ZWZpbmUtY29uZGl0aW9uIGRlYWQtZmliZXItZXJyb3IgKGZpYmVyLWVycm9yKSAoKQorICAoOmRv Y3VtZW50YXRpb24KKyAgICJPcGVyYXRpb24gYXR0ZW1wdGVkIG9uIGEgZmliZXIgdGhhdCBoYXMg YmVlbiByZWxlYXNlZCBvciBoYXMgcnVuIHRvCitjb21wbGV0aW9uLiIpCisgICg6cmVwb3J0IChs YW1iZGEgKGMgc3RyZWFtKQorICAgICAgICAgICAgIChmb3JtYXQgc3RyZWFtICJmaWJlciB+UyBp cyBkZWFkIG9yIHJlbGVhc2VkIgorICAgICAgICAgICAgICAgICAgICAgKGZpYmVyLWVycm9yLWZp YmVyIGMpKSkpKQorCisoZGVmaW5lLWNvbmRpdGlvbiBwaW5uZWQtZmliZXItZXJyb3IgKGZpYmVy LWVycm9yKQorICAoKGRlcHRoIDppbml0YXJnIDpkZXB0aCA6cmVhZGVyIHBpbm5lZC1maWJlci1l cnJvci1kZXB0aCkpCisgICg6ZG9jdW1lbnRhdGlvbgorICAgIlNXSVRDSC1GSUJFUiB3YXMgYXNr ZWQgdG8gc3VzcGVuZCBhIGZpYmVyIHdob3NlIHBpbiBjb3VudCBpcworbm9uemVyby4gU2NoZWR1 bGVycyBtYXkgQ0FUQ0ggYW5kIHJldHJ5IGxhdGVyLiIpCisgICg6cmVwb3J0IChsYW1iZGEgKGMg c3RyZWFtKQorICAgICAgICAgICAgIChmb3JtYXQgc3RyZWFtICJmaWJlciB+UyBpcyBwaW5uZWQg KGRlcHRoIH5EKTsgY2Fubm90IHN1c3BlbmQiCisgICAgICAgICAgICAgICAgICAgICAoZmliZXIt ZXJyb3ItZmliZXIgYykKKyAgICAgICAgICAgICAgICAgICAgIChwaW5uZWQtZmliZXItZXJyb3It ZGVwdGggYykpKSkpCisKKyhkZWZpbmUtY29uZGl0aW9uIGZpYmVyLXRocmVhZC1taXNtYXRjaC1l cnJvciAoZmliZXItZXJyb3IpCisgICgocm9sZSA6aW5pdGFyZyA6cm9sZSA6cmVhZGVyIGZpYmVy LXRocmVhZC1taXNtYXRjaC1lcnJvci1yb2xlKSkKKyAgKDpkb2N1bWVudGF0aW9uCisgICAiQSBz d2l0Y2ggcmVmZXJlbmNlcyBhIGZpYmVyIG93bmVkIGJ5IGEgZGlmZmVyZW50IE9TIHRocmVhZC4g QSBmaWJlcgoraXMgYm91bmQgdG8gaXRzIG93bmVyIHRocmVhZCAoY2hhbmdlYWJsZSB2aWEgRklC RVItTUlHUkFURSk7IFJPTEUgaXMKKzpGUk9NIG9yIDpUTy4iKQorICAoOnJlcG9ydCAobGFtYmRh IChjIHN0cmVhbSkKKyAgICAgICAgICAgICAoZm9ybWF0IHN0cmVhbSAiZmliZXIgflMgKH4ofkF+ KSkgaXMgb3duZWQgYnkgYSBkaWZmZXJlbnQgdGhyZWFkIgorICAgICAgICAgICAgICAgICAgICAg KGZpYmVyLWVycm9yLWZpYmVyIGMpCisgICAgICAgICAgICAgICAgICAgICAoZmliZXItdGhyZWFk LW1pc21hdGNoLWVycm9yLXJvbGUgYykpKSkpCisKKyhkZWZpbmUtY29uZGl0aW9uIGZpYmVyLXN0 YXRlLWVycm9yIChmaWJlci1lcnJvcikKKyAgKChzdGF0ZSAgICA6aW5pdGFyZyA6c3RhdGUgICAg OnJlYWRlciBmaWJlci1zdGF0ZS1lcnJvci1zdGF0ZSkKKyAgIChleHBlY3RlZCA6aW5pdGFyZyA6 ZXhwZWN0ZWQgOnJlYWRlciBmaWJlci1zdGF0ZS1lcnJvci1leHBlY3RlZCkpCisgICg6ZG9jdW1l bnRhdGlvbgorICAgIkZpYmVyIHdhcyBub3QgaW4gYW4gYWNjZXB0YWJsZSBzdGF0ZSBmb3IgdGhl IHJlcXVlc3RlZCBvcGVyYXRpb24uCitTVEFURSBpcyB0aGUgYWN0dWFsIGtleXdvcmQgc3RhdGU7 IEVYUEVDVEVEIGlzIGEgbGlzdCBvZiBhY2NlcHRhYmxlCitzdGF0ZXMuIikKKyAgKDpyZXBvcnQg KGxhbWJkYSAoYyBzdHJlYW0pCisgICAgICAgICAgICAgKGZvcm1hdCBzdHJlYW0gImZpYmVyIH5T IGlzIGluIHN0YXRlIH5TLCBleHBlY3RlZCB+e35Tfl4gb3Igfn0iCisgICAgICAgICAgICAgICAg ICAgICAoZmliZXItZXJyb3ItZmliZXIgYykKKyAgICAgICAgICAgICAgICAgICAgIChmaWJlci1z dGF0ZS1lcnJvci1zdGF0ZSBjKQorICAgICAgICAgICAgICAgICAgICAgKGZpYmVyLXN0YXRlLWVy cm9yLWV4cGVjdGVkIGMpKSkpKQorCisoZGVmaW5lLWNvbmRpdGlvbiBuby1jdXJyZW50LWZpYmVy LWVycm9yIChmaWJlci1lcnJvcikKKyAgKChvcGVyYXRpb24gOmluaXRhcmcgOm9wZXJhdGlvbiA6 aW5pdGZvcm0gbmlsCisgICAgICAgICAgICAgIDpyZWFkZXIgbm8tY3VycmVudC1maWJlci1lcnJv ci1vcGVyYXRpb24pKQorICAoOmRvY3VtZW50YXRpb24KKyAgICJBbiBvcGVyYXRpb24gcmVxdWly aW5nIGEgY3VycmVudCBmaWJlciB3YXMgYXR0ZW1wdGVkIG9uIGEgdGhyZWFkIHdpdGgKK25vIGZp YmVyIGJvdW5kIGluICpDVVJSRU5ULUZJQkVSKi4iKQorICAoOnJlcG9ydCAobGFtYmRhIChjIHN0 cmVhbSkKKyAgICAgICAgICAgICAoZm9ybWF0IHN0cmVhbSAifkBbfih+QX4pOiB+XW5vIGN1cnJl bnQgZmliZXI7IGVzdGFibGlzaCBvbmUgfgord2l0aCBtYWtlLW1haW4tZmliZXIgb3Igd2l0aC1m aWJlci10aHJlYWQiCisgICAgICAgICAgICAgICAgICAgICAobm8tY3VycmVudC1maWJlci1lcnJv ci1vcGVyYXRpb24gYykpKSkpCisKKyhkZWNsYWltIChpbmxpbmUgJWZpYmVyLWN0eCkpCisoZGVm dW4gJWZpYmVyLWN0eCAoc2FwKQorICAoZGVjbGFyZSAodHlwZSBzYi1zeXM6c3lzdGVtLWFyZWEt cG9pbnRlciBzYXApKQorICAoc2ItYWxpZW46c2FwLWFsaWVuIHNhcCAoKiBmaWJlci1jdHgpKSkK KworKGRlY2xhaW0gKGlubGluZSAlc3dpdGNoLXByZXApKQorKGRlZnVuICVzd2l0Y2gtcHJlcCAo ZnJvbSB0bykKKyAgKGRlY2xhcmUgKHR5cGUgc3lzdGVtLWFyZWEtcG9pbnRlciBmcm9tIHRvKSkK KyAgKGxvY2FsbHkgKGRlY2xhcmUgKG9wdGltaXplIChzYi1jOmFsaWVuLWZ1bmNhbGwtc2F2ZXMt ZnAtYW5kLXBjIDApKSkKKyAgICAoYWxpZW4tZnVuY2FsbCAoc2ItYWxpZW46ZXh0ZXJuLWFsaWVu ICJzYl9maWJlcl9zd2l0Y2hfcHJlcCIKKyAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uIHZv aWQgc3lzdGVtLWFyZWEtcG9pbnRlciBzeXN0ZW0tYXJlYS1wb2ludGVyKSkKKyAgICAgICAgICAg ICAgICAgICBmcm9tIHRvKSkKKyAgKHZhbHVlcykpCisKKyhkZWZzdHJ1Y3QgKGZpYmVyICg6Y29u c3RydWN0b3IgJW1ha2UtZmliZXIpCisgICAgICAgICAgICAgICAgICAoOnByaW50LW9iamVjdCAl cHJpbnQtZmliZXIpKQorICAoc2FwIChzYi1zeXM6aW50LXNhcCAwKSA6dHlwZSBzYi1zeXM6c3lz dGVtLWFyZWEtcG9pbnRlcikKKyAgKGZ1bmN0aW9uIG5pbCA6dHlwZSAob3IgbnVsbCBmdW5jdGlv bikpCisgIChwZW5kaW5nLWNvbmRpdGlvbiBuaWwgOnR5cGUgKG9yIG51bGwgY29uZGl0aW9uKSkK KyAgKGVzY2FwZS1jb25kaXRpb24gbmlsIDp0eXBlIChvciBudWxsIGNvbmRpdGlvbikpCisgIChl c2NhcGUtdGhyb3ctdGFnIG5pbCA6dHlwZSBzeW1ib2wpCisgIChlc2NhcGUtdGhyb3ctdmFsdWVz IG5pbCA6dHlwZSBsaXN0KQorICAocGluLWNvdW50IDAgOnR5cGUgKGFuZCBmaXhudW0gdW5zaWdu ZWQtYnl0ZSkpCisgIChyZXR1cm4tZmliZXIgbmlsIDp0eXBlIChvciBudWxsIGZpYmVyKSkKKyAg KG5hbWUgbmlsIDp0eXBlIChvciBudWxsIHN0cmluZykpCisgICh0aHJlYWQgbmlsIDp0eXBlIChv ciBudWxsIHNiLXRocmVhZDp0aHJlYWQpKQorICAodmFsdWUgbmlsIDp0eXBlIGxpc3QpCisgIChy ZWxlYXNlZC1wIG5pbCA6dHlwZSBib29sZWFuKSkKKworKGRlY2xhaW0gKGlubGluZSAlZmliZXIt c3RhdGUpKQorKGRlZnVuICVmaWJlci1zdGF0ZSAoZmliZXIpCisgICJSZWFkIHRoZSBDLXNpZGUg c3RhdGUgd29yZCBvZiBGSUJFUiAoYW4gaW50ZWdlciArZmliZXItLi4uKyB2YWx1ZSkuIgorICAo ZGVjbGFyZSAodHlwZSBmaWJlciBmaWJlcikpCisgIChmaWJlci1jdHgtc3RhdGUgKCVmaWJlci1j dHggKGZpYmVyLXNhcCBmaWJlcikpKSkKKworKGRlY2xhaW0gKGlubGluZSBmaWJlci1tYWluLXAp KQorKGRlZnVuIGZpYmVyLW1haW4tcCAoZmliZXIpCisgICJSZXR1cm4gVCBpZiBGSUJFUiByZXBy ZXNlbnRzIGEgdGhyZWFkJ3Mgb3duIHN0YWNrIChjcmVhdGVkIGJ5CitNQUtFLU1BSU4tRklCRVIg b3IgV0lUSC1GSUJFUi1USFJFQUQpLCBOSUwgaWYgRklCRVIgaXMgYSB3b3JrZXIgZmliZXIKK2Ny ZWF0ZWQgYnkgTUFLRS1GSUJFUi4iCisgIChkZWNsYXJlICh0eXBlIGZpYmVyIGZpYmVyKSkKKyAg KG51bGwgKGZpYmVyLWZ1bmN0aW9uIGZpYmVyKSkpCisKKyhkZWNsYWltIChpbmxpbmUgZGVsaXZl ci1wZW5kaW5nIG1heWJlLWVzY2FwZSkpCisoZGVmdW4gZGVsaXZlci1wZW5kaW5nIChmaWJlcikK KyAgIlBvc3QtcmVzdW1lIGRlbGl2ZXJ5IGhvb2suIElmIEZJQkVSIGhhcyBhbiBpbnRlcnJ1cHQt c3RhZ2VkCitjb25kaXRpb24sIEVSUk9SIGl0IChhbmQgY2xlYXIgdGhlIHNsb3QpOyBvdGhlcndp c2UgYSBuby1vcC4gQ2FsbGVkIG9uCit0aGUgZmliZXIgdGhhdCBpcyBhYm91dCB0byAocmUtKXJ1 biwgc28gaW50ZXJydXB0LWZpYmVyIHNlbWFudGljcyBmaXJlCitpbiB0aGUgdGFyZ2V0J3Mgb3du IGNvbnRleHQuIgorICAoZGVjbGFyZSAodHlwZSBmaWJlciBmaWJlcikpCisgIChsZXQgKChjIChz aGlmdGYgKGZpYmVyLXBlbmRpbmctY29uZGl0aW9uIGZpYmVyKSBuaWwpKSkKKyAgICAod2hlbiBj IChlcnJvciBjKSkpKQorCisoZGVmdW4gbWF5YmUtZXNjYXBlIChmaWJlcikKKyAgIlBvc3QtcmVz dW1lIGRlbGl2ZXJ5IGhvb2suIElmIEZJQkVSJ3MgZW50cnkgZnVuY3Rpb24gZXhpdGVkIHZpYSBh bgordW5oYW5kbGVkIGVycm9yLCByZS1FUlJPUiB0aGF0IGNvbmRpdGlvbiBvbiB0aGUgcmVzdW1l cidzIHN0YWNrIChhbmQKK2NsZWFyIHRoZSBzbG90KTsgb3RoZXJ3aXNlIGEgbm8tb3AuIENhbGxl ZCBvbiB0aGUgcmVzdW1lciBzaWRlIHNvIHRoZQorZXNjYXBlZCBlcnJvciByZS1maXJlcyBpbiB0 aGUgcmVzdW1lcidzIGNvbnRleHQuIgorICAoZGVjbGFyZSAodHlwZSBmaWJlciBmaWJlcikpCisg IChsZXQgKChjIChzaGlmdGYgKGZpYmVyLWVzY2FwZS1jb25kaXRpb24gZmliZXIpIG5pbCkpKQor ICAgICh3aGVuIGMgKGVycm9yIGMpKSkpCisKKyhkZWZ1biBtYXliZS1lc2NhcGUtdGhyb3cgKGZp YmVyKQorICAiUG9zdC1yZXN1bWUgZGVsaXZlcnkgaG9vay4gSWYgYSB0aHJlYWQtcm9vdCB1bndp bmQgdGFnIGVzY2FwZWQKK0ZJQkVSJ3MgZW50cnkgZnVuY3Rpb24sIHJlLVRIUk9XIGl0IG9uIHRo ZSByZXN1bWVyJ3Mgc3RhY2sgKGFuZCBjbGVhcgordGhlIHNsb3QpOyBvdGhlcndpc2UgYSBuby1v cC4iCisgIChkZWNsYXJlICh0eXBlIGZpYmVyIGZpYmVyKSkKKyAgKGxldCAoKHRhZyAoc2hpZnRm IChmaWJlci1lc2NhcGUtdGhyb3ctdGFnIGZpYmVyKSBuaWwpKSkKKyAgICAod2hlbiB0YWcKKyAg ICAgICh0aHJvdyB0YWcgKHZhbHVlcy1saXN0IChzaGlmdGYgKGZpYmVyLWVzY2FwZS10aHJvdy12 YWx1ZXMgZmliZXIpIG5pbCkpKSkpKQorCisoZGVmdW4gJXByaW50LWZpYmVyIChmaWJlciBzdHJl YW0pCisgIChwcmludC11bnJlYWRhYmxlLW9iamVjdCAoZmliZXIgc3RyZWFtIDp0eXBlIHQgOmlk ZW50aXR5IHQpCisgICAgKGZvcm1hdCBzdHJlYW0gIn5AW35BIH5dfkEiIChmaWJlci1uYW1lIGZp YmVyKSAoZmliZXItc3RhdGUgZmliZXIpKSkpCisKKyhkZWZ2YXIgKmN1cnJlbnQtZmliZXIqIG5p bAorICAiRmliZXIgY3VycmVudGx5IHJ1bm5pbmcgb24gdGhpcyB0aHJlYWQsIG9yIE5JTC4iKQor CisoZGVmaW5lLWFsaWVuLWNhbGxhYmxlIHNiLWZpYmVyLWxpc3AtZW50cnkgdm9pZAorICAgICgo YXJnIHVuc2lnbmVkLWxvbmcpKQorICAobGV0ICgoZiAqY3VycmVudC1maWJlciopKQorICAgICh3 aGVuIChhbmQgZiAoZmliZXItZnVuY3Rpb24gZikpCisgICAgICAoYXNzZXJ0ICg9IGFyZyAoc2It c3lzOnNhcC1pbnQgKGZpYmVyLXNhcCBmKSkpKQorICAgICAgKGxldCAoKHNiLWtlcm5lbDoqaGFu ZGxlci1jbHVzdGVycyogc2Ita2VybmVsOjoqKmluaXRpYWwtaGFuZGxlci1jbHVzdGVycyoqKQor ICAgICAgICAgICAgKHNiLWtlcm5lbDoqcmVzdGFydC1jbHVzdGVycyogbmlsKSkKKyAgICAgICAg KGJsb2NrIGRvbmUKKyAgICAgICAgICAoZmxldCAoKHJ1biAoKQorICAgICAgICAgICAgICAgICAg IDs7IE5vbi1lcnJvciBzaWduYWxzIHByb3BhZ2F0ZSBub3JtYWxseSBzbyBTSUdOQUwgZnJvbQor ICAgICAgICAgICAgICAgICAgIDs7IGluc2lkZSB0aGUgZmliZXIgYmVoYXZlcyBsaWtlIFNJR05B TCBhbnl3aGVyZSBlbHNlLgorICAgICAgICAgICAgICAgICAgIChoYW5kbGVyLWNhc2UKKyAgICAg ICAgICAgICAgICAgICAgICAgKGxldCAoKHJ2LWxpc3QKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAobXVsdGlwbGUtdmFsdWUtbGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAocHJvZ24gKGRlbGl2ZXItcGVuZGluZyBmKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGZ1bmNhbGwgKGZpYmVyLWZ1bmN0aW9uIGYpKSkpKSkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAod2hlbiAoZmliZXItcmV0dXJuLWZpYmVyIGYpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAoc2V0ZiAoZmliZXItdmFsdWUgKGZpYmVyLXJldHVybi1maWJlciBm KSkgcnYtbGlzdCkpKQorICAgICAgICAgICAgICAgICAgICAgKGVycm9yIChjKQorICAgICAgICAg ICAgICAgICAgICAgICAoc2V0ZiAoZmliZXItZXNjYXBlLWNvbmRpdGlvbiBmKSBjKSkpCisgICAg ICAgICAgICAgICAgICAgKHJldHVybi1mcm9tIGRvbmUpKSkKKyAgICAgICAgICAgIChtYWNyb2xl dCAoKHdpdGgtcm9vdC1jYXRjaCAodGFnICZib2R5IGlubmVyKQorICAgICAgICAgICAgICAgICAg ICAgICAgIGAobGV0ICgodmFscyAobXVsdGlwbGUtdmFsdWUtbGlzdCAoY2F0Y2ggLHRhZyAsQGlu bmVyKSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZXRmIChmaWJlci1lc2NhcGUt dGhyb3ctdGFnIGYpICx0YWcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmli ZXItZXNjYXBlLXRocm93LXZhbHVlcyBmKSB2YWxzKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChyZXR1cm4tZnJvbSBkb25lKSkpKQorICAgICAgICAgICAgICAod2l0aC1yb290LWNhdGNo ICdzYi1pbXBsOjp0b3BsZXZlbC1jYXRjaGVyCisgICAgICAgICAgICAgICAgKHdpdGgtcm9vdC1j YXRjaCAnc2ItaW1wbDo6JWVuZC1vZi10aGUtd29ybGQKKyAgICAgICAgICAgICAgICAgICh3aXRo LXJvb3QtY2F0Y2ggJ3NiLXRocmVhZDo6JWFib3J0LXRocmVhZAorICAgICAgICAgICAgICAgICAg ICAod2l0aC1yb290LWNhdGNoICdzYi10aHJlYWQ6OiVyZXR1cm4tZnJvbS10aHJlYWQKKyAgICAg ICAgICAgICAgICAgICAgICAocnVuKSkpKSkpKSkpKSkpCisKKyhkZWNsYWltIChpbmxpbmUgJXRo cmVhZC1zbG90IChzZXRmICV0aHJlYWQtc2xvdCkpKQorKGRlZnVuICV0aHJlYWQtc2xvdCAodGgt c2FwIHNsb3QpCisgIChkZWNsYXJlICh0eXBlIHNiLXN5czpzeXN0ZW0tYXJlYS1wb2ludGVyIHRo LXNhcCkgKHR5cGUgZml4bnVtIHNsb3QpKQorICAoc2Itc3lzOnNhcC1yZWYtd29yZCB0aC1zYXAg KGFzaCBzbG90IHNiLXZtOndvcmQtc2hpZnQpKSkKKworKGRlZnVuIChzZXRmICV0aHJlYWQtc2xv dCkgKHZhbCB0aC1zYXAgc2xvdCkKKyAgKGRlY2xhcmUgKHR5cGUgc2Itc3lzOnN5c3RlbS1hcmVh LXBvaW50ZXIgdGgtc2FwKQorICAgICAgICAgICAodHlwZSBmaXhudW0gc2xvdCB2YWwpKQorICAo c2V0ZiAoc2Itc3lzOnNhcC1yZWYtd29yZCB0aC1zYXAgKGFzaCBzbG90IHNiLXZtOndvcmQtc2hp ZnQpKSB2YWwpKQorCisoZGVjbGFpbSAoaW5saW5lICVjdXJyZW50LXRocmVhZC1iaXRzKSkKKyhk ZWZ1biAlY3VycmVudC10aHJlYWQtYml0cyAoKQorICAoc2Itc3lzOnNhcC1pbnQgKHNiLXRocmVh ZDpjdXJyZW50LXRocmVhZC1zYXApKSkKKworKGRlZnZhciAqZmliZXItbGlzcC1lbnRyeS1zYXAq CisgIChzYi1hbGllbjphbGllbi1zYXAgKGFsaWVuLWNhbGxhYmxlLWZ1bmN0aW9uICdzYi1maWJl ci1saXNwLWVudHJ5KSkKKyAgIlNBUCBvZiB0aGUgU0ItRklCRVItTElTUC1FTlRSWSB0cmFtcG9s aW5lLCByZXNvbHZlZCBvbmNlIGF0IGxvYWQKK3RpbWUgYW5kIHJldXNlZCBieSBldmVyeSBNQUtF LUZJQkVSLiIpCisKKzs7OyAtLS0gJXN3aXRjaCBwaGFzZXMgLS0tCisKKyhkZWNsYWltIChpbmxp bmUgY2hlY2stc3dpdGNoKSkKKyhkZWZ1biBjaGVjay1zd2l0Y2ggKGZyb20gdG8gZnJvbS1jdHgg dG8tY3R4KQorICAiVmFsaWRhdGUgdGhhdCAqY3VycmVudCB0aHJlYWQqIG1heSBzd2l0Y2ggRlJP TSAtPiBUTy4iCisgIChkZWNsYXJlICh0eXBlIGZpYmVyIGZyb20gdG8pKQorICAobGV0ICgodGgt aW50ICglY3VycmVudC10aHJlYWQtYml0cykpKQorICAgICh1bmxlc3MgKD0gKGZpYmVyLWN0eC1v d25lciBmcm9tLWN0eCkgdGgtaW50KQorICAgICAgKGVycm9yICdmaWJlci10aHJlYWQtbWlzbWF0 Y2gtZXJyb3IgOmZpYmVyIGZyb20gOnJvbGUgOmZyb20pKQorICAgICh1bmxlc3MgKD0gKGZpYmVy LWN0eC1vd25lciB0by1jdHgpIHRoLWludCkKKyAgICAgIChlcnJvciAnZmliZXItdGhyZWFkLW1p c21hdGNoLWVycm9yIDpmaWJlciB0byA6cm9sZSA6dG8pKSkKKyAgKHVubGVzcyAoPSAoZmliZXIt Y3R4LXN0YXRlIGZyb20tY3R4KSArZmliZXItcnVubmluZyspCisgICAgKGVycm9yICdmaWJlci1z dGF0ZS1lcnJvcgorICAgICAgICAgICA6ZmliZXIgZnJvbSA6c3RhdGUgKGZpYmVyLXN0YXRlIGZy b20pIDpleHBlY3RlZCAnKDpydW5uaW5nKSkpCisgICh1bmxlc3MgKHplcm9wIChmaWJlci1waW4t Y291bnQgZnJvbSkpCisgICAgKGVycm9yICdwaW5uZWQtZmliZXItZXJyb3IgOmZpYmVyIGZyb20g OmRlcHRoIChmaWJlci1waW4tY291bnQgZnJvbSkpKQorICAobGV0ICgodHMgKGZpYmVyLWN0eC1z dGF0ZSB0by1jdHgpKSkKKyAgICAodW5sZXNzIChvciAoPSB0cyArZmliZXItcnVubmFibGUrKSAo PSB0cyArZmliZXItbmV3KykpCisgICAgICAoZXJyb3IgJ2ZpYmVyLXN0YXRlLWVycm9yCisgICAg ICAgICAgICAgOmZpYmVyIHRvIDpzdGF0ZSAoZmliZXItc3RhdGUgdG8pIDpleHBlY3RlZCAnKDpy dW5uYWJsZSA6bmV3KSkpKSkKKworKGRlY2xhaW0gKGlubGluZSBzdGFnZS1yZXR1cm4pKQorKGRl ZnVuIHN0YWdlLXJldHVybiAoZnJvbSB0byBmcm9tLXNhcCB0by1jdHggdmFsdWVzKQorICAiUmVj b3JkIHRoZSByZXR1cm4gcGF0aCBhbmQgc3RhZ2VkIHZhbHVlcyBvbiBUTyBiZWZvcmUgdGhlIHN3 YXAuCitTYWZlIHRvIGRvIG91dHNpZGUgUEE6IHRoZXNlIHRvdWNoIExpc3Atb3duZWQgc2xvdHMg b25seS4iCisgIChkZWNsYXJlICh0eXBlIGZpYmVyIGZyb20gdG8pICh0eXBlIGxpc3QgdmFsdWVz KSkKKyAgKHNldGYgKGZpYmVyLWN0eC1yZXR1cm4tZmliZXIgdG8tY3R4KSAoc2Itc3lzOnNhcC1p bnQgZnJvbS1zYXApCisgICAgICAgIChmaWJlci1yZXR1cm4tZmliZXIgdG8pICAgICAgICBmcm9t CisgICAgICAgIChmaWJlci12YWx1ZSB0bykgICAgICAgICAgICAgICB2YWx1ZXMpKQorCisoZGVj bGFpbSAoaW5saW5lIHN3YXAtZnJhbWVzKSkKKyhkZWZ1biBzd2FwLWZyYW1lcyAodGgtc2FwIGZy b20tY3R4IHRvLWN0eCkKKyAgIlNhdmUgRlJPTSdzIGNhdGNoL3Vud2luZCBmcmFtZXMsIGluc3Rh bGwgVE8ncywgdGhlbiBpbnN0YWxsIFRPJ3MKK2JpbmRpbmctc3RhY2sgcG9pbnRlciBhbmQgYmFz ZS4gUnVucyBpbnNpZGUgUEE6IGNhdGNoL3Vud2luZCBjaGFpbnMKK3BvaW50IGludG8gdGhlIHJ1 bm5pbmcgZmliZXIncyBzdGFjayBhbmQgbXVzdCBzd2FwIGF0b21pY2FsbHkgd2l0aCBTUC4iCisg IChkZWNsYXJlICh0eXBlIHNiLXN5czpzeXN0ZW0tYXJlYS1wb2ludGVyIHRoLXNhcCkpCisgIChs ZXQgKCh0YyAoJXRocmVhZC1zbG90IHRoLXNhcCBzYi12bTo6dGhyZWFkLWN1cnJlbnQtY2F0Y2gt YmxvY2stc2xvdCkpCisgICAgICAgICh0dSAoJXRocmVhZC1zbG90IHRoLXNhcCBzYi12bTo6dGhy ZWFkLWN1cnJlbnQtdW53aW5kLXByb3RlY3QtYmxvY2stc2xvdCkpKQorICAgIChzZXRmIChmaWJl ci1jdHgtY2F0Y2ggZnJvbS1jdHgpICB0YworICAgICAgICAgIChmaWJlci1jdHgtdW53aW5kIGZy b20tY3R4KSB0dQorICAgICAgICAgICgldGhyZWFkLXNsb3QgdGgtc2FwIHNiLXZtOjp0aHJlYWQt Y3VycmVudC1jYXRjaC1ibG9jay1zbG90KQorICAgICAgICAgICAgKGZpYmVyLWN0eC1jYXRjaCB0 by1jdHgpCisgICAgICAgICAgKCV0aHJlYWQtc2xvdCB0aC1zYXAgc2Itdm06OnRocmVhZC1jdXJy ZW50LXVud2luZC1wcm90ZWN0LWJsb2NrLXNsb3QpCisgICAgICAgICAgICAoZmliZXItY3R4LXVu d2luZCB0by1jdHgpKSkKKyAgOzsgQlNQIGluc3RhbGw6IHByZXAgYWxyZWFkeSBjYXB0dXJlZCBG Uk9NJ3MgQlNQLgorICAoc2V0ZiAoJXRocmVhZC1zbG90IHRoLXNhcCBzYi12bTo6dGhyZWFkLWJp bmRpbmctc3RhY2stcG9pbnRlci1zbG90KQorICAgICAgICAgIChmaWJlci1jdHgtYnNwIHRvLWN0 eCkKKyAgICAgICAgKCV0aHJlYWQtc2xvdCB0aC1zYXAgc2Itdm06OnRocmVhZC1iaW5kaW5nLXN0 YWNrLXN0YXJ0LXNsb3QpCisgICAgICAgICAgKGZpYmVyLWN0eC1icy1zdGFydCB0by1jdHgpKSkK KworKGRlY2xhaW0gKGlubGluZSBmbGlwLXN0YXRlcykpCisoZGVmdW4gZmxpcC1zdGF0ZXMgKGZy b20tY3R4IHRvLWN0eCkKKyAgKHNldGYgKGZpYmVyLWN0eC1zdGF0ZSBmcm9tLWN0eCkgK2ZpYmVy LXJ1bm5hYmxlKworICAgICAgICAoZmliZXItY3R4LXN0YXRlIHRvLWN0eCkgICArZmliZXItcnVu bmluZyspKQorCispCmRpZmYgLS1naXQgYS9jb250cmliL3NiLWZpYmVyL2ZpYmVyLmxpc3AgYi9j b250cmliL3NiLWZpYmVyL2ZpYmVyLmxpc3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwLi5lOWUyNWQ5YTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3NiLWZpYmVyL2Zp YmVyLmxpc3AKQEAgLTAsMCArMSwzNDggQEAKKzs7OzsgLSotICBMaXNwIC0qLQorOzs7OworOzs7 OyBzYi1maWJlciBBUEkKKworKGluLXBhY2thZ2UgOnNiLWZpYmVyKQorCisjK3NiLWZpYmVyCiso cHJvZ24KKworKGRlZnZhciAqZGVmYXVsdC1maWJlci1zdGFjay1zaXplKiA2NTUzNgorICAiRGVm YXVsdCBjb250cm9sIHN0YWNrIHNpemUgKGJ5dGVzKSBmb3IgTUFLRS1GSUJFUi4iKQorCisoZGVm dmFyICpkZWZhdWx0LWZpYmVyLWJpbmRpbmctc3RhY2stc2l6ZSogODE5MgorICAiRGVmYXVsdCBi aW5kaW5nIHN0YWNrIHNpemUgKGJ5dGVzKSBmb3IgTUFLRS1GSUJFUi4iKQorCisoZGVmbWFjcm8g d2l0aC1maWJlci1zYXAgKChzYXAgYWxsb2MtZm9ybSkgJmJvZHkgYm9keSkKKyAgIkJpbmQgU0FQ IHRvIEFMTE9DLUZPUk0uICBTaWduYWwgaWYgdGhlIFNBUCBpcyBudWxsOyBvbiBub24tbG9jYWwK K2V4aXQgZnJvbSBCT0RZLCBjYWxsICVGSUJFUi1SRUxFQVNFIG9uIFNBUC4iCisgIChsZXQgKChv ayAoZ2Vuc3ltICJPSyIpKSkKKyAgICBgKGxldCAoKCxzYXAgLGFsbG9jLWZvcm0pKQorICAgICAg ICh3aGVuICh6ZXJvcCAoc2Itc3lzOnNhcC1pbnQgLHNhcCkpCisgICAgICAgICAoZXJyb3IgImZh aWxlZCB0byBhbGxvY2F0ZSBmaWJlciIpKQorICAgICAgIChsZXQgKCxvaykKKyAgICAgICAgICh1 bndpbmQtcHJvdGVjdAorICAgICAgICAgICAgICAobXVsdGlwbGUtdmFsdWUtcHJvZzEgKHByb2du ICxAYm9keSkgKHNldGYgLG9rIHQpKQorICAgICAgICAgICAodW5sZXNzICxvayAoJWZpYmVyLXJl bGVhc2UgLHNhcCkpKSkpKSkKKworOzs7IC0tLSBMaWZlY3ljbGUgLS0tCisKKyhkZWZ1biAlaW5z dGFsbC1maWJlciAoc2FwIGZ1bmN0aW9uIG5hbWUpCisgICJXcmFwIGFuIGFsbG9jYXRlZCBTQVAg aW4gYSBmaWJlciBzdHJ1Y3QsIHByZXBhcmUgaXQgKGlmIGEgd29ya2VyKSwKK2FuZCByZWdpc3Rl ciBpdCB3aXRoIHRoZSBjdXJyZW50IHRocmVhZC4gIENhbGxlciBhcnJhbmdlcworJUZJQkVSLVJF TEVBU0Ugb24gZmFpbHVyZS4iCisgIChsZXQgKChmICglbWFrZS1maWJlciA6c2FwIHNhcCA6ZnVu Y3Rpb24gZnVuY3Rpb24gOm5hbWUgbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgOnRocmVh ZCBzYi10aHJlYWQ6KmN1cnJlbnQtdGhyZWFkKikpKQorICAgICh3aGVuIGZ1bmN0aW9uCisgICAg ICAoJWZpYmVyLXByZXBhcmUgc2FwICpmaWJlci1saXNwLWVudHJ5LXNhcCogc2FwKSkKKyAgICAo JWZpYmVyLXJlZ2lzdGVyIChzYi10aHJlYWQ6Y3VycmVudC10aHJlYWQtc2FwKSBzYXApCisgICAg ZikpCisKKyhkZWZ1biBtYWtlLW1haW4tZmliZXIgKCZrZXkgbmFtZSkKKyAgIkNyZWF0ZSBhIGZp YmVyIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCB0aHJlYWQncyBvd24gc3RhY2sgYW5kIGJpbmQK KypDVVJSRU5ULUZJQkVSKiB0byBpdC4gIE5BTUUgaXMgYSBzdHJpbmcgbGFiZWwgdXNlZCBieSBQ UklOVC1PQkpFQ1QuIgorICAod2l0aC1maWJlci1zYXAgKHNhcCAoJWZpYmVyLWNyZWF0ZS1tYWlu IChzYi10aHJlYWQ6Y3VycmVudC10aHJlYWQtc2FwKSkpCisgICAgKHNldGYgKmN1cnJlbnQtZmli ZXIqICglaW5zdGFsbC1maWJlciBzYXAgbmlsIG5hbWUpKSkpCisKKyhkZWZtYWNybyB3aXRoLWZp YmVyLXRocmVhZCAoKCZrZXkgbmFtZSkgJmJvZHkgYm9keSkKKyAgIlJlZ2lzdGVyIGEgbWFpbiBm aWJlciBvbiB0aGUgY2FsbGluZyB0aHJlYWQgZm9yIHRoZSBkeW5hbWljIGV4dGVudAorb2YgQk9E WSBhbmQgcmVsZWFzZSBpdCBvbiBleGl0LiAgQSBuby1vcCBpZiBCT0RZIGlzIHJlYWNoZWQgd2l0 aAorKkNVUlJFTlQtRklCRVIqIGFscmVhZHkgYm91bmQuICBOQU1FIGlzIGZvcndhcmRlZCB0byBN QUtFLU1BSU4tRklCRVIuIgorICAobGV0ICgoY3JlYXRlZCAoZ2Vuc3ltICJDUkVBVEVEIikpKQor ICAgIGAobGV0KiAoKCpjdXJyZW50LWZpYmVyKiAqY3VycmVudC1maWJlciopCisgICAgICAgICAg ICAoLGNyZWF0ZWQgKHVubGVzcyAqY3VycmVudC1maWJlciogKG1ha2UtbWFpbi1maWJlciA6bmFt ZSAsbmFtZSkpKSkKKyAgICAgICAodW53aW5kLXByb3RlY3QgKHByb2duICxAYm9keSkKKyAgICAg ICAgICh3aGVuICxjcmVhdGVkIChyZWxlYXNlLWZpYmVyICxjcmVhdGVkKSkpKSkpCisKKyhkZWZ1 biBtYWtlLWZpYmVyIChmdW5jdGlvbiAma2V5IG5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChzdGFjay1zaXplICpkZWZhdWx0LWZpYmVyLXN0YWNrLXNpemUqKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGJpbmRpbmctc3RhY2stc2l6ZQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICpkZWZhdWx0LWZpYmVyLWJpbmRpbmctc3RhY2stc2l6ZSopKQor ICAiQ3JlYXRlIGEgZmliZXIgdGhhdCBydW5zIEZVTkNUSU9OICh6ZXJvLWFyZ3VtZW50KSB3aGVu IGZpcnN0Citzd2l0Y2hlZCB0by4gIE5BTUUgaXMgYSBzdHJpbmcgbGFiZWwgdXNlZCBieSBQUklO VC1PQkpFQ1QuCisKK1doZW4gRlVOQ1RJT04gcmV0dXJucywgdGhlIGZpYmVyIGlzIG1hcmtlZCBE RUFEIGFuZCBjb250cm9sIHN3aXRjaGVzCitiYWNrIHRvIGl0cyBtb3N0IHJlY2VudCByZXN1bWVy LCBkZWxpdmVyaW5nIEZVTkNUSU9OJ3MgcmV0dXJuIHZhbHVlCithcyB0aGF0IHJlc3VtZXIncyBT V0lUQ0gtRklCRVIgdmFsdWUuCisKK1RoZSBjYWxsaW5nIHRocmVhZCBtdXN0IGFscmVhZHkgaGF2 ZSBhIG1haW4gZmliZXIgYm91bmQgaW4KKypDVVJSRU5ULUZJQkVSKi4gIFVzZSBNQUtFLU1BSU4t RklCRVIgb3IgV0lUSC1GSUJFUi1USFJFQUQgdG8gZXN0YWJsaXNoCitvbmUgYmVmb3JlIGNhbGxp bmcgTUFLRS1GSUJFUi4gIFNpZ25hbHMgYW4gZXJyb3Igb3RoZXJ3aXNlLgorCitGaWJlcnMgYXJl IGF1dG8tcmVsZWFzZWQgd2hlbiB0aGVpciBvd25pbmcgdGhyZWFkIGV4aXRzOyBleHBsaWNpdAor UkVMRUFTRS1GSUJFUiBpcyBvbmx5IG5lZWRlZCBpZiB5b3Ugd2FudCB0byByZWNsYWltIHJlc291 cmNlcyBzb29uZXIuIgorICAodW5sZXNzICpjdXJyZW50LWZpYmVyKgorICAgIChlcnJvciAnbm8t Y3VycmVudC1maWJlci1lcnJvciA6b3BlcmF0aW9uICdtYWtlLWZpYmVyKSkKKyAgKHdpdGgtZmli ZXItc2FwIChzYXAgKCVmaWJlci1jcmVhdGUgc3RhY2stc2l6ZSBiaW5kaW5nLXN0YWNrLXNpemUp KQorICAgICglaW5zdGFsbC1maWJlciBzYXAgZnVuY3Rpb24gbmFtZSkpKQorCisoZGVmdW4gcmVs ZWFzZS1maWJlciAoZmliZXIpCisgICJSZWxlYXNlIEZJQkVSLiAgRm9yIGEgd29ya2VyIGZpYmVy LCB1bm1hcHMgaXRzIHN0YWNrcyBhbmQgZnJlZXMgdGhlCitib29ra2VlcGluZyBzdHJ1Y3QuICBG b3IgYSBtYWluIGZpYmVyLCBqdXN0IGZyZWVzIHRoZSBzdHJ1Y3Q7IHRoZQordGhyZWFkJ3Mgb3du IHN0YWNrIGFuZCBiaW5kaW5nIHN0YWNrIGFyZSB1bnRvdWNoZWQuICBTaWduYWxzCitGSUJFUi1T VEFURS1FUlJPUiBpZiBGSUJFUiBpcyBhIHdvcmtlciB0aGF0IGlzIHN0aWxsIFJVTk5JTkcuCitS ZWdpc3RlcmVkIGZpYmVycyBhcmUgcmVsZWFzZWQgYXV0b21hdGljYWxseSB3aGVuIHRoZWlyIG93 bmluZyB0aHJlYWQKK2V4aXRzLiIKKyAgKHVubGVzcyAoZmliZXItcmVsZWFzZWQtcCBmaWJlcikK KyAgICAod2hlbiAoYW5kIChub3QgKGZpYmVyLW1haW4tcCBmaWJlcikpCisgICAgICAgICAgICAg ICAoPSAoJWZpYmVyLXN0YXRlIGZpYmVyKSArZmliZXItcnVubmluZyspKQorICAgICAgKGVycm9y ICdmaWJlci1zdGF0ZS1lcnJvcgorICAgICAgICAgICAgIDpmaWJlciBmaWJlciA6c3RhdGUgOnJ1 bm5pbmcKKyAgICAgICAgICAgICA6ZXhwZWN0ZWQgJyg6bmV3IDpydW5uYWJsZSA6ZGVhZCkpKQor ICAgICglZmliZXItcmVsZWFzZSAoc2hpZnRmIChmaWJlci1zYXAgZmliZXIpIChzYi1zeXM6aW50 LXNhcCAwKSkpCisgICAgKHNldGYgKGZpYmVyLXRocmVhZCBmaWJlcikgICAgIG5pbAorICAgICAg ICAgIChmaWJlci1yZWxlYXNlZC1wIGZpYmVyKSB0KQorICAgICh3aGVuIChlcSAqY3VycmVudC1m aWJlciogZmliZXIpCisgICAgICAoc2V0ZiAqY3VycmVudC1maWJlciogbmlsKSkpKQorCisoZGVm dW4gZmliZXItc3RhdGUgKGZpYmVyKQorICAiUmV0dXJuIHRoZSBjdXJyZW50IHN0YXRlIG9mIEZJ QkVSIGFzIGEga2V5d29yZDogOk5FVywgOlJVTk5BQkxFLAorOlJVTk5JTkcsIG9yIDpERUFELiIK KyAgKGlmIChmaWJlci1yZWxlYXNlZC1wIGZpYmVyKQorICAgICAgOmRlYWQKKyAgICAgIChzdnJl ZiAjLihjb2VyY2UgJyg6bmV3IDpydW5uYWJsZSA6cnVubmluZyA6ZGVhZCkgJ3NpbXBsZS12ZWN0 b3IpCisgICAgICAgICAgICAgKCVmaWJlci1zdGF0ZSBmaWJlcikpKSkKKworKGRlY2xhaW0gKGlu bGluZSBmaWJlci1hbGl2ZS1wKSkKKyhkZWZ1biBmaWJlci1hbGl2ZS1wIChmaWJlcikKKyAgIlJl dHVybiBUIGlmIEZJQkVSIGhhcyBub3QgZmluaXNoZWQgcnVubmluZyBhbmQgaGFzIG5vdCBiZWVu CityZWxlYXNlZC4iCisgIChkZWNsYXJlICh0eXBlIGZpYmVyIGZpYmVyKSkKKyAgKGFuZCAobm90 IChmaWJlci1yZWxlYXNlZC1wIGZpYmVyKSkKKyAgICAgICAoLz0gKCVmaWJlci1zdGF0ZSBmaWJl cikgK2ZpYmVyLWRlYWQrKSkpCisKKyhkZWNsYWltIChpbmxpbmUgY3VycmVudC1maWJlcikKKyAg ICAgICAgIChmdHlwZSAoZnVuY3Rpb24gKCkgKG9yIG51bGwgZmliZXIpKSBjdXJyZW50LWZpYmVy KSkKKyhkZWZ1biBjdXJyZW50LWZpYmVyICgpCisgICJSZXR1cm4gdGhlIGZpYmVyIGN1cnJlbnRs eSBydW5uaW5nIG9uIHRoaXMgdGhyZWFkLCBvciBOSUwgaWYgbm8KK21haW4gZmliZXIgaXMgYm91 bmQuIgorICAqY3VycmVudC1maWJlciopCisKKzs7OyAtLS0gU3RhY2stdXNhZ2UgYWNjZXNzb3Jz IC0tLQorCisoZGVmdW4gZmliZXItY29udHJvbC1zdGFjay1zaXplIChmaWJlcikKKyAgIkJ5dGVz IG9mIHVzYWJsZSBjb250cm9sLXN0YWNrIHJlZ2lvbiBtYXBwZWQgZm9yIEZJQkVSLiAgRm9yIGEK K3dvcmtlciBmaWJlciwgdGhlIHNpemUgcGFzc2VkIHRvIE1BS0UtRklCRVIgKHJvdW5kZWQgdXAg dG8gYSBwYWdlKTsKK2ZvciBhIG1haW4gZmliZXIsIHRoZSBjYWxsaW5nIHRocmVhZCdzIGNvbnRy b2wgc3RhY2suIgorICAoZGVjbGFyZSAodHlwZSBmaWJlciBmaWJlcikpCisgIChpZiAoZmliZXIt cmVsZWFzZWQtcCBmaWJlcikKKyAgICAgIDAKKyAgICAgICglZmliZXItY29udHJvbC1zdGFjay1z aXplLWJ5dGVzIChmaWJlci1zYXAgZmliZXIpKSkpCisKKyhkZWZ1biBmaWJlci1jb250cm9sLXN0 YWNrLXVzYWdlIChmaWJlcikKKyAgIkJ5dGVzIG9mIEZJQkVSJ3MgY29udHJvbCBzdGFjayBjdXJy ZW50bHkgaW4gdXNlLiAgRm9yIGEgOlJVTk5BQkxFCitvciA6TkVXIGZpYmVyLCB0aGlzIGlzIHRo ZSBkZXB0aCBhdCBzdXNwZW5zaW9uIChvciBpbml0aWFsIHRyYW1wb2xpbmUKK2ZyYW1lIGZvciA6 TkVXKS4gIEZvciBhIDpSVU5OSU5HIGZpYmVyLCB0aGlzIG1heSBiZSB0aGUgc2F2ZWQgU1AgZnJv bQordGhlIGxhc3Qgc3VzcGVuZC4iCisgIChkZWNsYXJlICh0eXBlIGZpYmVyIGZpYmVyKSkKKyAg KGlmIChmaWJlci1yZWxlYXNlZC1wIGZpYmVyKQorICAgICAgMAorICAgICAgKCVmaWJlci1jb250 cm9sLXN0YWNrLXVzZWQtYnl0ZXMgKGZpYmVyLXNhcCBmaWJlcikpKSkKKworKGRlZnVuIGZpYmVy LWJpbmRpbmctc3RhY2stc2l6ZSAoZmliZXIpCisgICJCeXRlcyBvZiBiaW5kaW5nLXN0YWNrIHJl Z2lvbiBtYXBwZWQgZm9yIEZJQkVSLiAgUmV0dXJucyAwIGZvciBhCittYWluIGZpYmVyIChpdHMg YmluZGluZyBzdGFjayBpcyB0aGUgdGhyZWFkJ3Mgb3duLCBub3Qgb3duZWQgYnkgdGhlCitmaWJl ciB3cmFwcGVyKS4iCisgIChkZWNsYXJlICh0eXBlIGZpYmVyIGZpYmVyKSkKKyAgKGlmIChmaWJl ci1yZWxlYXNlZC1wIGZpYmVyKQorICAgICAgMAorICAgICAgKGxldCogKChjICglZmliZXItY3R4 IChmaWJlci1zYXAgZmliZXIpKSkKKyAgICAgICAgICAgICAoYiAoZmliZXItY3R4LWJzLWJhc2Ug YykpCisgICAgICAgICAgICAgKGUgKGZpYmVyLWN0eC1icy1lbmQgYykpKQorICAgICAgICAoaWYg KG9yICh6ZXJvcCBiKSAoemVyb3AgZSkpIDAgKC0gZSBiKSkpKSkKKworKGRlZnVuIGZpYmVyLWJp bmRpbmctc3RhY2stdXNhZ2UgKGZpYmVyKQorICAiQnl0ZXMgb2YgYmluZGluZyBzdGFjayBjdXJy ZW50bHkgaW4gdXNlIGJ5IEZJQkVSIChCU1AgbWludXMKK2JpbmRpbmctc3RhY2sgc3RhcnQpLiAg V29ya3MgZm9yIGJvdGggd29ya2VyIGFuZCBtYWluIGZpYmVycy4iCisgIChkZWNsYXJlICh0eXBl IGZpYmVyIGZpYmVyKSkKKyAgKGlmIChmaWJlci1yZWxlYXNlZC1wIGZpYmVyKQorICAgICAgMAor ICAgICAgKGxldCogKChjICAgICAgICAoJWZpYmVyLWN0eCAoZmliZXItc2FwIGZpYmVyKSkpCisg ICAgICAgICAgICAgKGJzcCAgICAgIChmaWJlci1jdHgtYnNwIGMpKQorICAgICAgICAgICAgIChi cy1zdGFydCAoZmliZXItY3R4LWJzLXN0YXJ0IGMpKSkKKyAgICAgICAgKGlmIChvciAoemVyb3Ag YnNwKSAoemVyb3AgYnMtc3RhcnQpKQorICAgICAgICAgICAgMAorICAgICAgICAgICAgKG1heCAw ICgtIGJzcCBicy1zdGFydCkpKSkpKQorCisoZGVmdW4gJXN3aXRjaCAoZnJvbSB0byB2YWx1ZXMg dXBkYXRlLXJldHVybi1wKQorICAiSW50ZXJuYWwgc3dpdGNoIHByaW1pdGl2ZS4gIFN1c3BlbmQg RlJPTSBhbmQgcmVzdW1lIFRPIHdpdGggVkFMVUVTCitzdGFnZWQgb24gVE8ncyB2YWx1ZSBzbG90 LiAgSWYgVVBEQVRFLVJFVFVSTi1QLCBhbHNvIHNldCBUTydzCityZXR1cm4tZmliZXIgdG8gRlJP TSAocmVzdW1lL3N3aXRjaCBzZW1hbnRpY3MpOyBvdGhlcndpc2UgbGVhdmUgaXQKK2Fsb25lICh5 aWVsZCBzZW1hbnRpY3MgLS0gcHJlc2VydmVzIFRPJ3MgcHJpb3IgY2FsbGVyIGNoYWluKS4iCisg IChkZWNsYXJlICh0eXBlIGZpYmVyIGZyb20gdG8pCisgICAgICAgICAgICh0eXBlIGxpc3QgdmFs dWVzKSkKKyAgKGNvbmQgKChmaWJlci1yZWxlYXNlZC1wIGZyb20pCisgICAgICAgICAoZXJyb3Ig J2RlYWQtZmliZXItZXJyb3IgOmZpYmVyIGZyb20pKQorICAgICAgICAoKGZpYmVyLXJlbGVhc2Vk LXAgdG8pCisgICAgICAgICAoZXJyb3IgJ2RlYWQtZmliZXItZXJyb3IgOmZpYmVyIHRvKSkpCisg IChsZXQqICgoZnJvbS1zYXAgKGZpYmVyLXNhcCBmcm9tKSkKKyAgICAgICAgICh0by1zYXAgKGZp YmVyLXNhcCB0bykpCisgICAgICAgICAodGgtc2FwIChzYi10aHJlYWQ6Y3VycmVudC10aHJlYWQt c2FwKSkKKyAgICAgICAgIChmcm9tLWN0eCAoJWZpYmVyLWN0eCBmcm9tLXNhcCkpCisgICAgICAg ICAodG8tY3R4ICglZmliZXItY3R4IHRvLXNhcCkpKQorICAgIChjaGVjay1zd2l0Y2ggZnJvbSB0 byBmcm9tLWN0eCB0by1jdHgpCisgICAgKGlmIHVwZGF0ZS1yZXR1cm4tcAorICAgICAgICAoc3Rh Z2UtcmV0dXJuIGZyb20gdG8gZnJvbS1zYXAgdG8tY3R4IHZhbHVlcykKKyAgICAgICAgKHNldGYg KGZpYmVyLXZhbHVlIHRvKSB2YWx1ZXMpKQorICAgIChzZXRmICpjdXJyZW50LWZpYmVyKiB0bykK KyAgICAoJXN3aXRjaC1wcmVwIGZyb20tc2FwIHRvLXNhcCkKKyAgICAoc3dhcC1mcmFtZXMgdGgt c2FwIGZyb20tY3R4IHRvLWN0eCkKKyAgICAoZmxpcC1zdGF0ZXMgZnJvbS1jdHggdG8tY3R4KQor ICAgICglc3dhcC1yZWdzIGZyb20tc2FwIHRvLXNhcCkKKyAgICA7OyBDb250cm9sIHJlLWVudGVy cyBoZXJlIHdoZW4gc29tZSBsYXRlciBzd2l0Y2ggcmVzdW1lcyBmcm9tLgorICAgIChzZXRmICpj dXJyZW50LWZpYmVyKiBmcm9tKSkKKyAgOzsgUG9zdC1yZXN1bWUgZGVsaXZlcnkgKGVhY2ggYSBu by1vcCB1bmxlc3MgaXRzIHNsb3QgaXMgc2V0KS4gIE9yZGVyIGlzCisgIDs7IGRlbGliZXJhdGU6 IGZyb20ncyBvd24gc3RhZ2VkIGludGVycnVwdCBmaXJlcyBmaXJzdCwgaW4gZnJvbSdzIGNvbnRl eHQsCisgIDs7IGFuZCBpZiBpdCBkb2VzIGl0IHVud2luZHMgYW5kIHByZWVtcHRzIHRoZSByZXN0 IC0tIGFuIGludGVycnVwdCBvbiB0aGUKKyAgOzsgcmVzdW1lZCBmaWJlciBvdXRyYW5rcyBkZWxp dmVyaW5nIHRvJ3MgZXNjYXBlLiAgdG8gaXMgYWxyZWFkeSBkZWFkIG9uY2UKKyAgOzsgaXQgaGFz IGFuIGVzY2FwZSwgc28gYSBwcmVlbXB0ZWQgZXNjYXBlIGlzIGRyb3BwZWQsIG5vdCByZWRlbGl2 ZXJlZC4KKyAgKGRlbGl2ZXItcGVuZGluZyBmcm9tKQorICAobWF5YmUtZXNjYXBlIHRvKQorICAo bWF5YmUtZXNjYXBlLXRocm93IHRvKQorICAodmFsdWVzLWxpc3QgKGZpYmVyLXZhbHVlIGZyb20p KSkKKworKGRlZnVuIHN3aXRjaC1maWJlciAoZnJvbSB0byAmcmVzdCB2YWx1ZXMpCisgICJTdXNw ZW5kIEZST00gYW5kIHJlc3VtZSBUTywgZGVsaXZlcmluZyBWQUxVRVMgdG8gdGhlIHJlc3VtZXIg YXMKK211bHRpcGxlIHZhbHVlcy4gIFNldHMgVE8ncyByZXR1cm4tZmliZXIgdG8gRlJPTSwgc28g YSBzdWJzZXF1ZW50CitZSUVMRC1GSUJFUiBpbnNpZGUgVE8gd2lsbCByZXR1cm4gdG8gRlJPTS4g IFJldHVybnMgd2hhdGV2ZXIgdGhlIG5leHQKK3N3aXRjaCBiYWNrIHRvIEZST00gZGVsaXZlcnMs IGFsc28gYXMgbXVsdGlwbGUgdmFsdWVzLiIKKyAgKGRlY2xhcmUgKHR5cGUgZmliZXIgZnJvbSB0 bykpCisgICglc3dpdGNoIGZyb20gdG8gdmFsdWVzIHQpKQorCisoZGVmdW4gcmVzdW1lLWZpYmVy ICh0byAmcmVzdCB2YWx1ZXMpCisgICJTdXNwZW5kIHRoZSBjdXJyZW50IGZpYmVyIGFuZCByZXN1 bWUgVE8sIGRlbGl2ZXJpbmcgVkFMVUVTIGFzCittdWx0aXBsZSB2YWx1ZXMuICBFcXVpdmFsZW50 IHRvIChTV0lUQ0gtRklCRVIgKkNVUlJFTlQtRklCRVIqIFRPCisuIFZBTFVFUyk6IHNldHMgVE8n cyByZXR1cm4tZmliZXIgdG8gKkNVUlJFTlQtRklCRVIqLCBzbyBZSUVMRC1GSUJFUgoraW5zaWRl IFRPIGNvbWVzIGJhY2sgaGVyZS4KKworICBZSUVMRC1GSUJFUiAgLS0gc3VzcGVuZCBzZWxmLCBk ZWxpdmVyIHRvIHRoZSByZXR1cm4gZmliZXIsIHByZXNlcnZlCisgICAgICAgICAgICAgICAgICB0 aGUgcmV0dXJuIGZpYmVyJ3Mgb3duIGNhbGxlciBjaGFpbi4KKyAgUkVTVU1FLUZJQkVSIC0tIHN1 c3BlbmQgc2VsZiwgZGVsaXZlciB0byBhIGNob3NlbiBmaWJlciwgbWFrZSBzZWxmCisgICAgICAg ICAgICAgICAgICB0aGF0IGZpYmVyJ3MgcmV0dXJuIGZpYmVyLgorICBTV0lUQ0gtRklCRVIgLS0g ZXhwbGljaXQgRlJPTS9UTyBmb3JtIG9mIFJFU1VNRS1GSUJFUi4iCisgIChkZWNsYXJlICh0eXBl IGZpYmVyIHRvKSkKKyAgKGxldCAoKGZyb20gKmN1cnJlbnQtZmliZXIqKSkKKyAgICAodW5sZXNz IGZyb20KKyAgICAgIChlcnJvciAnbm8tY3VycmVudC1maWJlci1lcnJvciA6b3BlcmF0aW9uICdy ZXN1bWUtZmliZXIpKQorICAgICglc3dpdGNoIGZyb20gdG8gdmFsdWVzIHQpKSkKKworKGRlZm1h Y3JvIHdpdGgtZmliZXIgKCh2YXIgZnVuY3Rpb24gJnJlc3QgbWFrZS1hcmdzKSAmYm9keSBib2R5 KQorICAiQ3JlYXRlIGEgZmliZXIsIGJpbmQgaXQgdG8gVkFSLCBleGVjdXRlIEJPRFksIHJlbGVh c2Ugb24gZXhpdC4iCisgIGAobGV0ICgoLHZhciAobWFrZS1maWJlciAsZnVuY3Rpb24gLEBtYWtl LWFyZ3MpKSkKKyAgICAgKHVud2luZC1wcm90ZWN0IChwcm9nbiAsQGJvZHkpCisgICAgICAgKHJl bGVhc2UtZmliZXIgLHZhcikpKSkKKworKGRlZnVuIHlpZWxkLWZpYmVyICgmcmVzdCB2YWx1ZXMp CisgICJTd2l0Y2ggZnJvbSB0aGUgY3VycmVudCBmaWJlciB0byBpdHMgcmV0dXJuIGZpYmVyLCBk ZWxpdmVyaW5nIFZBTFVFUworYXMgbXVsdGlwbGUgdmFsdWVzIHRvIHRoZSByZXN1bWVyLiAgUmV0 dXJucyB3aGF0ZXZlciB0aGUgbmV4dAorc3dpdGNoLWluIGRlbGl2ZXJzIChhcyBtdWx0aXBsZSB2 YWx1ZXMpLiAgRXJyb3JzIGlmIHRoZSBjdXJyZW50IGZpYmVyCitoYXMgbm8gcmVjb3JkZWQgcmV0 dXJuIGZpYmVyIChuZXZlciByZXN1bWVkKS4iCisgIChsZXQgKChzZWxmICpjdXJyZW50LWZpYmVy KikpCisgICAgKHVubGVzcyBzZWxmCisgICAgICAoZXJyb3IgJ25vLWN1cnJlbnQtZmliZXItZXJy b3IgOm9wZXJhdGlvbiAneWllbGQtZmliZXIpKQorICAgIChsZXQgKCh0YXJnZXQgKGZpYmVyLXJl dHVybi1maWJlciBzZWxmKSkpCisgICAgICAodW5sZXNzIHRhcmdldAorICAgICAgICAoZXJyb3Ig ImZpYmVyIH5TIGhhcyBubyByZXR1cm4gZmliZXIgKG5ldmVyIHJlc3VtZWQpIiBzZWxmKSkKKyAg ICAgICglc3dpdGNoIHNlbGYgdGFyZ2V0IHZhbHVlcyBuaWwpKSkpCisKKyhkZWZ1biBqb2luLWZp YmVyIChmaWJlcikKKyAgIlJlc3VtZSBGSUJFUiBmcm9tIHRoZSBjdXJyZW50IGZpYmVyIHVudGls IGl0IHJ1bnMgdG8gY29tcGxldGlvbiwKK2FuZCByZXR1cm4gaXRzIGVudHJ5LWZ1bmN0aW9uIHZh bHVlcy4gIEZJQkVSIG11c3QgYmUgUlVOTkFCTEUgb3IgTkVXCithbmQgb24gdGhlIGN1cnJlbnQg dGhyZWFkLiIKKyAgKGRlY2xhcmUgKHR5cGUgZmliZXIgZmliZXIpKQorICAobG9vcCB3aXRoIHZz CisgICAgICAgIHdoaWxlIChmaWJlci1hbGl2ZS1wIGZpYmVyKQorICAgICAgICBkbyAoc2V0ZiB2 cyAobXVsdGlwbGUtdmFsdWUtbGlzdCAocmVzdW1lLWZpYmVyIGZpYmVyKSkpCisgICAgICAgIGZp bmFsbHkgKHJldHVybiAodmFsdWVzLWxpc3QgdnMpKSkpCisKKyhkZWZ1biBpbnRlcnJ1cHQtZmli ZXIgKGZpYmVyIGNvbmRpdGlvbikKKyAgIlN0YWdlIENPTkRJVElPTiB0byBiZSBzaWduYWxsZWQg aW4gRklCRVIgb24gaXRzIG5leHQgcmVzdW1lLgorQ29vcGVyYXRpdmUgLS0gbm90aGluZyBoYXBw ZW5zIHVudGlsIFNXSVRDSC1GSUJFUiBkZWxpdmVycyBjb250cm9sCitpbnRvIEZJQkVSLCBhdCB3 aGljaCBwb2ludCBDT05ESVRJT04gaXMgc2lnbmFsbGVkIGluIHRoZSBmaWJlcidzIG93bgorY29u dGV4dC4gIEEgTkVXIGZpYmVyIGlzIGVmZmVjdGl2ZWx5IGNhbmNlbGxlZCAodGhlIGNvbmRpdGlv biBmaXJlcworYmVmb3JlIGl0cyBlbnRyeSBmdW5jdGlvbiBydW5zKS4iCisgIChkZWNsYXJlICh0 eXBlIGZpYmVyIGZpYmVyKQorICAgICAgICAgICAodHlwZSBjb25kaXRpb24gY29uZGl0aW9uKSkK KyAgKHVubGVzcyAoZmliZXItYWxpdmUtcCBmaWJlcikKKyAgICAoZXJyb3IgJ2RlYWQtZmliZXIt ZXJyb3IgOmZpYmVyIGZpYmVyKSkKKyAgKHNldGYgKGZpYmVyLXBlbmRpbmctY29uZGl0aW9uIGZp YmVyKSBjb25kaXRpb24pCisgIGZpYmVyKQorCisoZGVmbWFjcm8gd2l0aC1pbnRlcnJ1cHRlZC1m aWJlciAoKGZpYmVyIGNvbmRpdGlvbikgJmJvZHkgYm9keSkKKyAgIlN0YWdlIENPTkRJVElPTiBv biBGSUJFUiBmb3IgZGVsaXZlcnkgb24gaXRzIG5leHQgcmVzdW1lLCB0aGVuCitleGVjdXRlIEJP RFkuICBPbiBleGl0IChub3JtYWwgb3Igbm9uLWxvY2FsKSwgaWYgdGhlIHN0YWdlZCBjb25kaXRp b24KK2hhcyBub3QgYmVlbiBjb25zdW1lZCBieSBhIHJlc3VtZSBpdCBpcyBjbGVhcmVkLiIKKyAg KGxldCAoKGYgKGdlbnN5bSAiRklCRVIiKSkKKyAgICAgICAgKGMgKGdlbnN5bSAiQ09ORElUSU9O IikpKQorICAgIGAobGV0ICgoLGYgLGZpYmVyKQorICAgICAgICAgICAoLGMgLGNvbmRpdGlvbikp CisgICAgICAgKGludGVycnVwdC1maWJlciAsZiAsYykKKyAgICAgICAodW53aW5kLXByb3RlY3Qg KHByb2duICxAYm9keSkKKyAgICAgICAgICh3aGVuIChlcSAoZmliZXItcGVuZGluZy1jb25kaXRp b24gLGYpICxjKQorICAgICAgICAgICAoc2V0ZiAoZmliZXItcGVuZGluZy1jb25kaXRpb24gLGYp IG5pbCkpKSkpKQorCisoZGVjbGFpbSAoaW5saW5lIGZpYmVyLWNvbmRpdGlvbikpCisoZGVmdW4g ZmliZXItY29uZGl0aW9uIChmaWJlcikKKyAgIlRoZSBjb25kaXRpb24gc3RhZ2VkIGZvciBGSUJF UidzIG5leHQgcmVzdW1lIGJ5IElOVEVSUlVQVC1GSUJFUiwgb3IKK05JTC4gIENsZWFyZWQgd2hl biBGSUJFUiBjb25zdW1lcyBpdCBvbiByZXN1bWUuICAoQW4gZW50cnktZnVuY3Rpb24KK2VzY2Fw ZSBpcyBhIHNlcGFyYXRlIGNoYW5uZWwsIHJlLXNpZ25hbGVkIGluIHRoZSByZXN1bWVyIHJhdGhl ciB0aGFuCitpbiBGSUJFUiwgYW5kIGlzIG5vdCB2aXNpYmxlIGhlcmUuKSIKKyAgKGRlY2xhcmUg KHR5cGUgZmliZXIgZmliZXIpKQorICAoZmliZXItcGVuZGluZy1jb25kaXRpb24gZmliZXIpKQor CisoZGVjbGFpbSAoaW5saW5lIGZpYmVyLXBpbm5lZC1wKSkKKyhkZWZ1biBmaWJlci1waW5uZWQt cCAoZmliZXIpCisgICJSZXR1cm4gVCBpZiBGSUJFUidzIHBpbiBjb3VudCBpcyBncmVhdGVyIHRo YW4gemVyby4gU1dJVENILUZJQkVSCit3aWxsIG9ubHkgc3VzcGVuZCBhIGZpYmVyIHdpdGggYSBw aW4gY291bnQgb2YgemVyby4iCisgIChkZWNsYXJlICh0eXBlIGZpYmVyIGZpYmVyKSkKKyAgKHBs dXNwIChmaWJlci1waW4tY291bnQgZmliZXIpKSkKKworKGRlZm1hY3JvIHdpdGgtZmliZXItcGlu bmVkICgoKSAmYm9keSBib2R5KQorICAiSW5jcmVtZW50IHRoZSBjdXJyZW50IGZpYmVyJ3MgcGlu IGNvdW50IGZvciB0aGUgZHluYW1pYyBleHRlbnQgb2YKK0JPRFk7IFNXSVRDSC1GSUJFUiByZWZ1 c2VzIHRvIHN1c3BlbmQgYSBwaW5uZWQgZmliZXIuICBQaW5zIG5lc3QuIgorICAobGV0ICgoZiAo Z2Vuc3ltICJQSU5ORUQtRklCRVIiKSkpCisgICAgYChsZXQgKCgsZiAob3IgKmN1cnJlbnQtZmli ZXIqCisgICAgICAgICAgICAgICAgICAgKGVycm9yICduby1jdXJyZW50LWZpYmVyLWVycm9yCisg ICAgICAgICAgICAgICAgICAgICAgICAgIDpvcGVyYXRpb24gJ3dpdGgtZmliZXItcGlubmVkKSkp KQorICAgICAgIChpbmNmIChmaWJlci1waW4tY291bnQgLGYpKQorICAgICAgICh1bndpbmQtcHJv dGVjdCAocHJvZ24gLEBib2R5KQorICAgICAgICAgKGRlY2YgKGZpYmVyLXBpbi1jb3VudCAsZikp KSkpKQorCis7OzsgLS0tIENyb3NzLXRocmVhZCBtaWdyYXRpb24gLS0tCisKKyhkZWZ1biBmaWJl ci1taWdyYXRlIChmaWJlciBkZXN0LXRocmVhZCkKKyAgIkF0b21pY2FsbHkgbW92ZSBGSUJFUidz IG93bmVyc2hpcCBmcm9tIGl0cyBjdXJyZW50IG93bmVyIHRocmVhZCB0bworREVTVC1USFJFQUQu ICBBZnRlciB0aGlzIHJldHVybnMsIEZJQkVSIG1heSBiZSBzd2l0Y2hlZCBpbnRvIG9ubHkgZnJv bQorREVTVC1USFJFQUQuCisKK0ZJQkVSIG11c3QgYmUgaW4gc3RhdGUgOlJVTk5BQkxFLiIKKyAg KGRlY2xhcmUgKHR5cGUgZmliZXIgZmliZXIpCisgICAgICAgICAgICh0eXBlIHNiLXRocmVhZDp0 aHJlYWQgZGVzdC10aHJlYWQpKQorICAod2hlbiAoZmliZXItcmVsZWFzZWQtcCBmaWJlcikKKyAg ICAoZXJyb3IgJ2RlYWQtZmliZXItZXJyb3IgOmZpYmVyIGZpYmVyKSkKKyAgKGxldCAoKHN0YXRl ICglZmliZXItc3RhdGUgZmliZXIpKSkKKyAgICAodW5sZXNzICg9IHN0YXRlICtmaWJlci1ydW5u YWJsZSspCisgICAgICAoZXJyb3IgJ2ZpYmVyLXN0YXRlLWVycm9yCisgICAgICAgICAgICAgOmZp YmVyIGZpYmVyCisgICAgICAgICAgICAgOnN0YXRlIChmaWJlci1zdGF0ZSBmaWJlcikKKyAgICAg ICAgICAgICA6ZXhwZWN0ZWQgJyg6cnVubmFibGUpKSkpCisgIChsZXQgKChkZXN0LXNhcCAoc2It dGhyZWFkOjp0aHJlYWQtcHJpbWl0aXZlLXRocmVhZCBkZXN0LXRocmVhZCkpKQorICAgICh3aGVu ICh6ZXJvcCBkZXN0LXNhcCkKKyAgICAgIChlcnJvciAiZGVzdGluYXRpb24gdGhyZWFkIGlzIG5v dCBsaXZlIikpCisgICAgKGxldCAoKHJjICglZmliZXItbWlncmF0ZSAoZmliZXItc2FwIGZpYmVy KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNiLXN5czppbnQtc2FwIGRlc3Qtc2Fw KSkpKQorICAgICAgKGNhc2UgcmMKKyAgICAgICAgKDAKKyAgICAgICAgIChzZXRmIChmaWJlci10 aHJlYWQgZmliZXIpIGRlc3QtdGhyZWFkKQorICAgICAgICAgZmliZXIpCisgICAgICAgICgtMQor ICAgICAgICAgKGVycm9yICdmaWJlci1zdGF0ZS1lcnJvcgorICAgICAgICAgICAgICAgIDpmaWJl ciBmaWJlcgorICAgICAgICAgICAgICAgIDpzdGF0ZSAoZmliZXItc3RhdGUgZmliZXIpCisgICAg ICAgICAgICAgICAgOmV4cGVjdGVkICcoOnJ1bm5hYmxlKSkpCisgICAgICAgICgtMgorICAgICAg ICAgKGVycm9yICdmaWJlci1lcnJvciA6ZmliZXIgZmliZXIpKQorICAgICAgICAodAorICAgICAg ICAgKGVycm9yICJ1bmV4cGVjdGVkIHJldHVybiBjb2RlIH5EIGZyb20gZmliZXIgbWlncmF0aW9u IiByYykpKSkpKQorCispCmRpZmYgLS1naXQgYS9jb250cmliL3NiLWZpYmVyL3BhY2thZ2UubGlz cCBiL2NvbnRyaWIvc2ItZmliZXIvcGFja2FnZS5saXNwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMC4uNGI4OGVjYjhhCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9zYi1m aWJlci9wYWNrYWdlLmxpc3AKQEAgLTAsMCArMSw1NCBAQAorOzs7OyAtKi0gIExpc3AgLSotCisK KyhkZWZwYWNrYWdlIDpzYi1maWJlcgorICAoOnVzZSA6Y2wgOnNiLWFsaWVuIDpzYi1leHQpCisg ICg6ZXhwb3J0CisgICAjOipjdXJyZW50LWZpYmVyKgorICAgIzpjdXJyZW50LWZpYmVyCisgICAj OipkZWZhdWx0LWZpYmVyLXN0YWNrLXNpemUqCisgICAjOipkZWZhdWx0LWZpYmVyLWJpbmRpbmct c3RhY2stc2l6ZSoKKyAgICM6ZmliZXIKKyAgICM6ZmliZXJwCisgICAjOm1ha2UtZmliZXIKKyAg ICM6bWFrZS1tYWluLWZpYmVyCisgICAjOndpdGgtZmliZXItdGhyZWFkCisgICAjOnJlbGVhc2Ut ZmliZXIKKyAgICM6ZmliZXItbmFtZQorICAgIzpmaWJlci10aHJlYWQKKyAgICM6ZmliZXItcmV0 dXJuLWZpYmVyCisgICAjOnN3aXRjaC1maWJlcgorICAgIzpyZXN1bWUtZmliZXIKKyAgICM6eWll bGQtZmliZXIKKyAgICM6am9pbi1maWJlcgorICAgIzppbnRlcnJ1cHQtZmliZXIKKyAgICM6d2l0 aC1pbnRlcnJ1cHRlZC1maWJlcgorICAgIzpmaWJlci1jb25kaXRpb24KKyAgICM6ZmliZXItYWxp dmUtcAorICAgIzpmaWJlci1tYWluLXAKKyAgICM6ZmliZXItcmVsZWFzZWQtcAorICAgIzpmaWJl ci1zdGF0ZQorICAgIzpmaWJlci1jb250cm9sLXN0YWNrLXNpemUKKyAgICM6ZmliZXItY29udHJv bC1zdGFjay11c2FnZQorICAgIzpmaWJlci1iaW5kaW5nLXN0YWNrLXNpemUKKyAgICM6ZmliZXIt YmluZGluZy1zdGFjay11c2FnZQorICAgIzp3aXRoLWZpYmVyCisgICAjOndpdGgtZmliZXItcGlu bmVkCisgICAjOmZpYmVyLXBpbm5lZC1wCisgICAjOmZpYmVyLXBpbi1jb3VudAorICAgIzpmaWJl ci1taWdyYXRlCisgICA7OyBDb25kaXRpb25zCisgICAjOmZpYmVyLWVycm9yCisgICAjOmZpYmVy LWVycm9yLWZpYmVyCisgICAjOmRlYWQtZmliZXItZXJyb3IKKyAgICM6cGlubmVkLWZpYmVyLWVy cm9yCisgICAjOnBpbm5lZC1maWJlci1lcnJvci1kZXB0aAorICAgIzpmaWJlci10aHJlYWQtbWlz bWF0Y2gtZXJyb3IKKyAgICM6ZmliZXItdGhyZWFkLW1pc21hdGNoLWVycm9yLXJvbGUKKyAgICM6 ZmliZXItc3RhdGUtZXJyb3IKKyAgICM6ZmliZXItc3RhdGUtZXJyb3Itc3RhdGUKKyAgICM6Zmli ZXItc3RhdGUtZXJyb3ItZXhwZWN0ZWQKKyAgICM6bm8tY3VycmVudC1maWJlci1lcnJvcgorICAg Izpuby1jdXJyZW50LWZpYmVyLWVycm9yLW9wZXJhdGlvbikpCisKKyhldmFsLXdoZW4gKDpjb21w aWxlLXRvcGxldmVsIDpsb2FkLXRvcGxldmVsIDpleGVjdXRlKQorICAoc2V0ZiAoc2ItaW50OnN5 c3RlbS1wYWNrYWdlLXAgKGZpbmQtcGFja2FnZSAiU0ItRklCRVIiKSkgdCkpCmRpZmYgLS1naXQg YS9jb250cmliL3NiLWZpYmVyL3NiLWZpYmVyLmFzZCBiL2NvbnRyaWIvc2ItZmliZXIvc2ItZmli ZXIuYXNkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uZDczMzViMjYxCi0t LSAvZGV2L251bGwKKysrIGIvY29udHJpYi9zYi1maWJlci9zYi1maWJlci5hc2QKQEAgLTAsMCAr MSwyMSBAQAorOzs7OyAtKi0gIExpc3AgLSotCisKKyhlcnJvciAiQ2FuJ3QgYnVpbGQgY29udHJp YnMgd2l0aCBBU0RGIikKKworKGRlZnN5c3RlbSAic2ItZmliZXIiCisgIDpkZWZzeXN0ZW0tZGVw ZW5kcy1vbiAoInNiLWdyb3ZlbCIpCisgIDpjb21wb25lbnRzICgoOmZpbGUgInBhY2thZ2UiKQor ICAgICAgICAgICAgICAgKDpzYi1ncm92ZWwtY29uc3RhbnRzLWZpbGUgImNvbnN0YW50cyIKKyAg ICAgICAgICAgICAgICA6cGFja2FnZSA6c2ItZmliZXIKKyAgICAgICAgICAgICAgICA6aWYtZmVh dHVyZSAoOmFuZCA6c2ItZmliZXIgKDpvciA6eDg2LTY0IDphcm02NCkgKDpub3QgOndpbjMyKSkK KyAgICAgICAgICAgICAgICA6ZGVwZW5kcy1vbiAoInBhY2thZ2UiKSkKKyAgICAgICAgICAgICAg ICg6ZmlsZSAieDg2LTY0LXZvcHMiCisgICAgICAgICAgICAgICAgOmlmLWZlYXR1cmUgKDphbmQg OnNiLWZpYmVyIDp4ODYtNjQpCisgICAgICAgICAgICAgICAgOmRlcGVuZHMtb24gKCJwYWNrYWdl IikpCisgICAgICAgICAgICAgICAoOmZpbGUgImFybTY0LXZvcHMiCisgICAgICAgICAgICAgICAg OmlmLWZlYXR1cmUgKDphbmQgOnNiLWZpYmVyIDphcm02NCkKKyAgICAgICAgICAgICAgICA6ZGVw ZW5kcy1vbiAoInBhY2thZ2UiKSkKKyAgICAgICAgICAgICAgICg6ZmlsZSAiZmliZXItZmZpIgor ICAgICAgICAgICAgICAgIDpkZXBlbmRzLW9uICgicGFja2FnZSIgImNvbnN0YW50cyIpKQorICAg ICAgICAgICAgICAgKDpmaWxlICJmaWJlciIKKyAgICAgICAgICAgICAgICA6ZGVwZW5kcy1vbiAo InBhY2thZ2UiICJjb25zdGFudHMiICJmaWJlci1mZmkiKSkpKQpkaWZmIC0tZ2l0IGEvY29udHJp Yi9zYi1maWJlci9zYi1maWJlci50ZXhpbmZvIGIvY29udHJpYi9zYi1maWJlci9zYi1maWJlci50 ZXhpbmZvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uZWI3OWE1OTg4Ci0t LSAvZGV2L251bGwKKysrIGIvY29udHJpYi9zYi1maWJlci9zYi1maWJlci50ZXhpbmZvCkBAIC0w LDAgKzEsMjQ5IEBACitAbm9kZSBzYi1maWJlcgorQHNlY3Rpb24gc2ItZmliZXIKK0BjaW5kZXgg RmliZXIKK0BjaW5kZXggU2ItZmliZXIKKworQGNvZGV7c2ItZmliZXJ9IHByb3ZpZGVzIHVzZXIt c3BhY2UgY29yb3V0aW5lcyB3aXRoIHRoZWlyIG93biBjb250cm9sCithbmQgYmluZGluZyBzdGFj a3MsIGNvb3BlcmF0aXZlbHkgc2NoZWR1bGVkIGFuZCBydW5uaW5nIG9uIGEgc2luZ2xlIE9TCit0 aHJlYWQgYXQgYSB0aW1lLCB3aXRoIGV4cGxpY2l0IGNyb3NzLXRocmVhZCBtaWdyYXRpb24uCisK K0Bjb2Rle3N3aXRjaC1maWJlcn0gaXMgdGhlIG9ubHkgY29udHJvbC10cmFuc2ZlciBvcGVyYXRp b24gYW5kIGlzCitpbnRlbmRlZCB0byBiZSB0aGUgYnVpbGRpbmcgYmxvY2sgZm9yIHNjaGVkdWxl cnMsIEkvTyBpbnRlZ3JhdGlvbiwgYW5kCitmaWJlci1hd2FyZSBzeW5jaHJvbml6YXRpb24gaW4g dXNlciBhcHBsaWNhdGlvbiBjb2RlLgorCitAc3Vic2VjdGlvbiBBUEkKKworQGRlZmZuIEZ1bmN0 aW9uIG1ha2UtZmliZXIgZnVuY3Rpb24gJmtleSBuYW1lIChzdGFjay1zaXplIDY1NTM2KSAoYmlu ZGluZy1zdGFjay1zaXplIDgxOTIpCitDcmVhdGUgYSBuZXcgZmliZXIgd2hvc2UgZW50cnkgQHZh cntmdW5jdGlvbn0gcnVucyB3aGVuIGZpcnN0IHN3aXRjaGVkCit0by4gIEB2YXJ7bmFtZX0sIGlm IHN1cHBsaWVkLCBpcyBhIHN0cmluZyBsYWJlbCB1c2VkIGJ5CitAY29kZXtwcmludC1vYmplY3R9 LiAgUmVnaXN0ZXJlZCBmaWJlcnMgYXJlIHJlbGVhc2VkIGF1dG9tYXRpY2FsbHkgYXQKK3RocmVh ZCBleGl0OyBAY29kZXtyZWxlYXNlLWZpYmVyfSBpcyBvbmx5IG5lZWRlZCBpZiB5b3Ugd2FudCB0 bworcmVjbGFpbSByZXNvdXJjZXMgc29vbmVyLgorCitUaGUgY2FsbGluZyB0aHJlYWQgbXVzdCBh bHJlYWR5IGhhdmUgYSBtYWluIGZpYmVyIGJvdW5kIGluCitAY29kZXsqY3VycmVudC1maWJlcip9 LiAgVXNlIEBjb2Rle21ha2UtbWFpbi1maWJlcn0gb3IKK0Bjb2Rle3dpdGgtZmliZXItdGhyZWFk fSB0byBlc3RhYmxpc2ggb25lIGJlZm9yZSBjYWxsaW5nCitAY29kZXttYWtlLWZpYmVyfTsgb3Ro ZXJ3aXNlIGFuIGVycm9yIGlzIHNpZ25hbGxlZC4KKworSWYgQHZhcntmdW5jdGlvbn0gcmV0dXJu cyBub3JtYWxseSwgdGhlIGZpYmVyIGlzIG1hcmtlZCBAY29kZXs6ZGVhZH0KK2FuZCBjb250cm9s IHN3aXRjaGVzIGJhY2sgdG8gaXRzIHJldHVybiBmaWJlciwgd2l0aCB0aGUgZnVuY3Rpb24ncwor cmV0dXJuIHZhbHVlIChzZWUgQGNvZGV7c3dpdGNoLWZpYmVyfSkuICBJZiBAdmFye2Z1bmN0aW9u fSBleGl0cyB2aWEKK2FuIHVuaGFuZGxlZCBjb25kaXRpb24sIHRoZSBjb25kaXRpb24gaXMgc3Rv cmVkIG9uIHRoZSBmaWJlciBhbmQKK3JlLXNpZ25hbGVkIGluIHRoZSBjYWxsZXIncyBjb250ZXh0 LgorQGVuZCBkZWZmbgorCitAZGVmZm4gRnVuY3Rpb24gbWFrZS1tYWluLWZpYmVyICZrZXkgbmFt ZQorQ3JlYXRlIGEgZmliZXIgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IHRocmVhZCdzIG93biBz dGFjayBhbmQgYmluZAorQGNvZGV7KmN1cnJlbnQtZmliZXIqfS4gIE1vc3QgY29kZSBzaG91bGQg dXNlCitAY29kZXt3aXRoLWZpYmVyLXRocmVhZH07IEBjb2Rle21ha2UtbWFpbi1maWJlcn0gaXMg dGhlIGV4cGxpY2l0IGZvcm0KK2ZvciBjYWxsZXJzIHRoYXQgbWFuYWdlIGZpYmVyLXRocmVhZCBs aWZldGltZSBieSBoYW5kLgorQGVuZCBkZWZmbgorCitAZGVmZm4gTWFjcm8gd2l0aC1maWJlci10 aHJlYWQgKCkgJmJvZHkgYm9keQorUmVnaXN0ZXIgYSBtYWluIGZpYmVyIG9uIHRoZSBjYWxsaW5n IHRocmVhZCBmb3IgdGhlIGR5bmFtaWMgZXh0ZW50IG9mCitAdmFye2JvZHl9IGFuZCByZWxlYXNl IGl0IG9uIGV4aXQuICBBIG5vLW9wIGlmIEBjb2RleypjdXJyZW50LWZpYmVyKn0KK2lzIGFscmVh ZHkgYm91bmQgb24gZW50cnkgKG5lc3RpbmcgaXMgc2FmZSkuCitAZW5kIGRlZmZuCisKK0BkZWZm biBGdW5jdGlvbiBmaWJlci1uYW1lIGZpYmVyCitUaGUgQGNvZGV7Om5hbWV9IHN0cmluZyBzdXBw bGllZCB0byBAY29kZXttYWtlLWZpYmVyfSwgb3IgQGNvZGV7bmlsfS4KK0BlbmQgZGVmZm4KKwor QGRlZmZuIEZ1bmN0aW9uIGZpYmVyLXRocmVhZCBmaWJlcgorVGhlIEBjb2Rle3NiLXRocmVhZDp0 aHJlYWR9IHRoYXQgY3VycmVudGx5IG93bnMgQHZhcntmaWJlcn0gKHRoZSBvbmx5Cit0aHJlYWQg dGhhdCBtYXkgc3dpdGNoIGludG8gaXQsIHVudGlsIEBjb2Rle2ZpYmVyLW1pZ3JhdGV9IGhhbmRz IGl0IHRvCithbm90aGVyKSwgb3IgQGNvZGV7bmlsfSBpZiBAdmFye2ZpYmVyfSBoYXMgYmVlbiBy ZWxlYXNlZC4gIFVzZWZ1bCBmb3IKK2Fzc2VydGlvbnMgaW4gc2NoZWR1bGVyIGNvZGUuCitAZW5k IGRlZmZuCisKK0BkZWZmbiBGdW5jdGlvbiByZWxlYXNlLWZpYmVyIGZpYmVyCitSZWNsYWltIEB2 YXJ7ZmliZXJ9J3MgcmVzb3VyY2VzLiAgRm9yIGEgd29ya2VyIGZpYmVyLCB1bm1hcHMgaXRzCitz dGFja3MgYW5kIGZyZWVzIHRoZSBib29ra2VlcGluZyBzdHJ1Y3QuICBGb3IgYSBtYWluIGZpYmVy LCBqdXN0IGZyZWVzCit0aGUgc3RydWN0OyB0aGUgdGhyZWFkJ3Mgb3duIHN0YWNrIGFuZCBiaW5k aW5nIHN0YWNrIGFyZSB1bnRvdWNoZWQuCitAdmFye2ZpYmVyfSBtdXN0IG5vdCBiZSBSVU5OSU5H IChvdGhlciB0aGFuIGEgbWFpbiBmaWJlciwgd2hpY2ggaXMKK2Fsd2F5cyBSVU5OSU5HIHVudGls IHJlbGVhc2VkKS4gIE9wdGlvbmFsOiByZWdpc3RlcmVkIGZpYmVycyBhcmUKK3JlbGVhc2VkIGF1 dG9tYXRpY2FsbHkgd2hlbiB0aGVpciBvd25pbmcgdGhyZWFkIGV4aXRzLgorQGVuZCBkZWZmbgor CitAZGVmZm4gTWFjcm8gd2l0aC1maWJlciAodmFyIGZ1bmN0aW9uICZyZXN0IG1ha2UtYXJncykg JmJvZHkgYm9keQorQGNvZGV7bWFrZS1maWJlcn0gKyBAY29kZXt1bndpbmQtcHJvdGVjdH0gKyBA Y29kZXtyZWxlYXNlLWZpYmVyfS4KK0BlbmQgZGVmZm4KKworQGRlZmZuIEZ1bmN0aW9uIHN3aXRj aC1maWJlciBmcm9tIHRvICZyZXN0IHZhbHVlcworU3VzcGVuZCBAdmFye2Zyb219IGFuZCByZXN1 bWUgQHZhcnt0b30sIGRlbGl2ZXJpbmcgQHZhcnt2YWx1ZXN9IGFzCittdWx0aXBsZSB2YWx1ZXMg dG8gdGhlIHJlc3VtZXIuICBSZXR1cm5zIHdoYXRldmVyIHRoZSBuZXh0IHN3aXRjaC1pbgorZGVs aXZlcnMgKG9yIEB2YXJ7dG99J3MgZW50cnkgZnVuY3Rpb24ncyByZXR1cm4gdmFsdWVzIGlmIGl0 IHJhbiB0bworY29tcGxldGlvbiksIGFsc28gYXMgbXVsdGlwbGUgdmFsdWVzLiAgQm90aCBmaWJl cnMgbXVzdCBiZSByZWdpc3RlcmVkCit0byB0aGUgY3VycmVudCB0aHJlYWQ7IEB2YXJ7ZnJvbX0g bXVzdCBiZSBAY29kZXs6cnVubmluZ30gYW5kCitAdmFye3RvfSBtdXN0IGJlIEBjb2RlezpydW5u YWJsZX0gb3IgQGNvZGV7Om5ld30uCisKK1RoZSBzd2l0Y2ggcHJlc2VydmVzIHRoZSByZXN1bWVk IGZpYmVyJ3MgY29udHJvbCBzdGFjaywgYmluZGluZyBzdGFjaywKK0Bjb2RleypoYW5kbGVyLWNs dXN0ZXJzKn0sIEBjb2RleypyZXN0YXJ0LWNsdXN0ZXJzKn0sIGN1cnJlbnQgY2F0Y2gKK2FuZCB1 bndpbmQtcHJvdGVjdCBjaGFpbnMsIGNhbGxlZS1zYXZlZCByZWdpc3RlcnMsIGFuZCAob24geDg2 LTY0KQordGhlIFNTRSBjb250cm9sIHdvcmQuICBAY29kZXsqY3VycmVudC1maWJlcip9IChwZXIt dGhyZWFkKSB0cmFja3MgdGhlCityZXN1bWVkIGZpYmVyLgorCitJZiBAdmFye3RvfSdzIGVudHJ5 IGZ1bmN0aW9uIHByZXZpb3VzbHkgZXNjYXBlZCB2aWEgYW4gdW5oYW5kbGVkCitjb25kaXRpb24s IHRoYXQgY29uZGl0aW9uIGlzIHJlLXNpZ25hbGVkIGhlcmUgaW4gdGhlIGNhbGxlcidzCitjb250 ZXh0LgorQGVuZCBkZWZmbgorCitAZGVmZm4gRnVuY3Rpb24gcmVzdW1lLWZpYmVyIHRvICZyZXN0 IHZhbHVlcworU3VzcGVuZCB0aGUgY3VycmVudCBmaWJlciBhbmQgcmVzdW1lIEB2YXJ7dG99LCBk ZWxpdmVyaW5nIEB2YXJ7dmFsdWVzfQorYXMgbXVsdGlwbGUgdmFsdWVzLiAgRXF1aXZhbGVudCB0 bworQGNvZGV7KHN3aXRjaC1maWJlciAqY3VycmVudC1maWJlciogdG8gLiB2YWx1ZXMpfTsgc3Vw cGxpZWQgYXMgdGhlCitjb21tb24tY2FzZSBzaG9ydGhhbmQgYW5kIHRvIG1ha2UgdGhlIHRyaW8g c3ltbWV0cmljOgorCitAaXRlbWl6ZQorQGl0ZW0gQGNvZGV7eWllbGQtZmliZXJ9ICAtLSBzdXNw ZW5kIHNlbGYsIGRlbGl2ZXIgdG8gdGhlIHJldHVybiBmaWJlci4KK0BpdGVtIEBjb2Rle3Jlc3Vt ZS1maWJlcn0gLS0gc3VzcGVuZCBzZWxmLCBkZWxpdmVyIHRvIGEgY2hvc2VuIGZpYmVyLgorQGl0 ZW0gQGNvZGV7c3dpdGNoLWZpYmVyfSAtLSBleHBsaWNpdCBAY29kZXtmcm9tfS9AY29kZXt0b30g Zm9ybS4KK0BlbmQgaXRlbWl6ZQorCitFcnJvcnMgaWYgQGNvZGV7KmN1cnJlbnQtZmliZXIqfSBp cyB1bmJvdW5kLgorQGVuZCBkZWZmbgorCitAZGVmZm4gRnVuY3Rpb24geWllbGQtZmliZXIgJnJl c3QgdmFsdWVzCitTd2l0Y2ggdG8gdGhlIGN1cnJlbnQgZmliZXIncyByZXR1cm4gZmliZXIsIGRl bGl2ZXJpbmcgQHZhcnt2YWx1ZXN9IGFzCittdWx0aXBsZSB2YWx1ZXMgdG8gdGhlIHJlc3VtZXIn cyBAY29kZXtzd2l0Y2gtZmliZXJ9IHJldHVybi4gIFJldHVybnMKK3doYXRldmVyIHRoZSBuZXh0 IHN3aXRjaC1pbiBkZWxpdmVycywgYWxzbyBhcyBtdWx0aXBsZSB2YWx1ZXMuICBFcnJvcnMKK2lm IHRoZSBjdXJyZW50IGZpYmVyIGhhcyBuZXZlciBiZWVuIHJlc3VtZWQuCitAZW5kIGRlZmZuCisK K0BkZWZmbiBGdW5jdGlvbiBqb2luLWZpYmVyIGZpYmVyCitSZXN1bWUgQHZhcntmaWJlcn0gZnJv bSBAY29kZXsqY3VycmVudC1maWJlcip9IHJlcGVhdGVkbHkgdW50aWwgaXRzCitlbnRyeSBmdW5j dGlvbiByZXR1cm5zOyByZXR1cm4gdGhhdCBmdW5jdGlvbidzIHZhbHVlcyBhcyBtdWx0aXBsZQor dmFsdWVzLiAgUGFyYWxsZWxzIEBjb2Rle3NiLXRocmVhZDpqb2luLXRocmVhZH0gZm9yIGNvb3Bl cmF0aXZlCitjb3JvdXRpbmVzLgorQGVuZCBkZWZmbgorCitAZGVmZm4gRnVuY3Rpb24gaW50ZXJy dXB0LWZpYmVyIGZpYmVyIGNvbmRpdGlvbgorU3RhZ2UgQHZhcntjb25kaXRpb259IHRvIGJlIHNp Z25hbGVkIGluIEB2YXJ7ZmliZXJ9IG9uIGl0cyBuZXh0CityZXN1bWUuICBOb3RoaW5nIGhhcHBl bnMgdW50aWwgQGNvZGV7c3dpdGNoLWZpYmVyfSBkZWxpdmVycyBjb250cm9sCitpbnRvIEB2YXJ7 ZmliZXJ9LCBhdCB3aGljaCBwb2ludCBAdmFye2NvbmRpdGlvbn0gaXMgc2lnbmFsZWQgaW4gdGhl CitmaWJlcidzIG93biBjb250ZXh0IChmb3IgYSBydW5uYWJsZSBmaWJlcikgb3IgcmFpc2VkIGJ5 IHRoZSB0cmFtcG9saW5lCitiZWZvcmUgdGhlIGVudHJ5IGZ1bmN0aW9uIHJ1bnMgKGZvciBhIG5l dyBmaWJlcikuCitAZW5kIGRlZmZuCisKK0BkZWZmbiBGdW5jdGlvbiBmaWJlci1jb25kaXRpb24g ZmliZXIKK1RoZSBjb25kaXRpb24gKGlmIGFueSkgc3RhZ2VkIGZvciBAdmFye2ZpYmVyfSdzIG5l eHQgcmVzdW1lLCBvcgorQGNvZGV7bmlsfS4gIENsZWFyZWQgd2hlbiBjb25zdW1lZCBieSBAY29k ZXtzd2l0Y2gtZmliZXJ9LgorQGVuZCBkZWZmbgorCitAZGVmZm4gTWFjcm8gd2l0aC1maWJlci1w aW5uZWQgKCkgJmJvZHkgYm9keQorTWFyayB0aGUgY3VycmVudCBmaWJlciB1bnN1c3BlbmRhYmxl IGZvciB0aGUgZHluYW1pYyBleHRlbnQgb2YKK0B2YXJ7Ym9keX07IEBjb2Rle3N3aXRjaC1maWJl cn0gc2lnbmFscyBhbiBlcnJvciBpZiBpbnZva2VkIHdpdGggYQorcGlubmVkIEBjb2Rle2Zyb219 LiAgUGlucyBuZXN0LiAgSW50ZW5kZWQgZm9yIEZGSTogd3JhcCBhbnkgcmVnaW9uCitjb250YWlu aW5nIGxpdmUgZm9yZWlnbiBmcmFtZXMgc28gYSB5aWVsZCBjYW4ndCBsZWF2ZSB0aGVtIGF0b3Ag YQorcmUtZW50ZXJlZCBzdGFjay4KK0BlbmQgZGVmZm4KKworQGRlZmZuIEZ1bmN0aW9uIGZpYmVy LXBpbm5lZC1wIGZpYmVyCitAY29kZXt0fSBpZiBAdmFye2ZpYmVyfSBoYXMgYSBub256ZXJvIHBp biBjb3VudC4KK0BlbmQgZGVmZm4KKworQGRlZmZuIEZ1bmN0aW9uIGZpYmVyLWFsaXZlLXAgZmli ZXIKK0Bjb2Rle3R9IGlmIEB2YXJ7ZmliZXJ9J3Mgc3RhdGUgaXMgbm90IEBjb2RlezpkZWFkfSAo aS5lLiBpdCBoYXMgbm90CitydW4gdG8gY29tcGxldGlvbiBvciBiZWVuIHJlbGVhc2VkKS4KK0Bl bmQgZGVmZm4KKworQGRlZmZuIEZ1bmN0aW9uIGZpYmVyLW1haW4tcCBmaWJlcgorQGNvZGV7dH0g aWYgQHZhcntmaWJlcn0gcmVwcmVzZW50cyBhIHRocmVhZCdzIG93biBzdGFjayAoY3JlYXRlZCBi eQorQGNvZGV7bWFrZS1tYWluLWZpYmVyfSBvciBAY29kZXt3aXRoLWZpYmVyLXRocmVhZH0pLCBA Y29kZXtuaWx9IGlmIGl0CitpcyBhIHdvcmtlciBmaWJlciBjcmVhdGVkIGJ5IEBjb2Rle21ha2Ut ZmliZXJ9LgorQGVuZCBkZWZmbgorCitAZGVmZm4gRnVuY3Rpb24gZmliZXItc3RhdGUgZmliZXIK K0tleXdvcmQgc3RhdGU6IEBjb2RlezpuZXd9LCBAY29kZXs6cnVubmFibGV9LCBAY29kZXs6cnVu bmluZ30sIG9yCitAY29kZXs6ZGVhZH0uCitAZW5kIGRlZmZuCisKK0BkZWZmbiBGdW5jdGlvbiBm aWJlci1taWdyYXRlIGZpYmVyIGRlc3QtdGhyZWFkCitBdG9taWNhbGx5IHRyYW5zZmVyIG93bmVy c2hpcCBvZiBAdmFye2ZpYmVyfSBmcm9tIGl0cyBjdXJyZW50IG93bmVyCit0aHJlYWQgdG8gQHZh cntkZXN0LXRocmVhZH07IGFmdGVyd2FyZHMgb25seSBAdmFye2Rlc3QtdGhyZWFkfSBtYXkKK3N3 aXRjaCBpbnRvIGl0LiAgQHZhcntmaWJlcn0gbXVzdCBiZSBAY29kZXs6cnVubmFibGV9IChzaWdu YWxzCitAY29kZXtmaWJlci1zdGF0ZS1lcnJvcn0gb3RoZXJ3aXNlKSBhbmQgQHZhcntkZXN0LXRo cmVhZH0gbXVzdCBiZQorbGl2ZS4gIFJldHVybnMgQHZhcntmaWJlcn0uCitAZW5kIGRlZmZuCisK K0BzdWJzZWN0aW9uIENvbmRpdGlvbnMKKworQWxsIHNiLWZpYmVyIHByZWNvbmRpdGlvbiBlcnJv cnMgaW5oZXJpdCBmcm9tIEBjb2Rle2ZpYmVyLWVycm9yfS4KK1NjaGVkdWxlcnMgY2FuIEBjb2Rl e2hhbmRsZXItY2FzZX0gb24gdGhlIGJhc2UgY2xhc3MgdG8gY2F0Y2ggdGhlbQordW5pZm9ybWx5 LCBvciBvbiBhIHN1YmNsYXNzIGZvciB0YXJnZXRlZCByZWNvdmVyeS4KKworQGRlZmZuIENvbmRp dGlvbiBmaWJlci1lcnJvcgorQmFzZSBjbGFzczsgb25lIGluaXRhcmcvcmVhZGVyOiBAY29kZXs6 ZmliZXJ9IC8gQGNvZGV7ZmliZXItZXJyb3ItZmliZXJ9LgorQGVuZCBkZWZmbgorCitAZGVmZm4g Q29uZGl0aW9uIGRlYWQtZmliZXItZXJyb3IKK1NpZ25hbGVkIHdoZW4gQGNvZGV7c3dpdGNoLWZp YmVyfSBvciBAY29kZXtpbnRlcnJ1cHQtZmliZXJ9IHRvdWNoZXMgYQorZmliZXIgdGhhdCBoYXMg YmVlbiByZWxlYXNlZCBvciBoYXMgcnVuIHRvIGNvbXBsZXRpb24uCitAZW5kIGRlZmZuCisKK0Bk ZWZmbiBDb25kaXRpb24gcGlubmVkLWZpYmVyLWVycm9yCitTaWduYWxlZCB3aGVuIEBjb2Rle3N3 aXRjaC1maWJlcn0gd291bGQgc3VzcGVuZCBhIGZpYmVyIHdob3NlIHBpbgorY291bnQgaXMgbm9u emVyby4gIFJlYWRlciBAY29kZXtwaW5uZWQtZmliZXItZXJyb3ItZGVwdGh9IHJldHVybnMgdGhl CitwaW4gY291bnQuICBGRkktYXdhcmUgc2NoZWR1bGVycyBjYW4gY2F0Y2ggdGhpcyBhbmQgcmV0 cnkgb25jZSB0aGVpcgorZm9yZWlnbiByZWdpb24gZXhpdHMuCitAZW5kIGRlZmZuCisKK0BkZWZm biBDb25kaXRpb24gZmliZXItdGhyZWFkLW1pc21hdGNoLWVycm9yCitTaWduYWxlZCB3aGVuIGEg c3dpdGNoIHJlZmVyZW5jZXMgYSBmaWJlciBvd25lZCBieSBhIGRpZmZlcmVudCBPUwordGhyZWFk LiAgUmVhZGVyIEBjb2Rle2ZpYmVyLXRocmVhZC1taXNtYXRjaC1lcnJvci1yb2xlfSByZXR1cm5z CitAY29kZXs6ZnJvbX0gb3IgQGNvZGV7OnRvfS4KK0BlbmQgZGVmZm4KKworQGRlZmZuIENvbmRp dGlvbiBmaWJlci1zdGF0ZS1lcnJvcgorU2lnbmFsZWQgd2hlbiBhIGZpYmVyIGlzIG5vdCBpbiBh biBhY2NlcHRhYmxlIHN0YXRlIGZvciB0aGUgcmVxdWVzdGVkCitvcGVyYXRpb24uICBSZWFkZXJz OiBAY29kZXtmaWJlci1zdGF0ZS1lcnJvci1zdGF0ZX0gKHRoZSBhY3R1YWwKK2tleXdvcmQpLCBA Y29kZXtmaWJlci1zdGF0ZS1lcnJvci1leHBlY3RlZH0gKGEgbGlzdCBvZiBhY2NlcHRlZAorc3Rh dGVzKS4KK0BlbmQgZGVmZm4KKworQGRlZmZuIENvbmRpdGlvbiBuby1jdXJyZW50LWZpYmVyLWVy cm9yCitTaWduYWxlZCB3aGVuIGFuIG9wZXJhdGlvbiB0aGF0IHJlcXVpcmVzIGEgY3VycmVudCBm aWJlcgorKEBjb2Rle21ha2UtZmliZXJ9LCBAY29kZXtyZXN1bWUtZmliZXJ9LCBAY29kZXt5aWVs ZC1maWJlcn0sCitAY29kZXt3aXRoLWZpYmVyLXBpbm5lZH0pIHJ1bnMgb24gYSB0aHJlYWQgd2l0 aCBubyBmaWJlciBib3VuZCBpbgorQGNvZGV7KmN1cnJlbnQtZmliZXIqfS4gIEVzdGFibGlzaCBv bmUgd2l0aCBAY29kZXttYWtlLW1haW4tZmliZXJ9IG9yCitAY29kZXt3aXRoLWZpYmVyLXRocmVh ZH0uICBSZWFkZXIKK0Bjb2Rle25vLWN1cnJlbnQtZmliZXItZXJyb3Itb3BlcmF0aW9ufSByZXR1 cm5zIHRoZSBvcGVyYXRvciB0aGF0CitzaWduYWxlZCwgb3IgQGNvZGV7bmlsfS4gIENhcnJpZXMg bm8gZmliZXIuCitAZW5kIGRlZmZuCisKK0BzdWJzZWN0aW9uIEV4YW1wbGUKKworQGxpc3AKKyhy ZXF1aXJlIDpzYi1maWJlcikKKyh1c2UtcGFja2FnZSA6c2ItZmliZXIpCisKKyh3aXRoLWZpYmVy LXRocmVhZCAoKQorICAobGV0ICgoY2hpbGQgKG1ha2UtZmliZXIKKyAgICAgICAgICAgICAgICAo bGFtYmRhICgpCisgICAgICAgICAgICAgICAgICAoZm9ybWF0IHQgImhlbGxvIGZyb20gY2hpbGR+ JSIpCisgICAgICAgICAgICAgICAgICAoeWllbGQtZmliZXIpCisgICAgICAgICAgICAgICAgICAo Zm9ybWF0IHQgImJhY2sgYWdhaW5+JSIpKSkpKQorICAgIChyZXN1bWUtZmliZXIgY2hpbGQpCisg ICAgKGZvcm1hdCB0ICJtYWluIHJlc3VtZWR+JSIpCisgICAgKHJlc3VtZS1maWJlciBjaGlsZCkp KQorQGVuZCBsaXNwCisKK1ByaW50cyBAY29kZXtoZWxsbyBmcm9tIGNoaWxkfSwgQGNvZGV7bWFp biByZXN1bWVkfSwgQGNvZGV7YmFjayBhZ2Fpbn0uCisKK0EgcmVhbGlzdGljIHNjaGVkdWxlciBs YXllcnMgbm9uLWJsb2NraW5nIEkvTyBvbiB0b3A6IHdoZW4gYSBmaWJlcgord291bGQgYmxvY2sg b24gYW4gZmQsIGl0IHJlZ2lzdGVycyB3aXRoCitAY29kZXtwb2xsfS9AY29kZXtlcG9sbH0vQGNv ZGV7a3F1ZXVlfSBhbmQgeWllbGRzOyB0aGUgc2NoZWR1bGVyJ3MKK3BvbGwgbG9vcCB3YWtlcyBp dCB3aGVuIHJlYWR5LgorCitAc3Vic2VjdGlvbiBGdXJ0aGVyIE5vdGVzCisKK0BpdGVtaXplCitA aXRlbSBAc3Ryb25ne1BsYXRmb3Jtcy59ICB4ODYtNjQgYW5kIGFybTY0IFBPU0lYIG9ubHkuCitA aXRlbSBAc3Ryb25ne05vIHByZWVtcHRpb24ufSAgVGlnaHQgY29tcHV0ZSBsb29wcyBzdGFydmUg dGhlIHNjaGVkdWxlci4KK0BpdGVtIEBzdHJvbmd7SGFuZGxlciBpc29sYXRpb24ufSAgQSBmaWJl cidzIGVudHJ5IGZ1bmN0aW9uIHJ1bnMgd2l0aAorZnJlc2ggQGNvZGV7KmhhbmRsZXItY2x1c3Rl cnMqfSAvIEBjb2RleypyZXN0YXJ0LWNsdXN0ZXJzKn0uCitAaXRlbSBAc3Ryb25ne0ltYWdlIHN1 cnZpdmFsLn0gIEZpYmVycyBkbyBub3Qgc3Vydml2ZQorQGNvZGV7c2F2ZS1saXNwLWFuZC1kaWV9 OyBkcm9wIHdyYXBwZXIgcmVmZXJlbmNlcyBiZWZvcmUgc2F2aW5nLgorQGl0ZW0gQHN0cm9uZ3tH YXJiYWdlIGNvbGxlY3Rpb24ufSAgQSBzdXNwZW5kZWQgZmliZXIncyBDIGNvbnRyb2wgc3RhY2sK K2lzIHNjYW5uZWQgY29uc2VydmF0aXZlbHkgZXZlbiBvbiB0aGUgb3RoZXJ3aXNlLXByZWNpc2Ug YXJtNjQgYmFja2VuZC4KK0BlbmQgaXRlbWl6ZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9zYi1maWJl ci94ODYtNjQtdm9wcy5saXNwIGIvY29udHJpYi9zYi1maWJlci94ODYtNjQtdm9wcy5saXNwCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uZDg4OWQzN2M4Ci0tLSAvZGV2L251 bGwKKysrIGIvY29udHJpYi9zYi1maWJlci94ODYtNjQtdm9wcy5saXNwCkBAIC0wLDAgKzEsMzEg QEAKKzs7OzsgSW5saW5lIHJlZ2lzdGVyL1NQL01YQ1NSIHN3YXAgZm9yIFNXSVRDSC1GSUJFUgor CisoaW4tcGFja2FnZSAiU0ItVk0iKQorCisoc2ItYzpkZWZrbm93biBzYi1maWJlcjo6JXN3YXAt cmVncworICAgIChzeXN0ZW0tYXJlYS1wb2ludGVyIHN5c3RlbS1hcmVhLXBvaW50ZXIpICh2YWx1 ZXMpCisgICAgKHNiLWM6YWx3YXlzLXRyYW5zbGF0YWJsZSkpCisKKyhkZWZpbmUtdm9wIChmaWJl ci1zd2FwLXJlZ3MpCisgICg6dHJhbnNsYXRlIHNiLWZpYmVyOjolc3dhcC1yZWdzKQorICAoOnBv bGljeSA6ZmFzdC1zYWZlKQorICAoOmFyZ3MgKGZyb20gOnNjcyAoc2FwLXJlZykgOnRhcmdldCBm cm9tLXRtcCkKKyAgICAgICAgICh0byAgIDpzY3MgKHNhcC1yZWcpIDp0YXJnZXQgdG8tdG1wKSkK KyAgKDphcmctdHlwZXMgc3lzdGVtLWFyZWEtcG9pbnRlciBzeXN0ZW0tYXJlYS1wb2ludGVyKQor ICAoOnRlbXBvcmFyeSAoOnNjIHNhcC1yZWcgOm9mZnNldCByYXgtb2Zmc2V0CisgICAgICAgICAg ICAgICA6ZnJvbSAoOmFyZ3VtZW50IDApIDp0byAoOnJlc3VsdCAwKSkKKyAgICAgICAgICAgICAg ZnJvbS10bXApCisgICg6dGVtcG9yYXJ5ICg6c2Mgc2FwLXJlZyA6b2Zmc2V0IHJjeC1vZmZzZXQK KyAgICAgICAgICAgICAgIDpmcm9tICg6YXJndW1lbnQgMSkgOnRvICg6cmVzdWx0IDApKQorICAg ICAgICAgICAgICB0by10bXApCisgICg6dGVtcG9yYXJ5ICg6c2MgdW5zaWduZWQtcmVnIDpvZmZz ZXQgcmR4LW9mZnNldCkgdGVtcCkKKyAgKDpnZW5lcmF0b3IgMTAKKyAgICAobW92ZSBmcm9tLXRt cCBmcm9tKQorICAgIChtb3ZlIHRvLXRtcCB0bykKKyAgICAoaW5zdCBsZWEgdGVtcCAocmlwLXJl bGF0aXZlLWVhIFJFU1VNRSkpCisgICAgKGluc3QgcHVzaCB0ZW1wKQorICAgIChlbWl0LXNhdmUt ZmliZXItcmVncyBmcm9tLXRtcCkKKyAgICAoZW1pdC1yZXN0b3JlLWZpYmVyLXJlZ3MgdG8tdG1w KQorICAgIChpbnN0IHJldCkKKyAgICBSRVNVTUUKKyAgICAoZW1pdC1lbmQtcHNldWRvLWF0b21p YykpKQpkaWZmIC0tZ2l0IGEvbWFrZS10YXJnZXQtMi1sb2FkLmxpc3AgYi9tYWtlLXRhcmdldC0y LWxvYWQubGlzcAppbmRleCAzNmM0ZGUzZGMuLmJjODk4YzU3ZSAxMDA2NDQKLS0tIGEvbWFrZS10 YXJnZXQtMi1sb2FkLmxpc3AKKysrIGIvbWFrZS10YXJnZXQtMi1sb2FkLmxpc3AKQEAgLTg3LDcg Kzg3LDcgQEAKICAgICAgICAgICAgOzsgdGhvdWdoIEkgZG9uJ3QgdGhpbmsgdGhleSBzaG91bGQg YWxsIGJlIHB1YmxpYy4KICAgICAgICAgICAgOk1TQU4gOlVCU0FOCiAgICAgICAgICAgIDpTQi1T QUZFUE9JTlQKLSAgICAgICAgICAgOlNCLVRIUkVBRCA6U0ItVU5JQ09ERQorICAgICAgICAgICA6 U0ItVEhSRUFEIDpTQi1VTklDT0RFIDpTQi1GSUJFUgogICAgICAgICAgICA7OyBUaGluZ3Mgd2hp Y2ggKEkgdGhpbmspIGF0IGxlYXN0IG9uZSBwZXJzb24gaGFzIHJlcXVlc3RlZCBiZSBrZXB0IGFy b3VuZAogICAgICAgICAgICA6U0ItTERCCiAgICAgICAgICAgIDs7IFdlIGtlZXAgdGhlIDpTQi1Q QUNLQUdFLUxPQ0tTIGZlYXR1cmUgZGVzcGl0ZSBpdCBubyBsb25nZXIKQEAgLTQ0Miw2ICs0NDIs OSBAQCBQbGVhc2UgY2hlY2sgdGhhdCBhbGwgc3RyaW5ncyB3aGljaCB3ZXJlIG5vdCByZWNvZ25p emFibGUgdG8gdGhlIGNvbXBpbGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsgbmVl ZCB0aGlzIGZvciBkZWZpbmluZyBhIHZvcCB3aGljaAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDs7IHRlc3RzIHRoZSB4ODYtNjQgYWxsb2NhdGlvbiBwcm9maWxlcgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNiLXZtOjpwc2V1ZG8tYXRvbWljCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLEAob3IgIysoYW5kIHNiLWZpYmVyIChvciB4ODYtNjQgYXJtNjQpKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICcoc2Itdm06OmVtaXQtc2F2ZS1maWJlci1yZWdz CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYi12bTo6ZW1pdC1yZXN0b3Jl LWZpYmVyLXJlZ3MpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICxAKG9yICMrKG9yIGFy bTY0IHg4NiB4ODYtNjQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyhzYi12 bTo6JXZlY3Rvci1jYXMtcGFpcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2Itdm06OiVpbnN0YW5jZS1jYXMtcGFpcgpkaWZmIC0tZ2l0IGEvc3JjL2Fzc2VtYmx5L2FybTY0 L3RyYW1wcy5saXNwIGIvc3JjL2Fzc2VtYmx5L2FybTY0L3RyYW1wcy5saXNwCmluZGV4IDQ0ZTlm YzVmNS4uNjM5MGJmNmZhIDEwMDY0NAotLS0gYS9zcmMvYXNzZW1ibHkvYXJtNjQvdHJhbXBzLmxp c3AKKysrIGIvc3JjL2Fzc2VtYmx5L2FybTY0L3RyYW1wcy5saXNwCkBAIC0yMDQsMyArMjA0LDIz IEBACiAgIChsb2FkdyBsci10biBsZXhlbnYtdG4gY2xvc3VyZS1mdW4tc2xvdCBmdW4tcG9pbnRl ci1sb3d0YWcpCiAgIChpbnN0IGFkZCBsci10biBsci10biA0KQogICAoaW5zdCBiciBsci10bikp CisKKyMrc2ItZmliZXIKKyhwcm9nbgorCisoZGVmaW5lLWFzc2VtYmx5LXJvdXRpbmUgKGZpYmVy LXN3YXAtcmVncyAoOnJldHVybi1zdHlsZSA6bm9uZSkpCisgICAgKCg6dGVtcCBubDAgdW5zaWdu ZWQtcmVnIG5sMC1vZmZzZXQpCisgICAgICg6dGVtcCBubDEgdW5zaWduZWQtcmVnIG5sMS1vZmZz ZXQpCisgICAgICg6dGVtcCBubDIgdW5zaWduZWQtcmVnIG5sMi1vZmZzZXQpKQorICAoZW1pdC1z YXZlLWZpYmVyLXJlZ3MgbmwwIG5sMikKKyAgKGVtaXQtcmVzdG9yZS1maWJlci1yZWdzIG5sMSBu bDIpCisgIChpbnN0IHJldCkpCisKKyhkZWZpbmUtYXNzZW1ibHktcm91dGluZSAoZmliZXItdHJh bXAgKDpyZXR1cm4tc3R5bGUgOm5vbmUpKQorICAgICgoOnRlbXAgYXJnIHVuc2lnbmVkLXJlZyBu bDAtb2Zmc2V0KSkKKyAgKGxldCAoKHI5LXRuIChtYWtlLXJhbmRvbS10biAoc2Mtb3ItbG9zZSAn dW5zaWduZWQtcmVnKSByOS1vZmZzZXQpKSkgOyByOSA9PSB4MTkKKyAgICAoaW5zdCBtb3YgYXJn IHI5LXRuKSkKKyAgKGluc3QgYmwgKG1ha2UtZml4dXAgImZpYmVyX3RyYW1wX2MiIDpmb3JlaWdu KSkKKyAgKGluc3QgYnJrIDApKQorCispIDsgZW5kICMrc2ItZmliZXIKZGlmZiAtLWdpdCBhL3Ny Yy9hc3NlbWJseS94ODYtNjQvdHJhbXBzLmxpc3AgYi9zcmMvYXNzZW1ibHkveDg2LTY0L3RyYW1w cy5saXNwCmluZGV4IDk3MDNlYzEzMC4uNTYxNTY0NDQ2IDEwMDY0NAotLS0gYS9zcmMvYXNzZW1i bHkveDg2LTY0L3RyYW1wcy5saXNwCisrKyBiL3NyYy9hc3NlbWJseS94ODYtNjQvdHJhbXBzLmxp c3AKQEAgLTMxNCwzICszMTQsMjAgQEAKICAgdW5jb250ZW5kZWQKICAgKGluc3QgcG9wIHJheC10 bikpCiApIDsgZW5kIFBST0dOCisKKyMrc2ItZmliZXIKKyhwcm9nbgorKGRlZmluZS1hc3NlbWJs eS1yb3V0aW5lIChmaWJlci1zd2FwLXJlZ3MgKDpyZXR1cm4tc3R5bGUgOm5vbmUpKQorICAgICgo OnRlbXAgcmRpIHVuc2lnbmVkLXJlZyByZGktb2Zmc2V0KQorICAgICAoOnRlbXAgcnNpIHVuc2ln bmVkLXJlZyByc2ktb2Zmc2V0KSkKKyAgKGVtaXQtc2F2ZS1maWJlci1yZWdzIHJkaSkKKyAgKGVt aXQtcmVzdG9yZS1maWJlci1yZWdzIHJzaSkKKyAgKGluc3QgcmV0KSkKKworKGRlZmluZS1hc3Nl bWJseS1yb3V0aW5lIChmaWJlci10cmFtcCAoOnJldHVybi1zdHlsZSA6bm9uZSkpCisgICAgKCg6 dGVtcCByZGkgdW5zaWduZWQtcmVnIHJkaS1vZmZzZXQpCisgICAgICg6dGVtcCByMTIgdW5zaWdu ZWQtcmVnIHIxMi1vZmZzZXQpKQorICAoaW5zdCBtb3YgcmRpIHIxMikKKyAgKGluc3QgY2FsbCAo bWFrZS1maXh1cCAiZmliZXJfdHJhbXBfYyIgOmZvcmVpZ24pKQorICAoaW5zdCB1ZDIpKQorKSA7 IGVuZCAjK3NiLWZpYmVyCmRpZmYgLS1naXQgYS9zcmMvY29sZC9iYXNlLXRhcmdldC1mZWF0dXJl cy5saXNwLWV4cHIgYi9zcmMvY29sZC9iYXNlLXRhcmdldC1mZWF0dXJlcy5saXNwLWV4cHIKaW5k ZXggZWQxZGUzZmQyLi41NDQ0ZmE2MWMgMTAwNjQ0Ci0tLSBhL3NyYy9jb2xkL2Jhc2UtdGFyZ2V0 LWZlYXR1cmVzLmxpc3AtZXhwcgorKysgYi9zcmMvY29sZC9iYXNlLXRhcmdldC1mZWF0dXJlcy5s aXNwLWV4cHIKQEAgLTE4Myw2ICsxODMsOSBAQAogIDs7IHg4Nm9pZCBEYXJ3aW4sIEZyZWVCU0Qs IGFuZCBTb2xhcmlzLgogIDsgOnNiLXRocmVhZAogCisgOzsgbG93LWxldmVsIGZpYmVyIHByaW1p dGl2ZXMgc3VwcG9ydAorIDsgOnNiLWZpYmVyCisKICA7OyBmdXRleCBzdXBwb3J0CiAgOzsKICA7 OyBXaGlsZSBvbiBsaW51eCB3ZSBhcmUgYWJsZSB0byB1c2UgZnV0ZXhlcyBmb3Igb3VyIGxvY2tp bmcKZGlmZiAtLWdpdCBhL3NyYy9jb2xkL3NoYXJlZC5saXNwIGIvc3JjL2NvbGQvc2hhcmVkLmxp c3AKaW5kZXggZGY1N2E2ZmVkLi40YmViYWFhMjYgMTAwNjQ0Ci0tLSBhL3NyYy9jb2xkL3NoYXJl ZC5saXNwCisrKyBiL3NyYy9jb2xkL3NoYXJlZC5saXNwCkBAIC0zODksNiArMzg5LDEyIEBACiAg ICAgICAgICAgIjpHRU5DR0MgYW5kIDpDSEVORVlHQyBhcmUgaW5jb21wYXRpYmxlIikKICAgICAg ICAgICgiKGFuZCBzYi1zYWZlcG9pbnQgKG5vdCAoYW5kIChvciBhcm02NCB4ODYgeDg2LTY0KSAo b3IgZGFyd2luIGxpbnV4IHdpbjMyKSkpKSIKICAgICAgICAgICAiOlNCLVNBRkVQT0lOVCBub3Qg c3VwcG9ydGVkIG9uIHNlbGVjdGVkIGFyY2gvT1MiKQorICAgICAgICAgKCIoYW5kIHNiLWZpYmVy IHNiLXNhZmVwb2ludCkiCisgICAgICAgICAgIjpTQi1GSUJFUiBhbmQgOlNCLVNBRkVQT0lOVCBh cmUgaW5jb21wYXRpYmxlIikKKyAgICAgICAgICgiKGFuZCBzYi1maWJlciAobm90IChvciB4ODYt NjQgYXJtNjQpKSkiCisgICAgICAgICAgIjpTQi1GSUJFUiByZXF1aXJlcyA6WDg2LTY0IG9yIDpB Uk02NCIpCisgICAgICAgICAoIihhbmQgc2ItZmliZXIgd2luMzIpIgorICAgICAgICAgICI6U0It RklCRVIgaXMgbm90IHN1cHBvcnRlZCBvbiA6V0lOMzIiKQogICAgICAgICAgKCIobm90IChvciBl bGYgbWFjaC1vIHdpbjMyKSkiCiAgICAgICAgICAgIk5vIGV4ZWN1dGUgb2JqZWN0IGZpbGUgZm9y bWF0IGZlYXR1cmUgZGVmaW5lZCIpCiAgICAgICAgICAoIihhbmQgY29ucy1wcm9maWxpbmcgKG5v dCBzYi10aHJlYWQpKSIgIjpDT05TLVBST0ZJTElORyByZXF1aXJlcyA6U0ItVEhSRUFEIikKZGlm ZiAtLWdpdCBhL3NyYy9jb21waWxlci9hcm02NC9tYWNyb3MubGlzcCBiL3NyYy9jb21waWxlci9h cm02NC9tYWNyb3MubGlzcAppbmRleCBhYzdlOTgwMjIuLmI4YTI2YTMzZiAxMDA2NDQKLS0tIGEv c3JjL2NvbXBpbGVyL2FybTY0L21hY3Jvcy5saXNwCisrKyBiL3NyYy9jb21waWxlci9hcm02NC9t YWNyb3MubGlzcApAQCAtNjA5LDMgKzYwOSwzOCBAQAogICAgICAgICAoc2V0ZiBwcmV2LWNvbnN0 YW50IG5pbCkKICAgICAgICAgKGxvYWQtc3RhY2stdG4gLHRlbXAgLHRuKQogICAgICAgICAsdGVt cCkpKSkKKworIytzYi1maWJlcgorKGZsZXQgKCh1IChvZmZzZXQpIChtYWtlLXJhbmRvbS10biAo c2Mtb3ItbG9zZSAndW5zaWduZWQtcmVnKSBvZmZzZXQpKQorICAgICAgIChhIChvZmZzZXQpICht YWtlLXJhbmRvbS10biAoc2Mtb3ItbG9zZSAnYW55LXJlZykgb2Zmc2V0KSkKKyAgICAgICAoZCAo b2Zmc2V0KSAobWFrZS1yYW5kb20tdG4gKHNjLW9yLWxvc2UgJ2RvdWJsZS1yZWcpIG9mZnNldCkp KQorOzs7IFNhdmUgYW5kIHJlc3RvcmUgYSBmaWJlcidzIGNhbGxlZS1zYXZlZCBHUC9GUCByZWdp c3RlciBzdGF0ZS4KKzs7OyBPZmZzZXRzIG1hdGNoIGBzYl9maWJlcl9yZWdzYCBzdHJ1Y3QuCiso ZGVmdW4gZW1pdC1zYXZlLWZpYmVyLXJlZ3MgKGJhc2UgdG1wKQorICAoaW5zdCBtb3Ytc3AgdG1w IG5zcC10bikKKyAgKGluc3Qgc3RyIHRtcCAoQCBiYXNlICN4MDApKQorICAoaW5zdCBzdHAgY2Zw LXRuICAgICAgICBsci10biAgICAgICAgICAoQCBiYXNlICN4MDgpKSAgIDsgeDI5IHgzMAorICAo aW5zdCBzdHAgKHUgcjktb2Zmc2V0KSAodSByMTAtb2Zmc2V0KSAoQCBiYXNlICN4MTgpKSAgIDsg eDE5IHgyMAorICAoaW5zdCBzdHAgdGhyZWFkLXRuICAgICBsZXhlbnYtdG4gICAgICAoQCBiYXNl ICN4MjgpKSAgIDsgeDIxIHgyMgorICAoaW5zdCBzdHAgbmFyZ3MtdG4gICAgICAoYSBuZnAtb2Zm c2V0KSAoQCBiYXNlICN4MzgpKSAgIDsgeDIzIHgyNAorICAoaW5zdCBzdHAgb2NmcC10biAgICAg ICBudWxsLXRuICAgICAgICAoQCBiYXNlICN4NDgpKSAgIDsgeDI1IHgyNgorICAoaW5zdCBzdHAg Y3NwLXRuICAgICAgICBjYXJkdGFibGUtdG4gICAoQCBiYXNlICN4NTgpKSAgIDsgeDI3IHgyOAor ICAoaW5zdCBzdHAgKGQgIDgpICAgICAgICAoZCAgOSkgICAgICAgICAoQCBiYXNlICN4NjgpKQor ICAoaW5zdCBzdHAgKGQgMTApICAgICAgICAoZCAxMSkgICAgICAgICAoQCBiYXNlICN4NzgpKQor ICAoaW5zdCBzdHAgKGQgMTIpICAgICAgICAoZCAxMykgICAgICAgICAoQCBiYXNlICN4ODgpKQor ICAoaW5zdCBzdHAgKGQgMTQpICAgICAgICAoZCAxNSkgICAgICAgICAoQCBiYXNlICN4OTgpKSkK KworKGRlZnVuIGVtaXQtcmVzdG9yZS1maWJlci1yZWdzIChiYXNlIHRtcCkKKyAgKGluc3QgbGRy IHRtcCAoQCBiYXNlICN4MDApKQorICAoaW5zdCBtb3Ytc3AgbnNwLXRuIHRtcCkKKyAgKGluc3Qg bGRwIGNmcC10biAgICAgICAgbHItdG4gICAgICAgICAgKEAgYmFzZSAjeDA4KSkgICA7IHgyOSB4 MzAKKyAgKGluc3QgbGRwICh1IHI5LW9mZnNldCkgKHUgcjEwLW9mZnNldCkgKEAgYmFzZSAjeDE4 KSkgICA7IHgxOSB4MjAKKyAgKGluc3QgbGRwIHRocmVhZC10biAgICAgbGV4ZW52LXRuICAgICAg KEAgYmFzZSAjeDI4KSkgICA7IHgyMSB4MjIKKyAgKGluc3QgbGRwIG5hcmdzLXRuICAgICAgKGEg bmZwLW9mZnNldCkgKEAgYmFzZSAjeDM4KSkgICA7IHgyMyB4MjQKKyAgKGluc3QgbGRwIG9jZnAt dG4gICAgICAgbnVsbC10biAgICAgICAgKEAgYmFzZSAjeDQ4KSkgICA7IHgyNSB4MjYKKyAgKGlu c3QgbGRwIGNzcC10biAgICAgICAgY2FyZHRhYmxlLXRuICAgKEAgYmFzZSAjeDU4KSkgICA7IHgy NyB4MjgKKyAgKGluc3QgbGRwIChkICA4KSAgICAgICAgKGQgIDkpICAgICAgICAgKEAgYmFzZSAj eDY4KSkKKyAgKGluc3QgbGRwIChkIDEwKSAgICAgICAgKGQgMTEpICAgICAgICAgKEAgYmFzZSAj eDc4KSkKKyAgKGluc3QgbGRwIChkIDEyKSAgICAgICAgKGQgMTMpICAgICAgICAgKEAgYmFzZSAj eDg4KSkKKyAgKGluc3QgbGRwIChkIDE0KSAgICAgICAgKGQgMTUpICAgICAgICAgKEAgYmFzZSAj eDk4KSkpCispCmRpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvYXJtNjQvcGFybXMubGlzcCBiL3Ny Yy9jb21waWxlci9hcm02NC9wYXJtcy5saXNwCmluZGV4IDNlODUxODkwMy4uYmM0ZmQ2ZGNlIDEw MDY0NAotLS0gYS9zcmMvY29tcGlsZXIvYXJtNjQvcGFybXMubGlzcAorKysgYi9zcmMvY29tcGls ZXIvYXJtNjQvcGFybXMubGlzcApAQCAtMTEyLDEzICsxMTIsMjEgQEAKIDs7OyBzcGFjZSBkaXJl Y3RseSBhZnRlciB0aGUgc3RhdGljIHN5bWJvbHMuICBUaGF0IHdheSwgdGhlIHJhdy1hZGRyCiA7 OzsgY2FuIGJlIGxvYWRlZCBkaXJlY3RseSBvdXQgb2YgdGhlbSBieSBpbmRpcmVjdGluZyByZWxh dGl2ZSB0byBOSUwuCiA7OzsKKzs7OyBMaXNwIGFzc2VtYmx5IHJvdXRpbmVzIHdob3NlIGVudHJ5 IGFkZHJlc3NlcyBuZWVkIHRvIGJlCis7OzsgZGlzY292ZXJhYmxlIGZyb20gQyAoZmliZXJfdHJh bXBfYywgc2JfZmliZXJfcHJlcGFyZSkuCisoZXZhbC13aGVuICg6Y29tcGlsZS10b3BsZXZlbCA6 bG9hZC10b3BsZXZlbCA6ZXhlY3V0ZSkKKyAgKGRlZnBhcmFtZXRlciAqcnVudGltZS1hc20tcm91 dGluZXMqCisgICAgJygjK3NiLWZpYmVyIGZpYmVyLXN3YXAtcmVncworICAgICAgIytzYi1maWJl ciBmaWJlci10cmFtcCkpKQorCiAoZGVmY29uc3RhbnQtZXF4ICtzdGF0aWMtc3ltYm9scysKICBg IygjLXNiLXRocmVhZAogICAgICxAJygqYmluZGluZy1zdGFjay1wb2ludGVyKgogICAgICAgICAq cHNldWRvLWF0b21pYy1hdG9taWMqCiAgICAgICAgICpwc2V1ZG8tYXRvbWljLWludGVycnVwdGVk KikKICAgICAgOzsgaW50ZXJydXB0IGhhbmRsaW5nCi0gICAgICxAK2NvbW1vbi1zdGF0aWMtc3lt Ym9scyspCisgICAgICxAK2NvbW1vbi1zdGF0aWMtc3ltYm9scysKKyAgICAgLEAqcnVudGltZS1h c20tcm91dGluZXMqKQogICAjJ2VxdWFscCkKIAogKGRlZmNvbnN0YW50LWVxeCArc3RhdGljLWZk ZWZucysgYCMoLEBjb21tb24tc3RhdGljLWZkZWZucykgIydlcXVhbHApCmRpZmYgLS1naXQgYS9z cmMvY29tcGlsZXIveDg2LTY0L21hY3Jvcy5saXNwIGIvc3JjL2NvbXBpbGVyL3g4Ni02NC9tYWNy b3MubGlzcAppbmRleCBlYTc1NTA0YWEuLjM4MDljNmYzMyAxMDA2NDQKLS0tIGEvc3JjL2NvbXBp bGVyL3g4Ni02NC9tYWNyb3MubGlzcAorKysgYi9zcmMvY29tcGlsZXIveDg2LTY0L21hY3Jvcy5s aXNwCkBAIC00NzksMyArNDc5LDI4IEBACiAgICAgICAgICAod29yZC1pbmRleCAoKyBpbnN0YW5j ZS1zbG90cy1vZmZzZXQgKGRzZC1pbmRleCBzbG90KSkpKQogICAgIGAoZWEgLCgtIChhc2ggd29y ZC1pbmRleCB3b3JkLXNoaWZ0KSBpbnN0YW5jZS1wb2ludGVyLWxvd3RhZykKICAgICAgICAgICxi YXNlLXJlZykpKQorCisjK3NiLWZpYmVyCisocHJvZ24KKzs7OyBTYXZlIGFuZCByZXN0b3JlIGEg ZmliZXIncyBjYWxsZWUtc2F2ZWQgcmVnaXN0ZXIgc3RhdGUuICBPZmZzZXRzCis7OzsgbWF0Y2gg YHNiX2ZpYmVyX3JlZ3NgIHN0cnVjdC4KKyhkZWZ1biBlbWl0LXNhdmUtZmliZXItcmVncyAoYmFz ZSkKKyAgKGluc3QgbW92IChlYSAjeDAwIGJhc2UpIHJzcC10bikKKyAgKGluc3QgbW92IChlYSAj eDA4IGJhc2UpIHJieC10bikKKyAgKGluc3QgbW92IChlYSAjeDEwIGJhc2UpIHJicC10bikKKyAg KGluc3QgbW92IChlYSAjeDE4IGJhc2UpIHIxMi10bikKKyAgKGluc3QgbW92IChlYSAjeDIwIGJh c2UpIHIxMy10bikKKyAgKGluc3QgbW92IChlYSAjeDI4IGJhc2UpIHIxNC10bikKKyAgKGluc3Qg bW92IChlYSAjeDMwIGJhc2UpIHIxNS10bikKKyAgKGluc3Qgc3RteGNzciAoZWEgI3gzOCBiYXNl KSkpCisKKyhkZWZ1biBlbWl0LXJlc3RvcmUtZmliZXItcmVncyAoYmFzZSkKKyAgKGluc3QgbW92 IHJzcC10biAoZWEgI3gwMCBiYXNlKSkKKyAgKGluc3QgbW92IHJieC10biAoZWEgI3gwOCBiYXNl KSkKKyAgKGluc3QgbW92IHJicC10biAoZWEgI3gxMCBiYXNlKSkKKyAgKGluc3QgbW92IHIxMi10 biAoZWEgI3gxOCBiYXNlKSkKKyAgKGluc3QgbW92IHIxMy10biAoZWEgI3gyMCBiYXNlKSkKKyAg KGluc3QgbW92IHIxNC10biAoZWEgI3gyOCBiYXNlKSkKKyAgKGluc3QgbW92IHIxNS10biAoZWEg I3gzMCBiYXNlKSkKKyAgKGluc3QgbGRteGNzciAoZWEgI3gzOCBiYXNlKSkpCispCmRpZmYgLS1n aXQgYS9zcmMvY29tcGlsZXIveDg2LTY0L3Bhcm1zLmxpc3AgYi9zcmMvY29tcGlsZXIveDg2LTY0 L3Bhcm1zLmxpc3AKaW5kZXggNDYzZDhlMDAyLi5iMjI3NDZjN2MgMTAwNjQ0Ci0tLSBhL3NyYy9j b21waWxlci94ODYtNjQvcGFybXMubGlzcAorKysgYi9zcmMvY29tcGlsZXIveDg2LTY0L3Bhcm1z Lmxpc3AKQEAgLTE3OSw2ICsxNzksMTQgQEAKIDs7Ozsgc3RhdGljIHN5bWJvbHMKIAogKGRlZnZh ciAqYmluZGluZy1zdGFjay1wb2ludGVyKikKKworOzs7IEFzc2VtYmx5IHJvdXRpbmVzIHdob3Nl IGVudHJ5IGFkZHJlc3NlcyBuZWVkIHRvIGJlIGRpc2NvdmVyYWJsZQorOzs7IGZyb20gQworKGV2 YWwtd2hlbiAoOmNvbXBpbGUtdG9wbGV2ZWwgOmxvYWQtdG9wbGV2ZWwgOmV4ZWN1dGUpCisgIChk ZWZwYXJhbWV0ZXIgKnJ1bnRpbWUtYXNtLXJvdXRpbmVzKgorICAgICcoIytzYi1maWJlciBmaWJl ci1zd2FwLXJlZ3MKKyAgICAgICMrc2ItZmliZXIgZmliZXItdHJhbXApKSkKKwogOzs7IFRoZXNl IHN5bWJvbHMgcmVzaWRlIGluIGxvdyBzdGF0aWMgc3BhY2UgYW5kIHJlZmVyZW5jZWQgb2ZmIE5V TEwtVE4KIChkZWZjb25zdGFudC1lcXggK3N0YXRpYy1zeW1ib2xzKwogIGAjKCxAK2NvbW1vbi1z dGF0aWMtc3ltYm9scysKQEAgLTE4OSw3ICsxOTcsOCBAQAogICAgICMtc2ItdGhyZWFkICphbGll bi1zdGFjay1wb2ludGVyKiAgICA7IGEgdGhyZWFkIHNsb3QgaWYgIytzYi10aHJlYWQKICAgICA7 OyBBc20gY29kZSBhc3NlbWJsZWQgYnkgREVGSU5FLUFMSUVOLUNBTExBQkxFIHJlc2lkZXMgaW4g c3RhdGljIHNwYWNlIGFuZCBsb29rcyB1cAogICAgIDs7IHRoZSBhZGRyZXNzIG9mIHRoZSBDIGhl bHBlciB2aWEgdGhlIFNZTUJPTC1WQUxVRSBzbG90IG9mIHRoaXMgTGlzcCBzeW1ib2wuCi0gICAg Y2FsbGJhY2std3JhcHBlci10cmFtcG9saW5lKQorICAgIGNhbGxiYWNrLXdyYXBwZXItdHJhbXBv bGluZQorICAgICxAKnJ1bnRpbWUtYXNtLXJvdXRpbmVzKikKICAgIydlcXVhbHApCiAKIDs7IE5v IHN0YXRpYy1mZGVmbnMgYXJlIGFjdHVhbGx5IG5lZWRlZCwgYnV0ICMoKSBoZXJlIGNhdXNlcyB0 aGUKZGlmZiAtLWdpdCBhL3NyYy9ydW50aW1lL0NvbmZpZy5hcm02NC1hbmRyb2lkIGIvc3JjL3J1 bnRpbWUvQ29uZmlnLmFybTY0LWFuZHJvaWQKaW5kZXggNmJkZDQxZDdmLi5lYWUzMjRjYTMgMTAw NjQ0Ci0tLSBhL3NyYy9ydW50aW1lL0NvbmZpZy5hcm02NC1hbmRyb2lkCisrKyBiL3NyYy9ydW50 aW1lL0NvbmZpZy5hcm02NC1hbmRyb2lkCkBAIC0yMiw2ICsyMiwxMSBAQCBBU1NFTV9TUkMgPSBh cm02NC1hc3NlbS5TCiBBUkNIX1NSQyA9IGFybTY0LWFyY2guYwogCiBPU19TUkMgPSBsaW51eC1v cy5jIGxpbnV4LW1tYW4uYyBhcm02NC1saW51eC1vcy5jIGFuZHJvaWQtb3MuYyBhcm02NC1hbmRy b2lkLW9zLmMKKworaWZkZWYgTElTUF9GRUFUVVJFX1NCX0ZJQkVSCisgIE9TX1NSQyArPSBmaWJl ci5jIGFybTY0LWZpYmVyLmMKK2VuZGlmCisKIE9TX0xJQlMgPSAtbGRsCiAKIENGTEFHUyArPSAt c3RkPWdudTk5IC1XdW51c2VkLXBhcmFtZXRlciAtZm5vLW9taXQtZnJhbWUtcG9pbnRlciAtbW9t aXQtbGVhZi1mcmFtZS1wb2ludGVyCmRpZmYgLS1naXQgYS9zcmMvcnVudGltZS9Db25maWcuYXJt NjQtYnNkIGIvc3JjL3J1bnRpbWUvQ29uZmlnLmFybTY0LWJzZAppbmRleCA2Y2JjZDM0NGIuLjYx MDNmN2VjYSAxMDA2NDQKLS0tIGEvc3JjL3J1bnRpbWUvQ29uZmlnLmFybTY0LWJzZAorKysgYi9z cmMvcnVudGltZS9Db25maWcuYXJtNjQtYnNkCkBAIC0xNCw2ICsxNCwxMCBAQCBBUkNIX1NSQyA9 IGFybTY0LWFyY2guYwogCiBPU19TUkMgPSBic2Qtb3MuYyBhcm02NC1ic2Qtb3MuYwogCitpZmRl ZiBMSVNQX0ZFQVRVUkVfU0JfRklCRVIKKyAgT1NfU1JDICs9IGZpYmVyLmMgYXJtNjQtZmliZXIu YworZW5kaWYKKwogaWZkZWYgTElTUF9GRUFUVVJFX0dFTkNHQwogICBHQ19TUkMgPSBmdWxsY2dj LmMgZ2VuY2djLmMgdHJhY2Vyb290LmMKIGVuZGlmCmRpZmYgLS1naXQgYS9zcmMvcnVudGltZS9D b25maWcuYXJtNjQtZGFyd2luIGIvc3JjL3J1bnRpbWUvQ29uZmlnLmFybTY0LWRhcndpbgppbmRl eCAxZGUwMGY2ZjQuLjQ2MDIyYzRkZCAxMDA2NDQKLS0tIGEvc3JjL3J1bnRpbWUvQ29uZmlnLmFy bTY0LWRhcndpbgorKysgYi9zcmMvcnVudGltZS9Db25maWcuYXJtNjQtZGFyd2luCkBAIC0xMyw2 ICsxMywxMCBAQCBDRkxBR1MgKz0gLWcgLVdhbGwgLWZkb2xsYXJzLWluLWlkZW50aWZpZXJzIC1h cmNoIGFybTY0CiAKIE9TX1NSQyA9IGJzZC1vcy5jIGFybTY0LWJzZC1vcy5jIGRhcndpbi1vcy5j IGFybTY0LWRhcndpbi1vcy5jCiAKK2lmZGVmIExJU1BfRkVBVFVSRV9TQl9GSUJFUgorICBPU19T UkMgKz0gZmliZXIuYyBhcm02NC1maWJlci5jCitlbmRpZgorCiBPU19MSUJTID0gLWxjIC1sZGwK IGlmZGVmIExJU1BfRkVBVFVSRV9TQl9USFJFQUQKICAgT1NfTElCUyArPSAtbHB0aHJlYWQKZGlm ZiAtLWdpdCBhL3NyYy9ydW50aW1lL0NvbmZpZy5hcm02NC1saW51eCBiL3NyYy9ydW50aW1lL0Nv bmZpZy5hcm02NC1saW51eAppbmRleCAxNTEwMTQzZDkuLjk5MWU2YjZhZiAxMDA2NDQKLS0tIGEv c3JjL3J1bnRpbWUvQ29uZmlnLmFybTY0LWxpbnV4CisrKyBiL3NyYy9ydW50aW1lL0NvbmZpZy5h cm02NC1saW51eApAQCAtMTMsNiArMTMsMTEgQEAgQVNTRU1fU1JDID0gYXJtNjQtYXNzZW0uUwog QVJDSF9TUkMgPSBhcm02NC1hcmNoLmMKIAogT1NfU1JDID0gbGludXgtb3MuYyBsaW51eC1tbWFu LmMgYXJtNjQtbGludXgtb3MuYworCitpZmRlZiBMSVNQX0ZFQVRVUkVfU0JfRklCRVIKKyAgT1Nf U1JDICs9IGZpYmVyLmMgYXJtNjQtZmliZXIuYworZW5kaWYKKwogT1NfTElCUyA9IC1sZGwgLVds LC1uby1hcy1uZWVkZWQKIAogaWZkZWYgTElTUF9GRUFUVVJFX0lNTU9CSUxFX1NQQUNFCmRpZmYg LS1naXQgYS9zcmMvcnVudGltZS9Db25maWcueDg2LTY0LWFuZHJvaWQgYi9zcmMvcnVudGltZS9D b25maWcueDg2LTY0LWFuZHJvaWQKaW5kZXggNzcxOTZiNjU5Li5jMjVmZDVkZDEgMTAwNjQ0Ci0t LSBhL3NyYy9ydW50aW1lL0NvbmZpZy54ODYtNjQtYW5kcm9pZAorKysgYi9zcmMvcnVudGltZS9D b25maWcueDg2LTY0LWFuZHJvaWQKQEAgLTIwLDYgKzIwLDEwIEBAIEFTU0VNX1NSQyA9IHg4Ni02 NC1hc3NlbS5TCiBBUkNIX1NSQyA9IHg4Ni02NC1hcmNoLmMKIAogT1NfU1JDID0gbGludXgtb3Mu YyBsaW51eC1tbWFuLmMgeDg2LTY0LWxpbnV4LW9zLmMgYW5kcm9pZC1vcy5jIHg4Ni02NC1hbmRy b2lkLW9zLmMKKworaWZkZWYgTElTUF9GRUFUVVJFX1NCX0ZJQkVSCisgIE9TX1NSQyArPSBmaWJl ci5jIHg4Ni02NC1maWJlci5jCitlbmRpZgogT1NfTElCUyA9IC1sZGwKIAogQ0ZMQUdTICs9IC1X dW51c2VkLXBhcmFtZXRlciAtZm5vLW9taXQtZnJhbWUtcG9pbnRlciAtbW9taXQtbGVhZi1mcmFt ZS1wb2ludGVyCmRpZmYgLS1naXQgYS9zcmMvcnVudGltZS9Db25maWcueDg2LTY0LWJzZCBiL3Ny Yy9ydW50aW1lL0NvbmZpZy54ODYtNjQtYnNkCmluZGV4IDEyNjFmYTFhOS4uMzJhZjZjZTBhIDEw MDY0NAotLS0gYS9zcmMvcnVudGltZS9Db25maWcueDg2LTY0LWJzZAorKysgYi9zcmMvcnVudGlt ZS9Db25maWcueDg2LTY0LWJzZApAQCAtMTQsNiArMTQsMTAgQEAgQVNTRU1fU1JDID0geDg2LTY0 LWFzc2VtLlMKIEFSQ0hfU1JDID0geDg2LTY0LWFyY2guYwogCiBPU19TUkMgPSBic2Qtb3MuYyB4 ODYtNjQtYnNkLW9zLmMKKworaWZkZWYgTElTUF9GRUFUVVJFX1NCX0ZJQkVSCisgIE9TX1NSQyAr PSBmaWJlci5jIHg4Ni02NC1maWJlci5jCitlbmRpZgogT1NfTElCUyA9ICMgLWxkbAogaWZkZWYg TElTUF9GRUFUVVJFX1NCX0NPUkVfQ09NUFJFU1NJT04KICAgT1NfTElCUyArPSAtbHpzdGQKZGlm ZiAtLWdpdCBhL3NyYy9ydW50aW1lL0NvbmZpZy54ODYtNjQtZGFyd2luIGIvc3JjL3J1bnRpbWUv Q29uZmlnLng4Ni02NC1kYXJ3aW4KaW5kZXggYzVkYjU1NDVlLi43ZWFkZWJlNzggMTAwNjQ0Ci0t LSBhL3NyYy9ydW50aW1lL0NvbmZpZy54ODYtNjQtZGFyd2luCisrKyBiL3NyYy9ydW50aW1lL0Nv bmZpZy54ODYtNjQtZGFyd2luCkBAIC0zOSw2ICszOSwxMCBAQCBlbmRpZgogQVNTRU1fU1JDID0g eDg2LTY0LWFzc2VtLlMKIEFSQ0hfU1JDID0geDg2LTY0LWFyY2guYwogCitpZmRlZiBMSVNQX0ZF QVRVUkVfU0JfRklCRVIKKyAgT1NfU1JDICs9IGZpYmVyLmMgeDg2LTY0LWZpYmVyLmMKK2VuZGlm CisKIExJTktGTEFHUyArPSAtYXJjaCB4ODZfNjQgLWR5bmFtaWMgLXR3b2xldmVsX25hbWVzcGFj ZSAtYmluZF9hdF9sb2FkIC1wYWdlemVyb19zaXplIDB4MTAwMDAwCiAKIENGTEFHUyArPSAtYXJj aCB4ODZfNjQgLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIKZGlmZiAtLWdpdCBhL3NyYy9ydW50aW1l L0NvbmZpZy54ODYtNjQtaGFpa3UgYi9zcmMvcnVudGltZS9Db25maWcueDg2LTY0LWhhaWt1Cmlu ZGV4IGFhM2Q0NDBjOS4uYzNkMDlmY2ZkIDEwMDY0NAotLS0gYS9zcmMvcnVudGltZS9Db25maWcu eDg2LTY0LWhhaWt1CisrKyBiL3NyYy9ydW50aW1lL0NvbmZpZy54ODYtNjQtaGFpa3UKQEAgLTEz LDYgKzEzLDEwIEBAIEFTU0VNX1NSQyA9IHg4Ni02NC1hc3NlbS5TCiBBUkNIX1NSQyA9IHg4Ni02 NC1hcmNoLmMKIE9TX1NSQyA9IGhhaWt1LW9zLmMgeDg2LTY0LWhhaWt1LW9zLmMKIAoraWZkZWYg TElTUF9GRUFUVVJFX1NCX0ZJQkVSCisgIE9TX1NSQyArPSBmaWJlci5jIHg4Ni02NC1maWJlci5j CitlbmRpZgorCiBDRkxBR1MgKz0gLUkvYm9vdC9zeXN0ZW0vZGV2ZWxvcC9oZWFkZXJzL3ByaXZh dGUvc3lzdGVtL2FyY2gveDg2XzY0CiBMSU5LRkxBR1MgKz0gLVdsLC0tZXhwb3J0LWR5bmFtaWMK IE9TX0xJQlMgKz0gLWxiZSAtbG5ldHdvcmsgLWxic2QKZGlmZiAtLWdpdCBhL3NyYy9ydW50aW1l L0NvbmZpZy54ODYtNjQtbGludXggYi9zcmMvcnVudGltZS9Db25maWcueDg2LTY0LWxpbnV4Cmlu ZGV4IGFiYzY1MTliNi4uMGYzMjU0ODBiIDEwMDY0NAotLS0gYS9zcmMvcnVudGltZS9Db25maWcu eDg2LTY0LWxpbnV4CisrKyBiL3NyYy9ydW50aW1lL0NvbmZpZy54ODYtNjQtbGludXgKQEAgLTEz LDYgKzEzLDEwIEBAIEFTU0VNX1NSQyA9IHg4Ni02NC1hc3NlbS5TCiBBUkNIX1NSQyA9IHg4Ni02 NC1hcmNoLmMKIE9TX1NSQyA9IGxpbnV4LW9zLmMgbGludXgtbW1hbi5jIHg4Ni02NC1saW51eC1v cy5jCiAKK2lmZGVmIExJU1BfRkVBVFVSRV9TQl9GSUJFUgorICBPU19TUkMgKz0gZmliZXIuYyB4 ODYtNjQtZmliZXIuYworZW5kaWYKKwogIyBUaGUgIi0tV2wsLS1leHBvcnQtZHluYW1pYyIgZmxh Z3MgYXJlIGhlcmUgdG8gaGVscCBwZW9wbGUKICMgZXhwZXJpbWVudGluZyB3aXRoIGNhbGxiYWNr cyBmcm9tIEMgdG8gU0JDTCwgYnkgYWxsb3dpbmcgbGlua2FnZSB0bwogIyBTQkNMIHNyYy9ydW50 aW1lLyouYyBzeW1ib2xzIGZyb20gQy4gV29yayBvbiB0aGlzIGlzIGdvb2QsIGJ1dCBpdCdzCmRp ZmYgLS1naXQgYS9zcmMvcnVudGltZS9Db25maWcueDg2LTY0LXN1bm9zIGIvc3JjL3J1bnRpbWUv Q29uZmlnLng4Ni02NC1zdW5vcwppbmRleCA3ZmIzNjljZWEuLmUwODk2NDhhYyAxMDA2NDQKLS0t IGEvc3JjL3J1bnRpbWUvQ29uZmlnLng4Ni02NC1zdW5vcworKysgYi9zcmMvcnVudGltZS9Db25m aWcueDg2LTY0LXN1bm9zCkBAIC0xMiw2ICsxMiwxMCBAQCBBU1NFTV9TUkMgPSB4ODYtNjQtYXNz ZW0uUwogQVJDSF9TUkMgPSB4ODYtNjQtYXJjaC5jCiAKIE9TX1NSQyA9IHN1bm9zLW9zLmMgeDg2 LTY0LXN1bm9zLW9zLmMKKworaWZkZWYgTElTUF9GRUFUVVJFX1NCX0ZJQkVSCisgIE9TX1NSQyAr PSBmaWJlci5jIHg4Ni02NC1maWJlci5jCitlbmRpZgogT1NfTElCUz0gLWxkbCAtbHNvY2tldCAt bG5zbCAtbHJ0CiBpZmRlZiBMSVNQX0ZFQVRVUkVfU0JfQ09SRV9DT01QUkVTU0lPTgogICBPU19M SUJTICs9IC1senN0ZApkaWZmIC0tZ2l0IGEvc3JjL3J1bnRpbWUvYWxsb2MuYyBiL3NyYy9ydW50 aW1lL2FsbG9jLmMKaW5kZXggYTc1Mzg1MDJkLi40ZDJkZjdmOTcgMTAwNjQ0Ci0tLSBhL3NyYy9y dW50aW1lL2FsbG9jLmMKKysrIGIvc3JjL3J1bnRpbWUvYWxsb2MuYwpAQCAtMjIsNiArMjIsNyBA QAogI2luY2x1ZGUgImFyY2guaCIgLy8gd2h5IGlzIHRoaXMgd2hlcmUgZnVuY2FsbDIgaXMgZGVj bGFyZWQ/Pz8KICNpbmNsdWRlICJnZW5lc2lzL3N5bWJvbC5oIgogI2luY2x1ZGUgImNvZGUuaCIK KyNpbmNsdWRlICJmaWJlci5oIgogCiBsaXNwb2JqKiBhdG9taWNfYnVtcF9zdGF0aWNfc3BhY2Vf ZnJlZV9wdHIoaW50IG5ieXRlcykKIHsKQEAgLTgxMSw2ICs4MTIsOSBAQCBhbGxvY190aHJlYWRf c3RydWN0KHZvaWQqIHNwYWNlcykgewogdm9pZCBmcmVlX3RocmVhZF9zdHJ1Y3Qoc3RydWN0IHRo cmVhZCAqdGgpCiB7CiAgICAgc3RydWN0IGV4dHJhX3RocmVhZF9kYXRhICpleHRyYV9kYXRhID0g dGhyZWFkX2V4dHJhX2RhdGEodGgpOworI2lmZGVmIExJU1BfRkVBVFVSRV9TQl9GSUJFUgorICAg IHNiX2ZpYmVyX3JlbGVhc2VfcmVnaXN0ZXJlZCh0aCk7CisjZW5kaWYKICAgICBpZiAoZXh0cmFf ZGF0YS0+YXJlbmFfc2F2ZWFyZWEpIGZyZWUoZXh0cmFfZGF0YS0+YXJlbmFfc2F2ZWFyZWEpOwog ICAgIG9zX2RlYWxsb2NhdGUoKG9zX3ZtX2FkZHJlc3NfdCkgdGgtPm9zX2FkZHJlc3MsIFRIUkVB RF9TVFJVQ1RfU0laRSk7CiB9CmRpZmYgLS1naXQgYS9zcmMvcnVudGltZS9hcm02NC1maWJlci5j IGIvc3JjL3J1bnRpbWUvYXJtNjQtZmliZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAuLjNmYWEwODVkNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9ydW50aW1lL2FybTY0 LWZpYmVyLmMKQEAgLTAsMCArMSwxNjEgQEAKKyNpbmNsdWRlICJmaWJlci5oIgorI2luY2x1ZGUg ImFsaWduLmgiCisjaW5jbHVkZSAiZ2VuZXNpcy9zeW1ib2wuaCIKKyNpbmNsdWRlICJnZW5lc2lz L3N0YXRpYy1zeW1ib2xzLmgiCisjaW5jbHVkZSAib3MuaCIKKyNpbmNsdWRlICJ0aHJlYWQuaCIK KyNpbmNsdWRlICJ2YWxpZGF0ZS5oIgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0 cmluZy5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisKKyNpZm5kZWYgTUFQX1NUQUNLCisjZGVm aW5lIE1BUF9TVEFDSyAwCisjZW5kaWYKKwordm9pZCBzYl9maWJlcl9wcmVwYXJlKHN0cnVjdCBz Yl9maWJlcl9jdHggKmYsCisgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKmZuKSh2b2lkICop LCB2b2lkICphcmcpCit7CisgICAgZi0+ZW50cnlfZm4gPSBmbjsKKyAgICBmLT5lbnRyeV9hcmcg PSBhcmc7CisgICAgLyogQUFQQ1M2NCByZXF1aXJlcyBTUCB0byBiZSAxNi1ieXRlIGFsaWduZWQg YXQgcHVibGljIGludGVyZmFjZXMuICovCisgICAgZi0+cmVncy5zcCAgPSAodm9pZCAqKSgodWlu dHB0cl90KWYtPnN0YWNrX2VuZCAmIH4odWludHB0cl90KTB4Rik7CisgICAgZi0+cmVncy5mcCAg PSAwOworICAgIGYtPnJlZ3MubHIgID0gKHZvaWQgKilTWU1CT0woRklCRVJfVFJBTVApLT52YWx1 ZTsKKyAgICBmLT5yZWdzLngxOSA9ICh2b2lkICopZjsKKyAgICBmLT5yZWdzLngyMCA9IDA7Cisg ICAgZi0+cmVncy54MjEgPSAwOworICAgIGYtPnJlZ3MueDIyID0gMDsKKyAgICBmLT5yZWdzLngy MyA9IDA7CisgICAgZi0+cmVncy54MjQgPSAwOworICAgIGYtPnJlZ3MueDI1ID0gMDsKKyAgICBm LT5yZWdzLngyNiA9IDA7CisgICAgZi0+cmVncy54MjcgPSAwOworICAgIGYtPnJlZ3MueDI4ID0g MDsKKyAgICBmLT5yZWdzLmQ4ID0gZi0+cmVncy5kOSA9IGYtPnJlZ3MuZDEwID0gZi0+cmVncy5k MTEgPSAwLjA7CisgICAgZi0+cmVncy5kMTIgPSBmLT5yZWdzLmQxMyA9IGYtPnJlZ3MuZDE0ID0g Zi0+cmVncy5kMTUgPSAwLjA7Cit9CisKK3ZvaWQgKnNiX2ZpYmVyX3NwKGNvbnN0IHN0cnVjdCBz Yl9maWJlcl9jdHggKmYpCit7CisgICAgcmV0dXJuIGYtPnJlZ3Muc3A7Cit9CisKK2ludCBzYl9m aWJlcl9nY19yZWdzKGNvbnN0IHN0cnVjdCBzYl9maWJlcl9jdHggKmYsIGxpc3BvYmogKm91dCwg aW50IG1heCkKK3sKKyAgICBzdGF0aWMgY29uc3QgaW50IG4gPSAxMTsKKyAgICBpZiAobWF4IDwg bikgcmV0dXJuIDA7CisgICAgaW50IGkgPSAwOworICAgIG91dFtpKytdID0gKGxpc3BvYmopZi0+ cmVncy5mcDsKKyAgICBvdXRbaSsrXSA9IChsaXNwb2JqKWYtPnJlZ3MueDE5OworICAgIG91dFtp KytdID0gKGxpc3BvYmopZi0+cmVncy54MjA7CisgICAgb3V0W2krK10gPSAobGlzcG9iailmLT5y ZWdzLngyMTsKKyAgICBvdXRbaSsrXSA9IChsaXNwb2JqKWYtPnJlZ3MueDIyOworICAgIG91dFtp KytdID0gKGxpc3BvYmopZi0+cmVncy54MjM7CisgICAgb3V0W2krK10gPSAobGlzcG9iailmLT5y ZWdzLngyNDsKKyAgICBvdXRbaSsrXSA9IChsaXNwb2JqKWYtPnJlZ3MueDI1OworICAgIG91dFtp KytdID0gKGxpc3BvYmopZi0+cmVncy54MjY7CisgICAgb3V0W2krK10gPSAobGlzcG9iailmLT5y ZWdzLngyNzsKKyAgICBvdXRbaSsrXSA9IChsaXNwb2JqKWYtPnJlZ3MueDI4OworICAgIHJldHVy biBpOworfQorCit2b2lkIHNiX2ZpYmVyX3JlYmluZF90aHJlYWQoc3RydWN0IHNiX2ZpYmVyX2N0 eCAqZiwgc3RydWN0IHRocmVhZCAqbmV3X293bmVyKQoreworICAgIGYtPnJlZ3MueDIxID0gKHZv aWQgKiluZXdfb3duZXI7Cit9CisKK2ludCBzYl9maWJlcl9saXNwX3N0YWNrX2FsbG9jKHN0cnVj dCBzYl9maWJlcl9jdHggKmYsIHNpemVfdCBzaXplKQoreworICAgIHNpemVfdCBwcyA9IG9zX3Jl cG9ydGVkX3BhZ2Vfc2l6ZTsKKyAgICBzaXplX3QgZ3VhcmQgPSBTVEFDS19HVUFSRF9TSVpFOwor ICAgIHNpemUgPSBBTElHTl9VUChzaXplID8gc2l6ZSA6IDY1NTM2LCBwcyk7CisgICAgc2l6ZV90 IHRvdGFsID0gc2l6ZSArIDMqZ3VhcmQ7CisgICAgdm9pZCAqcCA9IG1tYXAoTlVMTCwgdG90YWws IFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCisgICAgICAgICAgICAgICAgICAgTUFQX1BSSVZBVEUg fCBNQVBfQU5PTllNT1VTIHwgTUFQX1NUQUNLLCAtMSwgMCk7CisgICAgaWYgKHAgPT0gTUFQX0ZB SUxFRCkgcmV0dXJuIC0xOworICAgIG1wcm90ZWN0KChjaGFyICopcCArIHNpemUgKyBndWFyZCwg ICBndWFyZCwgUFJPVF9OT05FKTsKKyAgICBtcHJvdGVjdCgoY2hhciAqKXAgKyBzaXplICsgMipn dWFyZCwgZ3VhcmQsIFBST1RfTk9ORSk7CisgICAgZi0+Y29udHJvbF9zdGFja19iYXNlICAgICAg ID0gKGxpc3BvYmogKilwOworICAgIGYtPmNvbnRyb2xfc3RhY2tfZW5kICAgICAgICA9IChsaXNw b2JqICopKChjaGFyICopcCArIHRvdGFsKTsKKyAgICBmLT5jb250cm9sX3N0YWNrX3BvaW50ZXIg ICAgPSAobGlzcG9iaiAqKXA7CisgICAgZi0+Y29udHJvbF9mcmFtZV9wb2ludGVyICAgID0gTlVM TDsKKyAgICBmLT5jb250cm9sX3N0YWNrX2FsbG9jX3NpemUgPSB0b3RhbDsKKyAgICBmLT5jc19n dWFyZF9wcm90ZWN0ZWQgICAgICAgPSAxOworICAgIGYtPmRpcnR5X2hpZ2ggICAgICAgICAgICAg ICA9IChsaXNwb2JqICopcDsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBzYl9maWJlcl9saXNw X3N0YWNrX2ZyZWUoc3RydWN0IHNiX2ZpYmVyX2N0eCAqZikKK3sKKyAgICBpZiAoZi0+Y29udHJv bF9zdGFja19hbGxvY19zaXplICYmIGYtPmNvbnRyb2xfc3RhY2tfYmFzZSkKKyAgICAgICAgbXVu bWFwKGYtPmNvbnRyb2xfc3RhY2tfYmFzZSwgZi0+Y29udHJvbF9zdGFja19hbGxvY19zaXplKTsK KyAgICBmLT5jb250cm9sX3N0YWNrX2Jhc2UgICAgICAgPSBOVUxMOworICAgIGYtPmNvbnRyb2xf c3RhY2tfZW5kICAgICAgICA9IE5VTEw7CisgICAgZi0+Y29udHJvbF9zdGFja19wb2ludGVyICAg ID0gTlVMTDsKKyAgICBmLT5jb250cm9sX2ZyYW1lX3BvaW50ZXIgICAgPSBOVUxMOworICAgIGYt PmNvbnRyb2xfc3RhY2tfYWxsb2Nfc2l6ZSA9IDA7Cit9CisKK3ZvaWQgc2JfZmliZXJfbGlzcF9z dGFja19jYXB0dXJlX21haW4oc3RydWN0IHNiX2ZpYmVyX2N0eCAqZiwgc3RydWN0IHRocmVhZCAq dGgpCit7CisgICAgZi0+Y29udHJvbF9zdGFja19iYXNlICAgICAgID0gdGgtPmNvbnRyb2xfc3Rh Y2tfc3RhcnQ7CisgICAgZi0+Y29udHJvbF9zdGFja19lbmQgICAgICAgID0gdGgtPmNvbnRyb2xf c3RhY2tfZW5kOworICAgIGYtPmNvbnRyb2xfc3RhY2tfcG9pbnRlciAgICA9IHRoLT5jb250cm9s X3N0YWNrX3BvaW50ZXI7CisgICAgZi0+Y29udHJvbF9mcmFtZV9wb2ludGVyICAgID0gdGgtPmNv bnRyb2xfZnJhbWVfcG9pbnRlcjsKKyAgICBmLT5jb250cm9sX3N0YWNrX2FsbG9jX3NpemUgPSAw OyAgIC8qIG5vdCBvd25lZCAqLworICAgIGYtPmNzX2d1YXJkX3Byb3RlY3RlZCA9CisgICAgICAg IHRoLT5zdGF0ZV93b3JkLmNvbnRyb2xfc3RhY2tfZ3VhcmRfcGFnZV9wcm90ZWN0ZWQ7CisgICAg Zi0+ZGlydHlfaGlnaCA9IHRoLT5jb250cm9sX3N0YWNrX3BvaW50ZXI7Cit9CisKK3ZvaWQgc2Jf ZmliZXJfbGlzcF9zdGFja19zdXNwZW5kKHN0cnVjdCBzYl9maWJlcl9jdHggKmYsIHN0cnVjdCB0 aHJlYWQgKnRoKQoreworICAgIGYtPmNvbnRyb2xfc3RhY2tfYmFzZSAgICA9IHRoLT5jb250cm9s X3N0YWNrX3N0YXJ0OworICAgIGYtPmNvbnRyb2xfc3RhY2tfZW5kICAgICA9IHRoLT5jb250cm9s X3N0YWNrX2VuZDsKKyAgICBmLT5jb250cm9sX3N0YWNrX3BvaW50ZXIgPSB0aC0+Y29udHJvbF9z dGFja19wb2ludGVyOworICAgIGYtPmNvbnRyb2xfZnJhbWVfcG9pbnRlciA9IHRoLT5jb250cm9s X2ZyYW1lX3BvaW50ZXI7CisgICAgZi0+Y3NfZ3VhcmRfcHJvdGVjdGVkICAgID0KKyAgICAgICAg dGgtPnN0YXRlX3dvcmQuY29udHJvbF9zdGFja19ndWFyZF9wYWdlX3Byb3RlY3RlZDsKKyAgICBp ZiAoZi0+Y29udHJvbF9zdGFja19wb2ludGVyICYmIGYtPmNvbnRyb2xfc3RhY2tfZW5kKSB7Cisg ICAgICAgIGNoYXIgKmNzcCA9IChjaGFyICopZi0+Y29udHJvbF9zdGFja19wb2ludGVyOworICAg ICAgICBjaGFyICp1c2FibGVfZW5kID0gKGNoYXIgKilmLT5jb250cm9sX3N0YWNrX2VuZAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgLSAzICogU1RBQ0tfR1VBUkRfU0laRTsKKyAgICAgICAg Y2hhciAqZGlydHlfaGlnaCA9IChjaGFyICopZi0+ZGlydHlfaGlnaDsKKyAgICAgICAgaWYgKGNz cCA+IGRpcnR5X2hpZ2gpIHsKKyAgICAgICAgICAgIGlmIChjc3AgPCB1c2FibGVfZW5kKQorICAg ICAgICAgICAgICAgIG1lbXNldChjc3AsIDAsIHVzYWJsZV9lbmQgLSBjc3ApOworICAgICAgICAg ICAgZi0+ZGlydHlfaGlnaCA9IChsaXNwb2JqICopY3NwOworICAgICAgICB9IGVsc2UgaWYgKGNz cCA8IGRpcnR5X2hpZ2gpIHsKKyAgICAgICAgICAgIG1lbXNldChjc3AsIDAsIGRpcnR5X2hpZ2gg LSBjc3ApOworICAgICAgICAgICAgZi0+ZGlydHlfaGlnaCA9IChsaXNwb2JqICopY3NwOworICAg ICAgICB9CisgICAgfQorfQorCit2b2lkIHNiX2ZpYmVyX2xpc3Bfc3RhY2tfcmVzdW1lKHN0cnVj dCBzYl9maWJlcl9jdHggKmYsIHN0cnVjdCB0aHJlYWQgKnRoKQoreworICAgIHRoLT5jb250cm9s X3N0YWNrX3N0YXJ0ICAgPSBmLT5jb250cm9sX3N0YWNrX2Jhc2U7CisgICAgdGgtPmNvbnRyb2xf c3RhY2tfZW5kICAgICA9IGYtPmNvbnRyb2xfc3RhY2tfZW5kOworICAgIHRoLT5jb250cm9sX3N0 YWNrX3BvaW50ZXIgPSBmLT5jb250cm9sX3N0YWNrX3BvaW50ZXI7CisgICAgdGgtPmNvbnRyb2xf ZnJhbWVfcG9pbnRlciA9IGYtPmNvbnRyb2xfZnJhbWVfcG9pbnRlcjsKKyAgICB0aC0+c3RhdGVf d29yZC5jb250cm9sX3N0YWNrX2d1YXJkX3BhZ2VfcHJvdGVjdGVkID0gZi0+Y3NfZ3VhcmRfcHJv dGVjdGVkOworfQorCitzaXplX3Qgc2JfZmliZXJfY29udHJvbF9zdGFja19zaXplX2J5dGVzKGNv bnN0IHN0cnVjdCBzYl9maWJlcl9jdHggKmYpCit7CisgICAgaWYgKCFmLT5jb250cm9sX3N0YWNr X2Jhc2UgfHwgIWYtPmNvbnRyb2xfc3RhY2tfZW5kKSByZXR1cm4gMDsKKyAgICBzaXplX3QgdG90 YWwgPSAoY2hhciAqKWYtPmNvbnRyb2xfc3RhY2tfZW5kIC0gKGNoYXIgKilmLT5jb250cm9sX3N0 YWNrX2Jhc2U7CisgICAgaWYgKGYtPmNvbnRyb2xfc3RhY2tfYWxsb2Nfc2l6ZSA+IDApIHsKKyAg ICAgICAgc2l6ZV90IGd1YXJkcyA9IDMgKiBTVEFDS19HVUFSRF9TSVpFOworICAgICAgICByZXR1 cm4gdG90YWwgPiBndWFyZHMgPyB0b3RhbCAtIGd1YXJkcyA6IDA7CisgICAgfQorICAgIHJldHVy biB0b3RhbDsKK30KKworc2l6ZV90IHNiX2ZpYmVyX2NvbnRyb2xfc3RhY2tfdXNlZF9ieXRlcyhj b25zdCBzdHJ1Y3Qgc2JfZmliZXJfY3R4ICpmKQoreworICAgIGlmIChmLT5jb250cm9sX3N0YWNr X3BvaW50ZXIgJiYgZi0+Y29udHJvbF9zdGFja19iYXNlKQorICAgICAgICByZXR1cm4gKGNoYXIg KilmLT5jb250cm9sX3N0YWNrX3BvaW50ZXIgLSAoY2hhciAqKWYtPmNvbnRyb2xfc3RhY2tfYmFz ZTsKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3NyYy9ydW50aW1lL2FybTY0LWZpYmVy LmggYi9zcmMvcnVudGltZS9hcm02NC1maWJlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMC4uZjBmMzQzYTllCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3J1bnRpbWUvYXJt NjQtZmliZXIuaApAQCAtMCwwICsxLDI4IEBACisjaWZuZGVmIFNCQ0xfRklCRVJfQVJNNjRfSAor I2RlZmluZSBTQkNMX0ZJQkVSX0FSTTY0X0gKKworc3RydWN0IHNiX2ZpYmVyX3JlZ3MgeworICAg IHZvaWQgICAqc3A7ICAgICAvKiAweDAwICovCisgICAgdm9pZCAgICpmcDsgICAgIC8qIDB4MDgg eDI5ICovCisgICAgdm9pZCAgICpscjsgICAgIC8qIDB4MTAgeDMwICovCisgICAgdm9pZCAgICp4 MTk7ICAgIC8qIDB4MTggKi8KKyAgICB2b2lkICAgKngyMDsgICAgLyogMHgyMCAqLworICAgIHZv aWQgICAqeDIxOyAgICAvKiAweDI4ICovCisgICAgdm9pZCAgICp4MjI7ICAgIC8qIDB4MzAgKi8K KyAgICB2b2lkICAgKngyMzsgICAgLyogMHgzOCAqLworICAgIHZvaWQgICAqeDI0OyAgICAvKiAw eDQwICovCisgICAgdm9pZCAgICp4MjU7ICAgIC8qIDB4NDggKi8KKyAgICB2b2lkICAgKngyNjsg ICAgLyogMHg1MCAqLworICAgIHZvaWQgICAqeDI3OyAgICAvKiAweDU4ICovCisgICAgdm9pZCAg ICp4Mjg7ICAgIC8qIDB4NjAgKi8KKyAgICBkb3VibGUgIGQ4OyAgICAgLyogMHg2OCAqLworICAg IGRvdWJsZSAgZDk7ICAgICAvKiAweDcwICovCisgICAgZG91YmxlICBkMTA7ICAgIC8qIDB4Nzgg Ki8KKyAgICBkb3VibGUgIGQxMTsgICAgLyogMHg4MCAqLworICAgIGRvdWJsZSAgZDEyOyAgICAv KiAweDg4ICovCisgICAgZG91YmxlICBkMTM7ICAgIC8qIDB4OTAgKi8KKyAgICBkb3VibGUgIGQx NDsgICAgLyogMHg5OCAqLworICAgIGRvdWJsZSAgZDE1OyAgICAvKiAweGEwICovCit9OworCisj ZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9ydW50aW1lL2ZpYmVyLmMgYi9zcmMvcnVudGltZS9maWJl ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uMGFhY2JlMjcxCi0tLSAv ZGV2L251bGwKKysrIGIvc3JjL3J1bnRpbWUvZmliZXIuYwpAQCAtMCwwICsxLDQ2MiBAQAorI2lu Y2x1ZGUgImZpYmVyLmgiCisjaW5jbHVkZSAib3MuaCIKKyNpbmNsdWRlICJnbG9iYWxzLmgiCisj aW5jbHVkZSAidGhyZWFkLmgiCisjaW5jbHVkZSAidmFsaWRhdGUuaCIKKyNpbmNsdWRlICJpbnRl cnIuaCIKKyNpbmNsdWRlICJpbnRlcnJ1cHQuaCIKKyNpbmNsdWRlICJhbGlnbi5oIgorI2luY2x1 ZGUgImdlbmVzaXMvc3ltYm9sLmgiCisjaW5jbHVkZSAiZ2VuZXNpcy9zdGF0aWMtc3ltYm9scy5o IgorI2luY2x1ZGUgImxpc3BvYmouaCIKKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUg PHN0cmluZy5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisj aWZuZGVmIE1BUF9TVEFDSworI2RlZmluZSBNQVBfU1RBQ0sgMAorI2VuZGlmCisKK2V4dGVybiB2 b2lkIGdjX3ByZXNlcnZlX2ZpYmVyX3dvcmQobGlzcG9iaiB3b3JkKTsKK2V4dGVybiB2b2lkIGdj X3NjYXZfZmliZXJfYmluZGluZ19zdGFjayhsaXNwb2JqICpiYXNlLCBsaXNwb2JqICplbmQpOwor Cit2b2lkIGdjX3NjYW5fZmliZXJfc3RhY2tzKHN0cnVjdCB0aHJlYWQgKnRoKQoreworICAgIGZv ciAoc3RydWN0IHNiX2ZpYmVyX2N0eCAqZiA9IHRocmVhZF9leHRyYV9kYXRhKHRoKS0+ZmliZXJf bGlzdDsKKyAgICAgICAgIGY7IGYgPSBmLT5uZXh0KSB7CisgICAgICAgIGlmIChmLT5zdGF0ZSAh PSBGSUJFUl9SVU5OQUJMRSAmJiBmLT5zdGF0ZSAhPSBGSUJFUl9ORVcpIGNvbnRpbnVlOworCisg ICAgICAgIGxpc3BvYmogKmhpID0gKGxpc3BvYmogKilmLT5zdGFja19lbmQ7CisjaWZkZWYgTElT UF9GRUFUVVJFX1g4Nl82NAorICAgICAgICAvKiBNYWluIGZpYmVyOiBzdGFja19lbmQ9PU5VTEwg YnV0IExpc3AgZnJhbWVzIGxpdmUgb24gdGhlCisgICAgICAgICAqIHRocmVhZCdzIEMgc3RhY2sg Y2FwdHVyZWQgYXQgbWFrZS1tYWluLWZpYmVyIHRpbWUuICovCisgICAgICAgIGlmICghaGkpIGhp ID0gZi0+Y29udHJvbF9zdGFja19lbmQ7CisjZW5kaWYKKyAgICAgICAgaWYgKGhpKQorICAgICAg ICAgICAgZm9yIChsaXNwb2JqICpwID0gKGxpc3BvYmogKilzYl9maWJlcl9zcChmKTsgcCA8IGhp OyBwKyspCisgICAgICAgICAgICAgICAgZ2NfcHJlc2VydmVfZmliZXJfd29yZCgqcCk7CisKKyAg ICAgICAgbGlzcG9iaiByZWdzWzE2XTsKKyAgICAgICAgaW50IG4gPSBzYl9maWJlcl9nY19yZWdz KGYsIHJlZ3MsIDE2KTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCisgICAg ICAgICAgICBnY19wcmVzZXJ2ZV9maWJlcl93b3JkKHJlZ3NbaV0pOworCisjaWZkZWYgTElTUF9G RUFUVVJFX0FSTTY0CisgICAgICAgIGlmIChmLT5jb250cm9sX3N0YWNrX2Jhc2UgJiYgZi0+Y29u dHJvbF9zdGFja19wb2ludGVyCisgICAgICAgICAgICAmJiBmLT5jb250cm9sX3N0YWNrX3BvaW50 ZXIgPiBmLT5jb250cm9sX3N0YWNrX2Jhc2UpCisgICAgICAgICAgICBmb3IgKGxpc3BvYmogKnAg PSBmLT5jb250cm9sX3N0YWNrX2Jhc2U7CisgICAgICAgICAgICAgICAgIHAgPCBmLT5jb250cm9s X3N0YWNrX3BvaW50ZXI7IHArKykKKyAgICAgICAgICAgICAgICBnY19wcmVzZXJ2ZV9maWJlcl93 b3JkKCpwKTsKKyNlbmRpZgorICAgIH0KK30KKwordm9pZCBnY19zY2F2X2ZpYmVyX2JpbmRpbmdf c3RhY2tzKHN0cnVjdCB0aHJlYWQgKnRoKQoreworICAgIGZvciAoc3RydWN0IHNiX2ZpYmVyX2N0 eCAqZiA9IHRocmVhZF9leHRyYV9kYXRhKHRoKS0+ZmliZXJfbGlzdDsKKyAgICAgICAgIGY7IGYg PSBmLT5uZXh0KSB7CisgICAgICAgIGlmICgoZi0+c3RhdGUgPT0gRklCRVJfUlVOTkFCTEUgfHwg Zi0+c3RhdGUgPT0gRklCRVJfTkVXKQorICAgICAgICAgICAgJiYgZi0+YmluZGluZ19zdGFja19i YXNlKQorICAgICAgICAgICAgZ2Nfc2Nhdl9maWJlcl9iaW5kaW5nX3N0YWNrKGYtPmJpbmRpbmdf c3RhY2tfYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLT5i aW5kaW5nX3N0YWNrX3BvaW50ZXIpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgZmliZXJfZnJl ZShzdHJ1Y3Qgc2JfZmliZXJfY3R4ICpmKQoreworICAgIGlmIChmLT5zdGFja19iYXNlICYmIGYt PnN0YWNrX2Jhc2UgIT0gTUFQX0ZBSUxFRCkKKyAgICAgICAgbXVubWFwKGYtPnN0YWNrX2Jhc2Us IGYtPnN0YWNrX2FsbG9jX3NpemUpOworICAgIGlmIChmLT5iaW5kaW5nX3N0YWNrX2Jhc2UpCisg ICAgICAgIG11bm1hcChmLT5iaW5kaW5nX3N0YWNrX2Jhc2UsIGYtPmJpbmRpbmdfc3RhY2tfYWxs b2Nfc2l6ZSk7CisgICAgc2JfZmliZXJfbGlzcF9zdGFja19mcmVlKGYpOworICAgIGZyZWUoZik7 Cit9CisKK3ZvaWQgc2JfZmliZXJfcmVsZWFzZV9yZWdpc3RlcmVkKHN0cnVjdCB0aHJlYWQgKnRo KQoreworICAgIHN0cnVjdCBleHRyYV90aHJlYWRfZGF0YSAqZWQgPSB0aHJlYWRfZXh0cmFfZGF0 YSh0aCk7CisgICAgc3RydWN0IHNiX2ZpYmVyX2N0eCAqZiA9IGVkLT5maWJlcl9saXN0OworICAg IGVkLT5maWJlcl9saXN0ID0gTlVMTDsKKyAgICB3aGlsZSAoZikgeworICAgICAgICBzdHJ1Y3Qg c2JfZmliZXJfY3R4ICpuZXh0ID0gZi0+bmV4dDsKKyAgICAgICAgZi0+b3duZXIgPSBOVUxMOwor ICAgICAgICBmLT5uZXh0ID0gTlVMTDsKKyAgICAgICAgZmliZXJfZnJlZShmKTsKKyAgICAgICAg ZiA9IG5leHQ7CisgICAgfQorfQorCitzdHJ1Y3Qgc2JfZmliZXJfY3R4ICpzYl9maWJlcl9jcmVh dGUoc2l6ZV90IHN0YWNrX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz aXplX3QgYmluZGluZ19zdGFja19zaXplKQoreworICAgIHNpemVfdCBwcyA9IG9zX3JlcG9ydGVk X3BhZ2Vfc2l6ZTsKKyAgICBzdHJ1Y3Qgc2JfZmliZXJfY3R4ICpmID0gY2FsbG9jKDEsIHNpemVv ZihzdHJ1Y3Qgc2JfZmliZXJfY3R4KSk7CisgICAgaWYgKCFmKSByZXR1cm4gTlVMTDsKKworICAg IHNpemVfdCBndWFyZCA9IFNUQUNLX0dVQVJEX1NJWkU7CisgICAgc3RhY2tfc2l6ZSA9IEFMSUdO X1VQKHN0YWNrX3NpemUgPyBzdGFja19zaXplIDogNjU1MzYsIHBzKTsKKyAgICBmLT5zdGFja19h bGxvY19zaXplID0gMypndWFyZCArIHN0YWNrX3NpemU7CisgICAgZi0+c3RhY2tfYmFzZSA9IG1t YXAoTlVMTCwgZi0+c3RhY2tfYWxsb2Nfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQ Uk9UX1JFQUQgfCBQUk9UX1dSSVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgIE1BUF9QUklW QVRFIHwgTUFQX0FOT05ZTU9VUyB8IE1BUF9TVEFDSywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAtMSwgMCk7CisgICAgaWYgKGYtPnN0YWNrX2Jhc2UgPT0gTUFQX0ZBSUxFRCkgeyBmcmVlKGYp OyByZXR1cm4gTlVMTDsgfQorCisgICAgbXByb3RlY3QoZi0+c3RhY2tfYmFzZSwgICAgICAgICAg ICAgICAgICAgIGd1YXJkLCBQUk9UX05PTkUpOworICAgIG1wcm90ZWN0KChjaGFyICopZi0+c3Rh Y2tfYmFzZSArIGd1YXJkLCAgICBndWFyZCwgUFJPVF9OT05FKTsKKyAgICBmLT5zdGFja19zdGFy dCA9IChjaGFyICopZi0+c3RhY2tfYmFzZSArIDMqZ3VhcmQ7CisgICAgZi0+c3RhY2tfZW5kICAg PSAoY2hhciAqKWYtPnN0YWNrX2Jhc2UgKyBmLT5zdGFja19hbGxvY19zaXplOworICAgIGYtPmNz X2d1YXJkX3Byb3RlY3RlZCA9IDE7CisKKyAgICBiaW5kaW5nX3N0YWNrX3NpemUgPSBBTElHTl9V UCgKKyAgICAgICAgYmluZGluZ19zdGFja19zaXplID8gYmluZGluZ19zdGFja19zaXplIDogODE5 MiwgcHMpOworICAgIGYtPmJpbmRpbmdfc3RhY2tfYWxsb2Nfc2l6ZSA9IGJpbmRpbmdfc3RhY2tf c2l6ZSArIDMgKiBwczsKKyAgICBmLT5iaW5kaW5nX3N0YWNrX2Jhc2UgPSBtbWFwKE5VTEwsIGYt PmJpbmRpbmdfc3RhY2tfYWxsb2Nfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAtMSwgMCk7CisgICAgaWYgKGYtPmJpbmRpbmdfc3RhY2tfYmFzZSA9PSBNQVBf RkFJTEVEKSB7CisgICAgICAgIG11bm1hcChmLT5zdGFja19iYXNlLCBmLT5zdGFja19hbGxvY19z aXplKTsKKyAgICAgICAgZnJlZShmKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAg IG1wcm90ZWN0KChjaGFyICopZi0+YmluZGluZ19zdGFja19iYXNlICsgYmluZGluZ19zdGFja19z aXplICsgcHMsCisgICAgICAgICAgICAgMiAqIHBzLCBQUk9UX05PTkUpOworICAgIGYtPmJpbmRp bmdfc3RhY2tfZW5kID0gKGxpc3BvYmogKikoKGNoYXIgKilmLT5iaW5kaW5nX3N0YWNrX2Jhc2UK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgYmluZGluZ19zdGFja19z aXplKTsKKyAgICBmLT5iaW5kaW5nX3N0YWNrX3BvaW50ZXIgPSBmLT5iaW5kaW5nX3N0YWNrX2Jh c2U7CisgICAgZi0+YmluZGluZ19zdGFja19zdGFydF9mb3JfdGhyZWFkID0gZi0+YmluZGluZ19z dGFja19iYXNlOworICAgIGYtPmJzX2d1YXJkX3Byb3RlY3RlZCA9IDE7CisKKyAgICBpZiAoc2Jf ZmliZXJfbGlzcF9zdGFja19hbGxvYyhmLCBzdGFja19zaXplKSAhPSAwKSB7CisgICAgICAgIG11 bm1hcChmLT5zdGFja19iYXNlLCBmLT5zdGFja19hbGxvY19zaXplKTsKKyAgICAgICAgbXVubWFw KGYtPmJpbmRpbmdfc3RhY2tfYmFzZSwgZi0+YmluZGluZ19zdGFja19hbGxvY19zaXplKTsKKyAg ICAgICAgZnJlZShmKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBm OworfQorCisvKiBtYWluIGZpYmVyIHdyYXBzIHRoZSB0aHJlYWQncyBvd24gc3RhY2suICovCitz dHJ1Y3Qgc2JfZmliZXJfY3R4ICpzYl9maWJlcl9jcmVhdGVfbWFpbihzdHJ1Y3QgdGhyZWFkICp0 aCkKK3sKKyAgICBzdHJ1Y3Qgc2JfZmliZXJfY3R4ICpmID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1 Y3Qgc2JfZmliZXJfY3R4KSk7CisgICAgaWYgKCFmKSByZXR1cm4gTlVMTDsKKyAgICBmLT5zdGF0 ZSA9IEZJQkVSX1JVTk5JTkc7CisgICAgZi0+YmluZGluZ19zdGFja19wb2ludGVyICAgICAgICAg ID0gZ2V0X2JpbmRpbmdfc3RhY2tfcG9pbnRlcih0aCk7CisgICAgZi0+YmluZGluZ19zdGFja19z dGFydF9mb3JfdGhyZWFkID0gdGgtPmJpbmRpbmdfc3RhY2tfc3RhcnQ7CisgICAgZi0+Y3VycmVu dF9jYXRjaF9ibG9jayAgICAgICAgICAgID0gdGgtPmN1cnJlbnRfY2F0Y2hfYmxvY2s7CisgICAg Zi0+Y3VycmVudF91bndpbmRfcHJvdGVjdF9ibG9jayAgID0gdGgtPmN1cnJlbnRfdW53aW5kX3By b3RlY3RfYmxvY2s7CisgICAgZi0+Y3NfZ3VhcmRfcHJvdGVjdGVkID0gdGgtPnN0YXRlX3dvcmQu Y29udHJvbF9zdGFja19ndWFyZF9wYWdlX3Byb3RlY3RlZDsKKyAgICBzYl9maWJlcl9saXNwX3N0 YWNrX2NhcHR1cmVfbWFpbihmLCB0aCk7CisgICAgcmV0dXJuIGY7Cit9CisKK3ZvaWQgc2JfZmli ZXJfcmVsZWFzZShzdHJ1Y3Qgc2JfZmliZXJfY3R4ICpmKQoreworICAgIGlmICghZikgcmV0dXJu OworICAgIGlmIChmLT5vd25lcikgc2JfZmliZXJfdW5yZWdpc3RlcihmLT5vd25lciwgZik7Cisg ICAgZmliZXJfZnJlZShmKTsKK30KKwordm9pZCBzYl9maWJlcl9yZWdpc3RlcihzdHJ1Y3QgdGhy ZWFkICp0aCwgc3RydWN0IHNiX2ZpYmVyX2N0eCAqZmliZXIpCit7CisgICAgYXNzZXJ0KGZpYmVy LT5vd25lciA9PSBOVUxMKTsKKyAgICBmaWJlci0+b3duZXIgPSB0aDsKKyAgICBmaWJlci0+bmV4 dCA9IHRocmVhZF9leHRyYV9kYXRhKHRoKS0+ZmliZXJfbGlzdDsKKyAgICBfX2F0b21pY19zdG9y ZV9uKCZ0aHJlYWRfZXh0cmFfZGF0YSh0aCktPmZpYmVyX2xpc3QsCisgICAgICAgICAgICAgICAg ICAgICBmaWJlciwgX19BVE9NSUNfUkVMRUFTRSk7Cit9CisKK3ZvaWQgc2JfZmliZXJfdW5yZWdp c3RlcihzdHJ1Y3QgdGhyZWFkICp0aCwgc3RydWN0IHNiX2ZpYmVyX2N0eCAqZmliZXIpCit7Cisg ICAgc3RydWN0IHNiX2ZpYmVyX2N0eCAqKnBwID0gJnRocmVhZF9leHRyYV9kYXRhKHRoKS0+Zmli ZXJfbGlzdDsKKyAgICB3aGlsZSAoKnBwKSB7CisgICAgICAgIGlmICgqcHAgPT0gZmliZXIpIHsK KyAgICAgICAgICAgICpwcCA9IGZpYmVyLT5uZXh0OworICAgICAgICAgICAgZmliZXItPm5leHQg PSBOVUxMOworICAgICAgICAgICAgZmliZXItPm93bmVyID0gTlVMTDsKKyAgICAgICAgICAgIHJl dHVybjsKKyAgICAgICAgfQorICAgICAgICBwcCA9ICYoKnBwKS0+bmV4dDsKKyAgICB9Cit9CisK K3N0YXRpYyBpbnQgZmliZXJfbGlzdF9yZW1vdmUoc3RydWN0IHRocmVhZCAqc3JjLCBzdHJ1Y3Qg c2JfZmliZXJfY3R4ICpmaWJlcikKK3sKKyAgICBzdHJ1Y3QgZXh0cmFfdGhyZWFkX2RhdGEgKmVk ID0gdGhyZWFkX2V4dHJhX2RhdGEoc3JjKTsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIHN0cnVj dCBzYl9maWJlcl9jdHggKipwcCA9ICZlZC0+ZmliZXJfbGlzdDsKKyAgICAgICAgc3RydWN0IHNi X2ZpYmVyX2N0eCAqY3VyID0KKyAgICAgICAgICAgIF9fYXRvbWljX2xvYWRfbigmZWQtPmZpYmVy X2xpc3QsIF9fQVRPTUlDX0FDUVVJUkUpOworICAgICAgICB3aGlsZSAoY3VyICYmIGN1ciAhPSBm aWJlcikgeworICAgICAgICAgICAgcHAgID0gJmN1ci0+bmV4dDsKKyAgICAgICAgICAgIGN1ciA9 IGN1ci0+bmV4dDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWN1cikgcmV0dXJuIC0xOyAgICAg ICAgICAgLyogZmliZXIgbm90IG9uIHRoaXMgbGlzdCAqLworICAgICAgICBzdHJ1Y3Qgc2JfZmli ZXJfY3R4ICpuZXh0ID0gY3VyLT5uZXh0OworICAgICAgICBpZiAocHAgPT0gJmVkLT5maWJlcl9s aXN0KSB7CisgICAgICAgICAgICBzdHJ1Y3Qgc2JfZmliZXJfY3R4ICpleHBlY3RlZCA9IGZpYmVy OworICAgICAgICAgICAgaWYgKF9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfbigmZWQtPmZpYmVy X2xpc3QsICZleHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbmV4dCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19BVE9NSUNfQUNRX1JFTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19BVE9NSUNfQUNRVUlSRSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7Cisg ICAgICAgICAgICBjb250aW51ZTsgICAgICAgICAgICAgICAgICAgLyogaGVhZCBjaGFuZ2VkOyBy ZXN0YXJ0IHdhbGsgKi8KKyAgICAgICAgfQorICAgICAgICAqcHAgPSBuZXh0OworICAgICAgICBy ZXR1cm4gMDsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGZpYmVyX2xpc3RfaW5zZXJ0KHN0cnVj dCB0aHJlYWQgKmRlc3QsIHN0cnVjdCBzYl9maWJlcl9jdHggKmZpYmVyKQoreworICAgIHN0cnVj dCBleHRyYV90aHJlYWRfZGF0YSAqZWQgPSB0aHJlYWRfZXh0cmFfZGF0YShkZXN0KTsKKyAgICBz dHJ1Y3Qgc2JfZmliZXJfY3R4ICpoZWFkOworICAgIGRvIHsKKyAgICAgICAgaGVhZCA9IF9fYXRv bWljX2xvYWRfbigmZWQtPmZpYmVyX2xpc3QsIF9fQVRPTUlDX0FDUVVJUkUpOworICAgICAgICBm aWJlci0+bmV4dCA9IGhlYWQ7CisgICAgfSB3aGlsZSAoIV9fYXRvbWljX2NvbXBhcmVfZXhjaGFu Z2VfbigmZWQtPmZpYmVyX2xpc3QsICZoZWFkLCBmaWJlciwgMCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fQVRPTUlDX0FDUV9SRUwsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0FUT01JQ19BQ1FVSVJFKSk7Cit9CisKK3N0 YXRpYyBpbmxpbmUgdm9pZCBzYl9maWJlcl9lbnRlcl9wYShzdHJ1Y3QgdGhyZWFkICp0aCk7CisK K2ludCBzYl9maWJlcl9taWdyYXRlKHN0cnVjdCBzYl9maWJlcl9jdHggKmZpYmVyLCBzdHJ1Y3Qg dGhyZWFkICpkZXN0KQoreworICAgIGlmIChmaWJlci0+c3RhdGUgIT0gRklCRVJfUlVOTkFCTEUp IHJldHVybiAtMTsKKyAgICBzdHJ1Y3QgdGhyZWFkICpzcmMgPSBmaWJlci0+b3duZXI7CisgICAg aWYgKCFzcmMpIHJldHVybiAtMjsKKyAgICBpZiAoc3JjID09IGRlc3QpIHJldHVybiAwOworCisg ICAgc3RydWN0IHRocmVhZCAqc2VsZiA9IGdldF9zYl92bV90aHJlYWQoKTsKKyAgICBzYl9maWJl cl9lbnRlcl9wYShzZWxmKTsKKyAgICBpbnQgcmMgPSBmaWJlcl9saXN0X3JlbW92ZShzcmMsIGZp YmVyKTsKKyAgICBpZiAocmMgPT0gMCkgeworICAgICAgICBmaWJlci0+b3duZXIgPSBkZXN0Owor ICAgICAgICBzYl9maWJlcl9yZWJpbmRfdGhyZWFkKGZpYmVyLCBkZXN0KTsKKyAgICAgICAgZmli ZXJfbGlzdF9pbnNlcnQoZGVzdCwgZmliZXIpOworICAgIH0KKyAgICBzYl9maWJlcl9leGl0X3Bh KHNlbGYpOworICAgIHJldHVybiByYzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN3YXBfYmlu ZGluZ3NfZm9yd2FyZCAoc3RydWN0IHRocmVhZCAqdGgsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBsaXNwb2JqICpiYXNlLCBsaXNwb2JqICpsaW1pdCk7CitzdGF0 aWMgaW5saW5lIHZvaWQgc3dhcF9iaW5kaW5nc19iYWNrd2FyZChzdHJ1Y3QgdGhyZWFkICp0aCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3BvYmogKmJhc2Us IGxpc3BvYmogKmxpbWl0KTsKKwordm9pZCBzYl9maWJlcl9sb3dlcl9ic19ndWFyZChzdHJ1Y3Qg c2JfZmliZXJfY3R4ICpmKQoreworICAgIHNpemVfdCBwcyA9IG9zX3JlcG9ydGVkX3BhZ2Vfc2l6 ZTsKKyAgICBjaGFyICpiYXNlID0gKGNoYXIgKilmLT5iaW5kaW5nX3N0YWNrX2Jhc2U7CisgICAg c2l6ZV90IHVzYWJsZSA9IGYtPmJpbmRpbmdfc3RhY2tfYWxsb2Nfc2l6ZSAtIDMgKiBwczsKKyAg ICBtcHJvdGVjdChiYXNlICsgdXNhYmxlICsgcHMsIHBzLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRF KTsKKyAgICBtcHJvdGVjdChiYXNlICsgdXNhYmxlLCAgICAgIHBzLCBQUk9UX05PTkUpOworICAg IGYtPmJzX2d1YXJkX3Byb3RlY3RlZCA9IDA7Cit9CisKK3ZvaWQgc2JfZmliZXJfcmVzZXRfYnNf Z3VhcmQoc3RydWN0IHNiX2ZpYmVyX2N0eCAqZikKK3sKKyAgICBzaXplX3QgcHMgPSBvc19yZXBv cnRlZF9wYWdlX3NpemU7CisgICAgY2hhciAqYmFzZSA9IChjaGFyICopZi0+YmluZGluZ19zdGFj a19iYXNlOworICAgIHNpemVfdCB1c2FibGUgPSBmLT5iaW5kaW5nX3N0YWNrX2FsbG9jX3NpemUg LSAzICogcHM7CisgICAgbXByb3RlY3QoYmFzZSArIHVzYWJsZSArIHBzLCBwcywgUFJPVF9OT05F KTsKKyAgICBtcHJvdGVjdChiYXNlICsgdXNhYmxlLCAgICAgIHBzLCBQUk9UX1JFQUQgfCBQUk9U X1dSSVRFKTsKKyAgICBmLT5ic19ndWFyZF9wcm90ZWN0ZWQgPSAxOworfQorCitzdGF0aWMgaW50 IHNiX2ZpYmVyX2NsYXNzaWZ5X2JzX2ZhdWx0KHN0cnVjdCB0aHJlYWQgKnRoLCB2b2lkICphZGRy LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2JfZmliZXJf Y3R4ICoqb3V0X2ZpYmVyKQoreworICAgIHNpemVfdCBwcyA9IG9zX3JlcG9ydGVkX3BhZ2Vfc2l6 ZTsKKyAgICBjaGFyICphID0gKGNoYXIgKilhZGRyOworICAgIGZvciAoc3RydWN0IHNiX2ZpYmVy X2N0eCAqZiA9IHRocmVhZF9leHRyYV9kYXRhKHRoKS0+ZmliZXJfbGlzdDsKKyAgICAgICAgIGY7 IGYgPSBmLT5uZXh0KSB7CisgICAgICAgIGlmICghZi0+YmluZGluZ19zdGFja19iYXNlKSBjb250 aW51ZTsKKyAgICAgICAgY2hhciAqYmFzZSA9IChjaGFyICopZi0+YmluZGluZ19zdGFja19iYXNl OworICAgICAgICBzaXplX3QgdXNhYmxlID0gZi0+YmluZGluZ19zdGFja19hbGxvY19zaXplIC0g MyAqIHBzOworICAgICAgICBjaGFyICpyID0gYmFzZSArIHVzYWJsZSwgKnMgPSByICsgcHMsICpo ID0gcyArIHBzOworICAgICAgICBpZiAoYSA+PSBoICYmIGEgPCBoICsgcHMpIHsgaWYgKG91dF9m aWJlcikgKm91dF9maWJlciA9IGY7IHJldHVybiAxOyB9CisgICAgICAgIGlmIChhID49IHMgJiYg YSA8IHMgKyBwcykgeyBpZiAob3V0X2ZpYmVyKSAqb3V0X2ZpYmVyID0gZjsgcmV0dXJuIDI7IH0K KyAgICAgICAgaWYgKGEgPj0gciAmJiBhIDwgciArIHBzKSB7IGlmIChvdXRfZmliZXIpICpvdXRf ZmliZXIgPSBmOyByZXR1cm4gMzsgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworaW50IHNi X2ZpYmVyX2hhbmRsZV9ic19mYXVsdCh2b2lkICpjb250ZXh0Xywgdm9pZCAqYWRkciwgc3RydWN0 IHRocmVhZCAqdGgpCit7CisgICAgb3NfY29udGV4dF90ICpjb250ZXh0ID0gKG9zX2NvbnRleHRf dCAqKWNvbnRleHRfOworICAgIHN0cnVjdCBzYl9maWJlcl9jdHggKmYgPSBOVUxMOworICAgIGlu dCBraW5kID0gc2JfZmliZXJfY2xhc3NpZnlfYnNfZmF1bHQodGgsIGFkZHIsICZmKTsKKyAgICBp ZiAoa2luZCA9PSAxKSB7ICAgICAgICAgICAgICAgICAgICAvKiBIQVJEIGd1YXJkIGhpdCAqLwor ICAgICAgICBmYWtlX2ZvcmVpZ25fZnVuY3Rpb25fY2FsbChjb250ZXh0KTsKKyAgICAgICAgbG9z ZSgiRmliZXIgYmluZGluZyBzdGFjayBleGhhdXN0ZWQsIGZhdWx0OiAlcCwgUEM6ICVwIiwKKyAg ICAgICAgICAgICBhZGRyLCAodm9pZCopb3NfY29udGV4dF9wYyhjb250ZXh0KSk7CisgICAgfSBl bHNlIGlmIChraW5kID09IDIpIHsgICAgICAgICAgICAgLyogU09GVCBndWFyZCBoaXQgKi8KKyAg ICAgICAgc2JfZmliZXJfbG93ZXJfYnNfZ3VhcmQoZik7CisgICAgICAgIGlmIChsb3NlX29uX2Nv cnJ1cHRpb25fcCkgeworICAgICAgICAgICAgZmFrZV9mb3JlaWduX2Z1bmN0aW9uX2NhbGwoY29u dGV4dCk7CisgICAgICAgICAgICBsb3NlKCJGaWJlciBiaW5kaW5nIHN0YWNrIGV4aGF1c3RlZCAo bG9zZS1vbi1jb3JydXB0aW9uKSIpOworICAgICAgICB9CisgICAgICAgIHVuYmxvY2tfc2lnbmFs c19pbl9jb250ZXh0X2FuZF9tYXliZV93YXJuKGNvbnRleHQpOworICAgICAgICBhcnJhbmdlX3Jl dHVybl90b19saXNwX2Z1bmN0aW9uCisgICAgICAgICAgICAoY29udGV4dCwgU3RhdGljU3ltYm9s RnVuY3Rpb24oQklORElOR19TVEFDS19FWEhBVVNURURfRVJST1IpKTsKKyAgICAgICAgcmV0dXJu IDE7CisgICAgfSBlbHNlIGlmIChraW5kID09IDMpIHsgICAgICAgICAgICAgLyogUkVUVVJOIGd1 YXJkIC0tIHJlLWFybSAqLworICAgICAgICBzYl9maWJlcl9yZXNldF9ic19ndWFyZChmKTsKKyAg ICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIHJldHVybiAwOworfQorCit0eXBlZGVmIHZvaWQg KCpmaWJlcl9zd2FwX3JlZ3NfZm4pKHZvaWQgKnNhdmUsIHZvaWQgKnJlc3RvcmUpOworCisvKiBB IGZpYmVyIGNhbiBtaWdyYXRlIHRvIGEgZGlmZmVyZW50IE9TIHRocmVhZCBpbnNpZGUgZW50cnlf Zm4uICBUaGUKKyAqIGNvbXBpbGVyIG1heSBjYWNoZSB0aGUgVExTLXNsb3QgYWRkcmVzcyBvZiBg Y3VycmVudF90aHJlYWQnLCBtYWtpbmcKKyAqIGNhdXNpbmcgcG9zdC15aWVsZCBgZ2V0X3NiX3Zt X3RocmVhZCgpJyB0byByZWFkIHRoZSBvbGQgdGhyZWFkJ3MKKyAqIHNsb3QuICBIaWRlIHRoZSBy ZWFkIGJlaGluZCBhIG5vaW5saW5lIHRvIGRlZmVhdCB0aGUgY2FjaGUuICovCitzdGF0aWMgX19h dHRyaWJ1dGVfXygobm9pbmxpbmUpKSBzdHJ1Y3QgdGhyZWFkICpmcmVzaF9zYl92bV90aHJlYWQo dm9pZCkKK3sKKyAgICByZXR1cm4gZ2V0X3NiX3ZtX3RocmVhZCgpOworfQorCit2b2lkIGZpYmVy X3RyYW1wX2Moc3RydWN0IHNiX2ZpYmVyX2N0eCAqc2VsZikKK3sKKyAgICBzdHJ1Y3QgdGhyZWFk ICp0aCA9IGdldF9zYl92bV90aHJlYWQoKTsKKyNpZmRlZiBMSVNQX0ZFQVRVUkVfQVJNNjQKKyAg ICB0aC0+Y29udHJvbF9zdGFja19wb2ludGVyID0gc2VsZi0+Y29udHJvbF9zdGFja19wb2ludGVy OworICAgIHRoLT5jb250cm9sX2ZyYW1lX3BvaW50ZXIgPSBzZWxmLT5jb250cm9sX2ZyYW1lX3Bv aW50ZXI7CisjZW5kaWYKKyAgICBzYl9maWJlcl9leGl0X3BhKHRoKTsKKyAgICBzZWxmLT5lbnRy eV9mbihzZWxmLT5lbnRyeV9hcmcpOworICAgIHNlbGYtPnN0YXRlID0gRklCRVJfREVBRDsKKwor ICAgIGlmIChzZWxmLT5yZXR1cm5fZmliZXIpIHsKKyAgICAgICAgc3RydWN0IHNiX2ZpYmVyX2N0 eCAqcmV0ID0gc2VsZi0+cmV0dXJuX2ZpYmVyOworICAgICAgICBzdHJ1Y3QgdGhyZWFkICp0aCA9 IGZyZXNoX3NiX3ZtX3RocmVhZCgpOworICAgICAgICBzYl9maWJlcl9zd2l0Y2hfcHJlcChzZWxm LCByZXQpOworICAgICAgICB0aC0+Y3VycmVudF9jYXRjaF9ibG9jayAgICAgICAgICA9IHJldC0+ Y3VycmVudF9jYXRjaF9ibG9jazsKKyAgICAgICAgdGgtPmN1cnJlbnRfdW53aW5kX3Byb3RlY3Rf YmxvY2sgPSByZXQtPmN1cnJlbnRfdW53aW5kX3Byb3RlY3RfYmxvY2s7CisgICAgICAgIHNldF9i aW5kaW5nX3N0YWNrX3BvaW50ZXIodGgsIHJldC0+YmluZGluZ19zdGFja19wb2ludGVyKTsKKyAg ICAgICAgdGgtPmJpbmRpbmdfc3RhY2tfc3RhcnQgICAgICAgICAgPSByZXQtPmJpbmRpbmdfc3Rh Y2tfc3RhcnRfZm9yX3RocmVhZDsKKyAgICAgICAgcmV0LT5zdGF0ZSA9IEZJQkVSX1JVTk5JTkc7 CisgICAgICAgICgoZmliZXJfc3dhcF9yZWdzX2ZuKVNZTUJPTChGSUJFUl9TV0FQX1JFR1MpLT52 YWx1ZSkKKyAgICAgICAgICAgICgmc2VsZi0+cmVncywgJnJldC0+cmVncyk7CisgICAgfQorICAg IGxvc2UoImZpYmVyX3RyYW1wX2MgcmVhY2hlZCBwYXN0IGF1dG8tcmV0dXJuIik7Cit9CisKKy8q IC0tLSBCaW5kaW5nLXN0YWNrIHN3YXAgLS0tICovCisKKyNpZmRlZiBMSVNQX0ZFQVRVUkVfVExT X0xPQURfSU5ESVJFQ1QKK2V4dGVybiBsaXNwb2JqICp0bHNpbmRleF90b19zeW1ib2xfbWFwOwor ZXh0ZXJuIGludCB0bHNfbWFwX3N0YXJ0aW5nX29mZnNldDsKKyMgIGlmbmRlZiBOT19UTFNfVkFM VUVfTUFSS0VSCisjICAgIGRlZmluZSBOT19UTFNfVkFMVUVfTUFSS0VSICh+KHV3b3JkX3QpMCkK KyMgIGVuZGlmCisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIGV4Y2hhbmdlX2JpbmRpbmdf d2l0aF90bHMoc3RydWN0IHRocmVhZCAqdGgsIHN0cnVjdCBiaW5kaW5nICpiKQoreworICAgIGlm IChiLT5zeW1ib2wgJiYgYi0+c3ltYm9sICE9IFVOQk9VTkRfTUFSS0VSX1dJREVUQUcpIHsKKyNp ZmRlZiBMSVNQX0ZFQVRVUkVfU0JfVEhSRUFECisgICAgICAgIGxpc3BvYmogKnRsc19zbG90ID0g KGxpc3BvYmogKikoYi0+c3ltYm9sICsgKGNoYXIgKil0aCk7CisjZWxzZQorICAgICAgICBsaXNw b2JqICp0bHNfc2xvdCA9ICZTWU1CT0woYi0+c3ltYm9sKS0+dmFsdWU7CisjZW5kaWYKKyAgICAg ICAgbGlzcG9iaiB0bXAgPSAqdGxzX3Nsb3Q7CisgICAgICAgICp0bHNfc2xvdCA9IGItPnZhbHVl OworICAgICAgICBiLT52YWx1ZSA9IHRtcDsKKworI2lmZGVmIExJU1BfRkVBVFVSRV9UTFNfTE9B RF9JTkRJUkVDVAorICAgICAgICAvKiBNYWludGFpbiB0aGUgaW5kaXJlY3QgY2VsbCBmb3Igc3lt Ym9scyBhdCBvciBhYm92ZSB0aGUKKyAgICAgICAgICogbWFwLXN0YXJ0aW5nIG9mZnNldCAob3Ro ZXJzIGFyZSA6YWx3YXlzLXRocmVhZC1sb2NhbDsgc2VlCisgICAgICAgICAqIFJFQURNRS5tZCAi QmluZGluZy1zdGFjayBzd2FwIikuICovCisgICAgICAgIGlmIChiLT5zeW1ib2wgPj0gKGxpc3Bv YmopdGxzX21hcF9zdGFydGluZ19vZmZzZXQpIHsKKyAgICAgICAgICAgIGxpc3BvYmogKmluZGly ZWN0X2NlbGwgPQorICAgICAgICAgICAgICAgIChsaXNwb2JqICopKChjaGFyICopdGggKyBiLT5z eW1ib2wgLSBOX1dPUkRfQllURVMpOworICAgICAgICAgICAgaWYgKCp0bHNfc2xvdCA9PSAobGlz cG9iailOT19UTFNfVkFMVUVfTUFSS0VSKSB7CisgICAgICAgICAgICAgICAgbGlzcG9iaiBzeW1i b2wgPQorICAgICAgICAgICAgICAgICAgICB0bHNpbmRleF90b19zeW1ib2xfbWFwW2ItPnN5bWJv bCA+PiAoMSArIFdPUkRfU0hJRlQpXTsKKyAgICAgICAgICAgICAgICAqaW5kaXJlY3RfY2VsbCA9 CisgICAgICAgICAgICAgICAgICAgIChzeW1ib2wgPT0gKGxpc3BvYmopTk9fVExTX1ZBTFVFX01B UktFUikKKyAgICAgICAgICAgICAgICAgICAgPyAobGlzcG9iaikoKGNoYXIgKil0aCArIGItPnN5 bWJvbCAtIDEpCisgICAgICAgICAgICAgICAgICAgIDogc3ltYm9sOworICAgICAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgICAgICAqaW5kaXJlY3RfY2VsbCA9IChsaXNwb2JqKSgoY2hhciAq KXRoICsgYi0+c3ltYm9sIC0gMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZgor ICAgIH0KK30KKworLyogU3dhcC1pbjogb2xkZXN0IC0+IG5ld2VzdC4gKi8KK3N0YXRpYyBpbmxp bmUgdm9pZCBzd2FwX2JpbmRpbmdzX2ZvcndhcmQoc3RydWN0IHRocmVhZCAqdGgsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3BvYmogKmJhc2UsIGxpc3BvYmog KmxpbWl0KQoreworICAgIGZvciAoc3RydWN0IGJpbmRpbmcgKmIgPSAoc3RydWN0IGJpbmRpbmcg KiliYXNlLAorICAgICAgICAgICAqZW5kID0gKHN0cnVjdCBiaW5kaW5nICopbGltaXQ7CisgICAg ICAgICBiIDwgZW5kOyBiKyspCisgICAgICAgIGV4Y2hhbmdlX2JpbmRpbmdfd2l0aF90bHModGgs IGIpOworfQorCisvKiBTd2FwLW91dDogbmV3ZXN0IC0+IG9sZGVzdC4gKi8KK3N0YXRpYyBpbmxp bmUgdm9pZCBzd2FwX2JpbmRpbmdzX2JhY2t3YXJkKHN0cnVjdCB0aHJlYWQgKnRoLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzcG9iaiAqYmFzZSwgbGlzcG9i aiAqbGltaXQpCit7CisgICAgc3RydWN0IGJpbmRpbmcgKnN0YXJ0ID0gKHN0cnVjdCBiaW5kaW5n ICopYmFzZTsKKyAgICBzdHJ1Y3QgYmluZGluZyAqYiAgICAgPSAoc3RydWN0IGJpbmRpbmcgKils aW1pdDsKKyAgICB3aGlsZSAoYiA+IHN0YXJ0KSB7IGItLTsgZXhjaGFuZ2VfYmluZGluZ193aXRo X3Rscyh0aCwgYik7IH0KK30KKworX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKQordm9pZCBzYl9m aWJlcl9zd2l0Y2hfcHJlcChzdHJ1Y3Qgc2JfZmliZXJfY3R4ICpmcm9tLCBzdHJ1Y3Qgc2JfZmli ZXJfY3R4ICp0bykKK3sKKyAgICBzdHJ1Y3QgdGhyZWFkICp0aCA9IGdldF9zYl92bV90aHJlYWQo KTsKKyAgICBzYl9maWJlcl9lbnRlcl9wYSh0aCk7CisKKyAgICBmcm9tLT5iaW5kaW5nX3N0YWNr X3BvaW50ZXIgPSBnZXRfYmluZGluZ19zdGFja19wb2ludGVyKHRoKTsKKworICAgIHNiX2ZpYmVy X2xpc3Bfc3RhY2tfc3VzcGVuZChmcm9tLCB0aCk7CisgICAgc2JfZmliZXJfbGlzcF9zdGFja19y ZXN1bWUodG8sIHRoKTsKKworICAgIGlmIChmcm9tLT5iaW5kaW5nX3N0YWNrX2Jhc2UpCisgICAg ICAgIHN3YXBfYmluZGluZ3NfYmFja3dhcmQodGgsIGZyb20tPmJpbmRpbmdfc3RhY2tfYmFzZSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tLT5iaW5kaW5nX3N0YWNrX3BvaW50 ZXIpOworICAgIGlmICh0by0+YmluZGluZ19zdGFja19iYXNlKQorICAgICAgICBzd2FwX2JpbmRp bmdzX2ZvcndhcmQodGgsIHRvLT5iaW5kaW5nX3N0YWNrX2Jhc2UsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0by0+YmluZGluZ19zdGFja19wb2ludGVyKTsKK30KKworc3RhdGljIGlu bGluZSB2b2lkIHNiX2ZpYmVyX2VudGVyX3BhKHN0cnVjdCB0aHJlYWQgKnRoKQoreworI2lmIGRl ZmluZWQgTElTUF9GRUFUVVJFX0FSTTY0CisgICAgKCh2b2xhdGlsZSB1aW50MzJfdCAqKSZ0aC0+ cHNldWRvX2F0b21pY19iaXRzKVswXSA9IGZsYWdfUHNldWRvQXRvbWljOworI2Vsc2UKKyAgICB0 aC0+cHNldWRvX2F0b21pY19iaXRzID0gKHV3b3JkX3QpdGg7CisjZW5kaWYKK30KKwordm9pZCBz Yl9maWJlcl9leGl0X3BhKHN0cnVjdCB0aHJlYWQgKnRoKQoreworI2lmIGRlZmluZWQgTElTUF9G RUFUVVJFX0FSTTY0CisgICAgdm9sYXRpbGUgdWludDMyX3QgKmhhbHZlcyA9ICh2b2xhdGlsZSB1 aW50MzJfdCAqKSZ0aC0+cHNldWRvX2F0b21pY19iaXRzOworICAgIGhhbHZlc1swXSA9IDA7Cisg ICAgaWYgKGhhbHZlc1sxXSkgeworICAgICAgICBoYWx2ZXNbMV0gPSAwOworICAgICAgICBhc20g dm9sYXRpbGUoImJyayAlMCIgOiA6ICJpIih0cmFwX1BlbmRpbmdJbnRlcnJ1cHQpKTsKKyAgICB9 CisjZWxzZQorICAgIHV3b3JkX3QgcGEgPSBfX3N5bmNfeG9yX2FuZF9mZXRjaCgmdGgtPnBzZXVk b19hdG9taWNfYml0cywgKHV3b3JkX3QpdGgpOworICAgIGlmIChwYSkgeworI2lmIGRlZmluZWQg TElTUF9GRUFUVVJFX1VEMl9CUkVBS1BPSU5UUworICAgICAgICBhc20gdm9sYXRpbGUoInVkMlxu XHQuYnl0ZSAlYzAiIDogOiAiaSIodHJhcF9QZW5kaW5nSW50ZXJydXB0KSk7CisjZWxzZQorICAg ICAgICBhc20gdm9sYXRpbGUoInVkMiIpOworI2VuZGlmCisgICAgfQorI2VuZGlmCit9CmRpZmYg LS1naXQgYS9zcmMvcnVudGltZS9maWJlci5oIGIvc3JjL3J1bnRpbWUvZmliZXIuaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLmFjNjgxNjRkNQotLS0gL2Rldi9udWxsCisr KyBiL3NyYy9ydW50aW1lL2ZpYmVyLmgKQEAgLTAsMCArMSwxMjQgQEAKKyNpZm5kZWYgU0JDTF9G SUJFUl9ICisjZGVmaW5lIFNCQ0xfRklCRVJfSAorCisjaW5jbHVkZSAibGlzcG9iai5oIgorCisj aWZkZWYgTElTUF9GRUFUVVJFX1NCX0ZJQkVSCisKKyNpbmNsdWRlICJnZW5lc2lzL3RocmVhZC5o IgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaWYgZGVmaW5l ZChMSVNQX0ZFQVRVUkVfWDg2XzY0KQorIyAgaW5jbHVkZSAieDg2LTY0LWZpYmVyLmgiCisjZWxp ZiBkZWZpbmVkKExJU1BfRkVBVFVSRV9BUk02NCkKKyMgIGluY2x1ZGUgImFybTY0LWZpYmVyLmgi CisjZWxzZQorIyAgZXJyb3IgImZpYmVyIHN1cHBvcnQgbm90IGltcGxlbWVudGVkIG9uIHRoaXMg YXJjaGl0ZWN0dXJlIgorI2VuZGlmCisKKy8qIE1pcnJvcmVkIGJ5IHRoZSBmaWJlci1zdGF0ZSBj b25zdGFudHMgb24gdGhlIExpc3Agc2lkZS4gKi8KK2VudW0gZmliZXJfc3RhdGUgeworICAgIEZJ QkVSX05FVyAgICAgID0gMCwKKyAgICBGSUJFUl9SVU5OQUJMRSA9IDEsCisgICAgRklCRVJfUlVO TklORyAgPSAyLAorICAgIEZJQkVSX0RFQUQgICAgID0gMworfTsKKworI2RlZmluZSBGSUJFUl9E RUZBVUxUX1NUQUNLX1NJWkUgICAgICAgICA2NTUzNgorI2RlZmluZSBGSUJFUl9ERUZBVUxUX0JJ TkRJTkdfU1RBQ0tfU0laRSA4MTkyCisKK3N0cnVjdCBzYl9maWJlcl9jdHggeworICAgIHN0cnVj dCBzYl9maWJlcl9yZWdzIHJlZ3M7CisgICAgZW51bSBmaWJlcl9zdGF0ZSAgICAgc3RhdGU7CisK KyAgICAvKiBDb250cm9sIHN0YWNrICovCisgICAgdm9pZCAgICAqc3RhY2tfYmFzZTsKKyAgICB2 b2lkICAgICpzdGFja19zdGFydDsKKyAgICB2b2lkICAgICpzdGFja19lbmQ7CisgICAgc2l6ZV90 ICAgc3RhY2tfYWxsb2Nfc2l6ZTsKKworICAgIC8qIEJpbmRpbmcgc3RhY2sgKi8KKyAgICBsaXNw b2JqICpiaW5kaW5nX3N0YWNrX2Jhc2U7CisgICAgbGlzcG9iaiAqYmluZGluZ19zdGFja19lbmQ7 CisgICAgbGlzcG9iaiAqYmluZGluZ19zdGFja19wb2ludGVyOworICAgIHNpemVfdCAgIGJpbmRp bmdfc3RhY2tfYWxsb2Nfc2l6ZTsKKyAgICAvKiBXaGF0IHRvIGluc3RhbGwgaW50byB0aHJlYWQt PmJpbmRpbmdfc3RhY2tfc3RhcnQgd2hpbGUgd2UgcnVuLiAqLworICAgIGxpc3BvYmogKmJpbmRp bmdfc3RhY2tfc3RhcnRfZm9yX3RocmVhZDsKKyAgICAvKiBQZXItZmliZXIgTGlzcC1zdGFjayBi b3VuZHMgaW5zdGFsbGVkIGluIHRocmVhZC0+Y29udHJvbF9zdGFja18qICovCisgICAgbGlzcG9i aiAqY29udHJvbF9zdGFja19iYXNlOworICAgIGxpc3BvYmogKmNvbnRyb2xfc3RhY2tfZW5kOwor I2lmZGVmIExJU1BfRkVBVFVSRV9BUk02NAorICAgIGxpc3BvYmogKmNvbnRyb2xfc3RhY2tfcG9p bnRlcjsKKyAgICBsaXNwb2JqICpjb250cm9sX2ZyYW1lX3BvaW50ZXI7CisgICAgc2l6ZV90ICAg Y29udHJvbF9zdGFja19hbGxvY19zaXplOworICAgIGxpc3BvYmogKmRpcnR5X2hpZ2g7CisjZW5k aWYKKworICAgIC8qIFNhdmVkIHRocmVhZC1zdHJ1Y3QgZmllbGRzLiAqLworICAgIGxpc3BvYmog IGN1cnJlbnRfY2F0Y2hfYmxvY2s7CisgICAgbGlzcG9iaiAgY3VycmVudF91bndpbmRfcHJvdGVj dF9ibG9jazsKKworICAgIHN0cnVjdCBzYl9maWJlcl9jdHggKm5leHQ7CisgICAgc3RydWN0IHRo cmVhZCAgICAgICAqb3duZXI7CisKKyAgICB2b2lkICgqZW50cnlfZm4pKHZvaWQgKmFyZyk7Cisg ICAgdm9pZCAgKmVudHJ5X2FyZzsKKworICAgIHN0cnVjdCBzYl9maWJlcl9jdHggKnJldHVybl9m aWJlcjsgIC8qIGF1dG8tcmV0dXJuIHRhcmdldCAqLworCisgICAgdW5zaWduZWQgY2hhciBjc19n dWFyZF9wcm90ZWN0ZWQ7CisgICAgdW5zaWduZWQgY2hhciBic19ndWFyZF9wcm90ZWN0ZWQ7Cit9 OworCisvKiBMaWZlY3ljbGUgKi8KK3N0cnVjdCBzYl9maWJlcl9jdHggKnNiX2ZpYmVyX2NyZWF0 ZShzaXplX3Qgc3RhY2tfc2l6ZSwgc2l6ZV90IGJpbmRpbmdfc3RhY2tfc2l6ZSk7CitzdHJ1Y3Qg c2JfZmliZXJfY3R4ICpzYl9maWJlcl9jcmVhdGVfbWFpbihzdHJ1Y3QgdGhyZWFkICp0aCk7Cit2 b2lkICAgICAgICAgICAgICAgICBzYl9maWJlcl9yZWxlYXNlKHN0cnVjdCBzYl9maWJlcl9jdHgg KmZpYmVyKTsKKworLyogR0MgcmVnaXN0cmF0aW9uICovCit2b2lkIHNiX2ZpYmVyX3JlZ2lzdGVy ICAoc3RydWN0IHRocmVhZCAqdGgsIHN0cnVjdCBzYl9maWJlcl9jdHggKmZpYmVyKTsKK3ZvaWQg c2JfZmliZXJfdW5yZWdpc3RlcihzdHJ1Y3QgdGhyZWFkICp0aCwgc3RydWN0IHNiX2ZpYmVyX2N0 eCAqZmliZXIpOworCisvKiBDcm9zcy10aHJlYWQgbWlncmF0aW9uICovCitpbnQgIHNiX2ZpYmVy X21pZ3JhdGUoc3RydWN0IHNiX2ZpYmVyX2N0eCAqZmliZXIsIHN0cnVjdCB0aHJlYWQgKmRlc3Qp OworCisvKiBUaHJlYWQtZXhpdCBjbGVhbnVwLiAgQ2FsbGVkIGZyb20gZnJlZV90aHJlYWRfc3Ry dWN0LiAqLwordm9pZCBzYl9maWJlcl9yZWxlYXNlX3JlZ2lzdGVyZWQoc3RydWN0IHRocmVhZCAq dGgpOworCisvKiBCaW5kaW5nLXN0YWNrIGd1YXJkIG1hbmlwdWxhdGlvbi4gKi8KK3ZvaWQgc2Jf ZmliZXJfbG93ZXJfYnNfZ3VhcmQoc3RydWN0IHNiX2ZpYmVyX2N0eCAqZik7Cit2b2lkIHNiX2Zp YmVyX3Jlc2V0X2JzX2d1YXJkKHN0cnVjdCBzYl9maWJlcl9jdHggKmYpOworCisvKiBIYW5kbGUg YSBTSUdTRUdWIC8gU0lHQlVTIGFkZHJlc3MgdGhhdCBtYXkgaGF2ZSBsYW5kZWQgb24gYQorICog ZmliZXIncyBiaW5kaW5nLXN0YWNrIGd1YXJkLiAqLworaW50IHNiX2ZpYmVyX2hhbmRsZV9ic19m YXVsdCh2b2lkICpjb250ZXh0LCB2b2lkICphZGRyLCBzdHJ1Y3QgdGhyZWFkICp0aCk7CisKK3Zv aWQgc2JfZmliZXJfc3dpdGNoX3ByZXAoc3RydWN0IHNiX2ZpYmVyX2N0eCAqZnJvbSwgc3RydWN0 IHNiX2ZpYmVyX2N0eCAqdG8pOwordm9pZCBzYl9maWJlcl9leGl0X3BhICAgIChzdHJ1Y3QgdGhy ZWFkICp0aCk7CisKKy8qIEFyY2gtc3BlY2lmaWMgaGVscGVycyAqLwordm9pZCAgc2JfZmliZXJf cHJlcGFyZShzdHJ1Y3Qgc2JfZmliZXJfY3R4ICpmLCB2b2lkICgqZm4pKHZvaWQgKiksIHZvaWQg KmFyZyk7Cit2b2lkICpzYl9maWJlcl9zcCAoY29uc3Qgc3RydWN0IHNiX2ZpYmVyX2N0eCAqZik7 Cit2b2lkICBzYl9maWJlcl9yZWJpbmRfdGhyZWFkKHN0cnVjdCBzYl9maWJlcl9jdHggKmYsIHN0 cnVjdCB0aHJlYWQgKm5ld19vd25lcik7CisvKiBXcml0ZSB0aGUgZmliZXIncyBjYWxsZWUtc2F2 ZWQgR0MtcmVsZXZhbnQgcmVnaXN0ZXIgd29yZHMgaW50byBPVVQKKyAqICh1cCB0byBNQVgpLiBS ZXR1cm4gdGhlIGNvdW50IGFjdHVhbGx5IHdyaXR0ZW4uICovCitpbnQgICBzYl9maWJlcl9nY19y ZWdzKGNvbnN0IHN0cnVjdCBzYl9maWJlcl9jdHggKmYsIGxpc3BvYmogKm91dCwgaW50IG1heCk7 CisKKy8qIEdDLXNpZGUgZW50cnkgcG9pbnRzIChzaGFyZWQgYm9keSBpbiBmaWJlci5jKS4gIEVh Y2ggR0MgVFUgcHJvdmlkZXMKKyAqIGdjX3ByZXNlcnZlX2ZpYmVyX3dvcmQgYW5kIGdjX3NjYXZf ZmliZXJfYmluZGluZ19zdGFjayBhcyBsZWFmCisgKiBmdW5jdGlvbnM7IHRoZSBzaGFyZWQgc2Nh bm5lcnMgY2FsbCB0aGVtIGJ5IG5hbWUuICovCit2b2lkIGdjX3NjYW5fZmliZXJfc3RhY2tzICAg ICAgICAgKHN0cnVjdCB0aHJlYWQgKnRoKTsKK3ZvaWQgZ2Nfc2Nhdl9maWJlcl9iaW5kaW5nX3N0 YWNrcyAoc3RydWN0IHRocmVhZCAqdGgpOworCisvKiBQZXItZmliZXIgTGlzcCBjb250cm9sIHN0 YWNrIGhvb2tzICovCitpbnQgIHNiX2ZpYmVyX2xpc3Bfc3RhY2tfYWxsb2MgICAgICAgKHN0cnVj dCBzYl9maWJlcl9jdHggKmYsIHNpemVfdCBzaXplKTsKK3ZvaWQgc2JfZmliZXJfbGlzcF9zdGFj a19mcmVlICAgICAgICAoc3RydWN0IHNiX2ZpYmVyX2N0eCAqZik7Cit2b2lkIHNiX2ZpYmVyX2xp c3Bfc3RhY2tfY2FwdHVyZV9tYWluKHN0cnVjdCBzYl9maWJlcl9jdHggKmYsIHN0cnVjdCB0aHJl YWQgKnRoKTsKK3ZvaWQgc2JfZmliZXJfbGlzcF9zdGFja19zdXNwZW5kICAgICAoc3RydWN0IHNi X2ZpYmVyX2N0eCAqZiwgc3RydWN0IHRocmVhZCAqdGgpOwordm9pZCBzYl9maWJlcl9saXNwX3N0 YWNrX3Jlc3VtZSAgICAgIChzdHJ1Y3Qgc2JfZmliZXJfY3R4ICpmLCBzdHJ1Y3QgdGhyZWFkICp0 aCk7CisKK3ZvaWQgZmliZXJfdHJhbXBfYyhzdHJ1Y3Qgc2JfZmliZXJfY3R4ICpzZWxmKTsKKwor I2VuZGlmIC8qIExJU1BfRkVBVFVSRV9TQl9GSUJFUiAqLworI2VuZGlmIC8qIFNCQ0xfRklCRVJf SCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3J1bnRpbWUvZ2VuY2djLmMgYi9zcmMvcnVudGltZS9nZW5j Z2MuYwppbmRleCBjYzUyYjdmNWYuLjRjMzliMTA5OSAxMDA2NDQKLS0tIGEvc3JjL3J1bnRpbWUv Z2VuY2djLmMKKysrIGIvc3JjL3J1bnRpbWUvZ2VuY2djLmMKQEAgLTUxLDYgKzUxLDcgQEAKICNp bmNsdWRlICJnZW5lc2lzL2Jyb3RoZXJ0cmVlLmgiCiAjaW5jbHVkZSAiZ2VuZXNpcy9zcGxpdC1v cmRlcmVkLWxpc3QuaCIKICNpbmNsdWRlICJ2YXItaW8uaCIKKyNpbmNsdWRlICJmaWJlci5oIgog CiAvKiBmb3J3YXJkIGRlY2xhcmF0aW9ucyAqLwogZXh0ZXJuIEZJTEUgKmdjX2FjdGl2aXR5bG9n KCk7CkBAIC0xNDUxLDE0ICsxNDUyLDE3IEBAIHN0YXRpYyBsaXNwb2JqIGNvbnNlcnZhdGl2ZV9y b290X3AobGlzcG9iaiBhZGRyLCBwYWdlX2luZGV4X3QgYWRkcl9wYWdlX2luZGV4KQogICAgICAg ICAmJiBwbGF1c2libGVfdGFnX3AoYWRkcikpIHJldHVybiBBTUJJR1VPVVNfUE9JTlRFUjsKICAg ICByZXR1cm4gMDsKIH0KLSNlbGlmIGRlZmluZWQgTElTUF9GRUFUVVJFX01JUFMgfHwgZGVmaW5l ZCBMSVNQX0ZFQVRVUkVfUFBDNjQgfHwgZGVmaW5lZCBMSVNQX0ZFQVRVUkVfUFBDCisjZWxpZiBk ZWZpbmVkIExJU1BfRkVBVFVSRV9NSVBTIHx8IGRlZmluZWQgTElTUF9GRUFUVVJFX1BQQzY0IHx8 IGRlZmluZWQgTElTUF9GRUFUVVJFX1BQQyBcCisgICB8fCAoZGVmaW5lZCBMSVNQX0ZFQVRVUkVf QVJNNjQgJiYgZGVmaW5lZCBMSVNQX0ZFQVRVUkVfU0JfRklCRVIpCiAvKiBDb25zaWRlciBpbnRl cmlvciBwb2ludGVycyB0byBjb2RlIGFzIHJvb3RzLgogICogQnV0IG1vc3Qgb3RoZXIgcG9pbnRl cnMgYXJlICp1bmFtYmlndW91cyogY29uc2VydmF0aXZlIHJvb3RzLgogICogVGhpcyBpcyBub3Qg Imxlc3MgY29uc2VydmF0aXZlIiBwZXIgc2UsIHRoYW4gdGhlIG5vbi1wcmVjaXNlIGNvZGUsCiAg KiBiZWNhdXNlIGl0J3MgYWN0dWFsbHkgdXAgdG8gdGhlIHVzZXIgb2YgdGhpcyBwcmVkaWNhdGUg dG8gZGVjaWRlIHdoZWh0aGVyCiAgKiB0aGUgY29udHJvbCBzdGFjayBhcyBhIHdob2xlIGlzIHNj YW5uZWQgZm9yIG9iamVjdHMgdG8gcGluLgogICogVGhlIHNvLWNhbGxlZCAicHJlY2lzZSIgY29k ZSBzaG91bGQgZ2VuZXJhbGx5IE5PVCBzY2FuIHRoZSBzdGFjaywKLSAqIGFuZCBub3QgY2FsbCB0 aGlzIG9uIHN0YWNrIHdvcmRzLgorICogYW5kIG5vdCBjYWxsIHRoaXMgb24gc3RhY2sgd29yZHMu ICBBUk02NCB1c2VzIHRoaXMgb25seSBmb3IgZmliZXIKKyAqIHN0YWNrIHNjYW5uaW5nLCB3aGVy ZSB0aGUgQyBjb250cm9sIHN0YWNrIG9mIHN1c3BlbmRlZCBmaWJlcnMgaGFzCisgKiBubyBwcmVj aXNlIHJvb3QgaW5mb3JtYXRpb24uCiAgKiBBbnl3YXksIHRoaXMgY29kZSBpc24ndCBhcyBwZXJm b3JtYW5jZS1jcml0aWNhbCBhcyB0aGUgeDg2IHZhcmlhbnQsCiAgKiBzbyBpdCdzIG5vdCB3b3J0 aCB0cnlpbmcgdG8gb3B0aW1pemUgb3V0IHRoZSBzZWFyY2ggZm9yIHRoZSBvYmplY3QgKi8KIHN0 YXRpYyBsaXNwb2JqIGNvbnNlcnZhdGl2ZV9yb290X3AobGlzcG9iaiBhZGRyLCBwYWdlX2luZGV4 X3QgYWRkcl9wYWdlX2luZGV4KQpAQCAtMjAwNyw3ICsyMDExLDggQEAgc3RhdGljIHZvaWQgaW1w YXJ0X21hcmtfc3RpY2tpbmVzcyhsaXNwb2JqIHdvcmQpCiB9CiAjZW5kaWYKIAotI2lmICFHRU5D R0NfSVNfUFJFQ0lTRSB8fCBkZWZpbmVkIExJU1BfRkVBVFVSRV9NSVBTIHx8IGRlZmluZWQgTElT UF9GRUFUVVJFX1BQQzY0IHx8IGRlZmluZWQgTElTUF9GRUFUVVJFX1BQQworI2lmICFHRU5DR0Nf SVNfUFJFQ0lTRSB8fCBkZWZpbmVkIExJU1BfRkVBVFVSRV9NSVBTIHx8IGRlZmluZWQgTElTUF9G RUFUVVJFX1BQQzY0IHx8IGRlZmluZWQgTElTUF9GRUFUVVJFX1BQQyBcCisgICAgfHwgKGRlZmlu ZWQgTElTUF9GRUFUVVJFX0FSTTY0ICYmIGRlZmluZWQgTElTUF9GRUFUVVJFX1NCX0ZJQkVSKQog LyogVGFrZSBhIHBvc3NpYmxlIHBvaW50ZXIgdG8gYSBMaXNwIG9iamVjdCBhbmQgbWFyayBpdHMg cGFnZSBpbiB0aGUKICAqIHBhZ2VfdGFibGUgc28gdGhhdCBpdCB3aWxsIG5vdCBiZSByZWxvY2F0 ZWQgZHVyaW5nIGEgR0MuCiAgKgpAQCAtMjA2Myw3ICsyMDY4LDkgQEAgc3RhdGljIHZvaWQgTk9f U0FOSVRJWkVfTUVNT1JZIHByZXNlcnZlX3BvaW50ZXIob3NfY29udGV4dF9yZWdpc3Rlcl90IHdv cmQsIHZvaWQKICAgICBsaXNwb2JqKiBmb3VuZCA9IHNlYXJjaF9keW5hbWljX3NwYWNlKCh2b2lk Kil3b3JkKTsKICAgICBpZiAoZm91bmQpIGdjX21hcmtfb2JqKGNvbXB1dGVfbGlzcG9iaihmb3Vu ZCkpOwogfQorI2VuZGlmCiAKKyNpZiAhR0VOQ0dDX0lTX1BSRUNJU0UgfHwgZGVmaW5lZCBMSVNQ X0ZFQVRVUkVfTUlQUyB8fCBkZWZpbmVkIExJU1BfRkVBVFVSRV9QUEM2NCB8fCBkZWZpbmVkIExJ U1BfRkVBVFVSRV9QUEMKIHN0YXRpYyB2b2lkIHN0aWNreV9wcmVzZXJ2ZV9wb2ludGVyKG9zX2Nv bnRleHRfcmVnaXN0ZXJfdCByZWdpc3Rlcl93b3JkLCB2b2lkKiBhcmcpCiB7CiAgICAgLy8gcmVn aXN0ZXJzIGNhbiBiZSB3aWRlciB0aGFuIHdvcmRzLiBUaGlzIGNvdWxkIGFjY2VwdCB1d29yZF90 IGFzIHRoZSBhcmcgdHlwZQpAQCAtMzE0NSw2ICszMTUyLDIxIEBAIHN0YXRpYyB2b2lkIHBpbl9j YWxsX2NoYWluX2FuZF9ib3hlZF9yZWdpc3RlcnMoc3RydWN0IHRocmVhZCogdGgpIHsKIH0KICNl bmRpZgogCisjaWZkZWYgTElTUF9GRUFUVVJFX1NCX0ZJQkVSCisvKiBMZWFmIGhvb2tzIHN1cHBs aWVkIHRvIHRoZSBzaGFyZWQgc2Nhbm5lcnMgaW4gZmliZXIuYy4gKi8KK3ZvaWQgZ2NfcHJlc2Vy dmVfZmliZXJfd29yZChsaXNwb2JqIHdvcmQpCit7CisgICAgLyogU2tpcCB3b3JkcyBiZWxvdyB0 aGUgbnVsbC10cmFwIHJlZ2lvbiAoc21hbGwgZml4bnVtcywgc2NhbGFycykuICovCisgICAgaWYg KHdvcmQgPj0gQkFDS0VORF9QQUdFX0JZVEVTKQorICAgICAgICBwcmVzZXJ2ZV9wb2ludGVyKHdv cmQsIDApOworfQorCit2b2lkIGdjX3NjYXZfZmliZXJfYmluZGluZ19zdGFjayhsaXNwb2JqICpi YXNlLCBsaXNwb2JqICplbmQpCit7CisgICAgc2Nhdl9iaW5kaW5nX3N0YWNrKGJhc2UsIGVuZCwg Y29tcGFjdGluZ19wKCkgPyAwIDogZ2NfbWFya19vYmopOworfQorI2VuZGlmIC8qIExJU1BfRkVB VFVSRV9TQl9GSUJFUiAqLworCiAjaWYgIUdFTkNHQ19JU19QUkVDSVNFCiBleHRlcm4gdm9pZCB2 aXNpdF9jb250ZXh0X3JlZ2lzdGVycyh2b2lkICgqcHJvYykob3NfY29udGV4dF9yZWdpc3Rlcl90 LCB2b2lkKiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvc19jb250ZXh0 X3QgKmNvbnRleHQsIHZvaWQqKTsKQEAgLTM0MjcsNiArMzQ0OSw5IEBAIGdhcmJhZ2VfY29sbGVj dF9nZW5lcmF0aW9uKGdlbmVyYXRpb25faW5kZXhfdCBnZW5lcmF0aW9uLCBpbnQgcmFpc2UsCiAg ICAgICAgICAgICBzZW1pY29uc2VydmF0aXZlX3Bpbl9zdGFjayh0aCwgZ2VuZXJhdGlvbik7CiAj ZWxpZiBkZWZpbmVkIHJlZ19MSU5LX1JFVFVSTgogICAgICAgICAgICAgcGluX2NhbGxfY2hhaW5f YW5kX2JveGVkX3JlZ2lzdGVycyh0aCk7CisjZW5kaWYKKyNpZmRlZiBMSVNQX0ZFQVRVUkVfU0Jf RklCRVIKKyAgICAgICAgICAgIGdjX3NjYW5fZmliZXJfc3RhY2tzKHRoKTsKICNlbmRpZgogICAg ICAgICB9CiAgICAgfQpAQCAtMzUyNCw2ICszNTQ5LDkgQEAgZ2FyYmFnZV9jb2xsZWN0X2dlbmVy YXRpb24oZ2VuZXJhdGlvbl9pbmRleF90IGdlbmVyYXRpb24sIGludCByYWlzZSwKICAgICAgICAg ICAgIHNjYXZfYmluZGluZ19zdGFjaygobGlzcG9iaiopdGgtPmJpbmRpbmdfc3RhY2tfc3RhcnQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpc3BvYmoqKWdldF9iaW5kaW5nX3N0 YWNrX3BvaW50ZXIodGgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhY3Rp bmdfcCgpID8gMCA6IGdjX21hcmtfb2JqKTsKKyNpZmRlZiBMSVNQX0ZFQVRVUkVfU0JfRklCRVIK KyAgICAgICAgICAgIGdjX3NjYXZfZmliZXJfYmluZGluZ19zdGFja3ModGgpOworI2VuZGlmCiAg ICAgICAgICAgICAvKiBkbyB0aGUgdGxzIGFzIHdlbGwgKi8KICAgICAgICAgICAgIGxpc3BvYmoq IGZyb20gPSAmdGgtPmxpc3BfdGhyZWFkOwogICAgICAgICAgICAgbGlzcG9iaiogdG8gPSAobGlz cG9iaiopKFN5bWJvbFZhbHVlKEZSRUVfVExTX0lOREVYLDApICsgKGNoYXIqKXRoKTsKZGlmZiAt LWdpdCBhL3NyYy9ydW50aW1lL2ludGVycnVwdC5jIGIvc3JjL3J1bnRpbWUvaW50ZXJydXB0LmMK aW5kZXggZWE0NzFiZWM2Li45Yjk4N2YyZGYgMTAwNjQ0Ci0tLSBhL3NyYy9ydW50aW1lL2ludGVy cnVwdC5jCisrKyBiL3NyYy9ydW50aW1lL2ludGVycnVwdC5jCkBAIC00Miw2ICs0Miw4IEBACiAK ICNpbmNsdWRlICJnZW5lc2lzL3NiY2wuaCIKIAorI2luY2x1ZGUgImZpYmVyLmgiCisKICNpbmNs dWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgpA QCAtMTcxOSw3ICsxNzIxLDEwIEBAIGJvb2wgaGFuZGxlX2d1YXJkX3BhZ2VfdHJpZ2dlcmVkKG9z X2NvbnRleHRfdCAqY29udGV4dCxvc192bV9hZGRyZXNzX3QgYWRkcikKICAgICAgICAgICAgIChj b250ZXh0LCBTdGF0aWNTeW1ib2xGdW5jdGlvbihVTkRFRklORURfQUxJRU5fVkFSSUFCTEVfRVJS T1IpKTsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQotICAgIGVsc2UgcmV0dXJuIDA7CisjaWZk ZWYgTElTUF9GRUFUVVJFX1NCX0ZJQkVSCisgICAgaWYgKHNiX2ZpYmVyX2hhbmRsZV9ic19mYXVs dChjb250ZXh0LCBhZGRyLCB0aCkpIHJldHVybiAxOworI2VuZGlmCisgICAgcmV0dXJuIDA7CiB9 CiAMCiAjaWZuZGVmIExJU1BfRkVBVFVSRV9XSU4zMgpkaWZmIC0tZ2l0IGEvc3JjL3J1bnRpbWUv aW50ZXJydXB0LmggYi9zcmMvcnVudGltZS9pbnRlcnJ1cHQuaAppbmRleCBjOGFlZGIwYjEuLjU3 N2ViNWJjNiAxMDA2NDQKLS0tIGEvc3JjL3J1bnRpbWUvaW50ZXJydXB0LmgKKysrIGIvc3JjL3J1 bnRpbWUvaW50ZXJydXB0LmgKQEAgLTM5LDYgKzM5LDcgQEAgZXh0ZXJuIHZvaWQgYmxvY2tfZGVm ZXJyYWJsZV9zaWduYWxzKHNpZ3NldF90ICpvbGQpOwogZXh0ZXJuIHZvaWQgYmxvY2tfYmxvY2th YmxlX3NpZ25hbHMoc2lnc2V0X3QgKm9sZCk7CiAKIGV4dGVybiB2b2lkIHVuYmxvY2tfZGVmZXJy YWJsZV9zaWduYWxzKHNpZ3NldF90ICp3aGVyZSk7CitleHRlcm4gdm9pZCB1bmJsb2NrX3NpZ25h bHNfaW5fY29udGV4dF9hbmRfbWF5YmVfd2Fybihvc19jb250ZXh0X3QgKmNvbnRleHQpOwogZXh0 ZXJuIHZvaWQgdW5ibG9ja19nY19zdG9wX3NpZ25hbCh2b2lkKTsKIAogZXh0ZXJuIHZvaWQgbWF5 YmVfc2F2ZV9nY19tYXNrX2FuZF9ibG9ja19kZWZlcnJhYmxlcyhvc19jb250ZXh0X3QgKmNvbnRl eHQpOwpkaWZmIC0tZ2l0IGEvc3JjL3J1bnRpbWUvcG1yZ2MuYyBiL3NyYy9ydW50aW1lL3Btcmdj LmMKaW5kZXggZTY4YTI4M2Q0Li5jYjYxYjBmOTggMTAwNjQ0Ci0tLSBhL3NyYy9ydW50aW1lL3Bt cmdjLmMKKysrIGIvc3JjL3J1bnRpbWUvcG1yZ2MuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1 ZGUgImdlbmVzaXMvZ2MtdGFibGVzLmgiCiAjaW5jbHVkZSAiZ2VuZXNpcy9zcGxpdC1vcmRlcmVk LWxpc3QuaCIKICNpbmNsdWRlICJ0aHJlYWQuaCIKKyNpbmNsdWRlICJmaWJlci5oIgogI2luY2x1 ZGUgInN5c19tbWFwLmluYyIKIAogLyogZm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KQEAgLTQyMSw3 ICs0MjIsOCBAQCBzdGF0aWMgdm9pZCBpbXBhcnRfbWFya19zdGlja2luZXNzKGxpc3BvYmogd29y ZCkKICAgICB9CiB9CiAKLSNpZiAhR0VOQ0dDX0lTX1BSRUNJU0UgfHwgZGVmaW5lZCBMSVNQX0ZF QVRVUkVfTUlQUyB8fCBkZWZpbmVkIExJU1BfRkVBVFVSRV9QUEM2NCB8fCBkZWZpbmVkIExJU1Bf RkVBVFVSRV9QUEMKKyNpZiAhR0VOQ0dDX0lTX1BSRUNJU0UgfHwgZGVmaW5lZCBMSVNQX0ZFQVRV UkVfTUlQUyB8fCBkZWZpbmVkIExJU1BfRkVBVFVSRV9QUEM2NCB8fCBkZWZpbmVkIExJU1BfRkVB VFVSRV9QUEMgXAorICAgIHx8IChkZWZpbmVkIExJU1BfRkVBVFVSRV9BUk02NCAmJiBkZWZpbmVk IExJU1BfRkVBVFVSRV9TQl9GSUJFUikKIHN0YXRpYyB2b2lkIHByZXNlcnZlX3BvaW50ZXIob3Nf Y29udGV4dF9yZWdpc3Rlcl90IG9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19hdHRyaWJ1dGVfXygodW51c2VkKSkgdm9pZCogYXJnKSB7CiAgICAgLyogVGhlIG1hcmstcmVn aW9uIEdDIG5ldmVyIGZpbHRlcnMgYmFzZWQgb24gdHlwZSB0YWdzLApAQCAtNjE3LDYgKzYxOSwx OSBAQCBzdGF0aWMgdm9pZCBwaW5fY2FsbF9jaGFpbl9hbmRfYm94ZWRfcmVnaXN0ZXJzKHN0cnVj dCB0aHJlYWQqIHRoKSB7CiB9CiAjZW5kaWYKIAorI2lmZGVmIExJU1BfRkVBVFVSRV9TQl9GSUJF Ugordm9pZCBnY19wcmVzZXJ2ZV9maWJlcl93b3JkKGxpc3BvYmogd29yZCkKK3sKKyAgICAvKiBt cl9wcmVzZXJ2ZV9vYmplY3Qgc2VsZi1maWx0ZXJzOyBubyBwcmUtY3VsbCBuZWVkZWQuICovCisg ICAgcHJlc2VydmVfcG9pbnRlcih3b3JkLCAwKTsKK30KKwordm9pZCBnY19zY2F2X2ZpYmVyX2Jp bmRpbmdfc3RhY2sobGlzcG9iaiAqYmFzZSwgbGlzcG9iaiAqZW5kKQoreworICAgIHNjYXZfYmlu ZGluZ19zdGFjayhiYXNlLCBlbmQsIG1yX3ByZXNlcnZlX29iamVjdCk7Cit9CisjZW5kaWYgLyog TElTUF9GRUFUVVJFX1NCX0ZJQkVSICovCisKICNpZiAhR0VOQ0dDX0lTX1BSRUNJU0UKIGV4dGVy biB2b2lkIHZpc2l0X2NvbnRleHRfcmVnaXN0ZXJzKHZvaWQgKCpwcm9jKShvc19jb250ZXh0X3Jl Z2lzdGVyX3QsIHZvaWQqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9z X2NvbnRleHRfdCAqY29udGV4dCwgdm9pZCopOwpAQCAtODgyLDYgKzg5Nyw5IEBAIGdhcmJhZ2Vf Y29sbGVjdF9nZW5lcmF0aW9uKGdlbmVyYXRpb25faW5kZXhfdCBnZW5lcmF0aW9uLCBpbnQgcmFp c2UsCiAgICAgICAgICAgICBzZW1pY29uc2VydmF0aXZlX3Bpbl9zdGFjayh0aCwgZ2VuZXJhdGlv bik7CiAjZWxpZiBkZWZpbmVkIHJlZ19MSU5LX1JFVFVSTgogICAgICAgICAgICAgcGluX2NhbGxf Y2hhaW5fYW5kX2JveGVkX3JlZ2lzdGVycyh0aCk7CisjZW5kaWYKKyNpZmRlZiBMSVNQX0ZFQVRV UkVfU0JfRklCRVIKKyAgICAgICAgICAgIGdjX3NjYW5fZmliZXJfc3RhY2tzKHRoKTsKICNlbmRp ZgogICAgICAgICB9CiAgICAgfQpAQCAtOTc4LDYgKzk5Niw5IEBAIGdhcmJhZ2VfY29sbGVjdF9n ZW5lcmF0aW9uKGdlbmVyYXRpb25faW5kZXhfdCBnZW5lcmF0aW9uLCBpbnQgcmFpc2UsCiAgICAg ICAgICAgICBzY2F2X2JpbmRpbmdfc3RhY2soKGxpc3BvYmoqKXRoLT5iaW5kaW5nX3N0YWNrX3N0 YXJ0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaXNwb2JqKilnZXRfYmluZGlu Z19zdGFja19wb2ludGVyKHRoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcl9w cmVzZXJ2ZV9vYmplY3QpOworI2lmZGVmIExJU1BfRkVBVFVSRV9TQl9GSUJFUgorICAgICAgICAg ICAgZ2Nfc2Nhdl9maWJlcl9iaW5kaW5nX3N0YWNrcyh0aCk7CisjZW5kaWYKICAgICAgICAgICAg IC8qIGRvIHRoZSB0bHMgYXMgd2VsbCAqLwogICAgICAgICAgICAgbGlzcG9iaiogZnJvbSA9ICZ0 aC0+bGlzcF90aHJlYWQ7CiAgICAgICAgICAgICBsaXNwb2JqKiB0byA9IChsaXNwb2JqKikoU3lt Ym9sVmFsdWUoRlJFRV9UTFNfSU5ERVgsMCkgKyAoY2hhciopdGgpOwpkaWZmIC0tZ2l0IGEvc3Jj L3J1bnRpbWUvdGhyZWFkLmggYi9zcmMvcnVudGltZS90aHJlYWQuaAppbmRleCA2OWI3OTg5MWYu LmM0M2UxYzkzYiAxMDA2NDQKLS0tIGEvc3JjL3J1bnRpbWUvdGhyZWFkLmgKKysrIGIvc3JjL3J1 bnRpbWUvdGhyZWFkLmgKQEAgLTMzLDYgKzMzLDEwIEBAIHZvaWQqIG9zX2dldF9jc3Aoc3RydWN0 IHRocmVhZCogdGgpOwogdm9pZCBhc3NlcnRfb25fc3RhY2soc3RydWN0IHRocmVhZCAqdGgsIHZv aWQgKmVzcCk7CiAjZW5kaWYgLyogZGVmaW5lZChMSVNQX0ZFQVRVUkVfU0JfU0FGRVBPSU5UKSAq LwogCisjaWZkZWYgTElTUF9GRUFUVVJFX1NCX0ZJQkVSCitzdHJ1Y3Qgc2JfZmliZXJfY3R4Owor I2VuZGlmCisKIC8qIFRoZSB0aHJlYWQgc3RydWN0IGlzIGdlbmVyYXRlZCBmcm9tIGxpc3AgZHVy aW5nIGdlbmVzaXMgYW5kIGl0CiAgKiBuZWVkcyB0byBrbm93IHRoZSBzaXplcyBvZiBhbGwgaXRz IG1lbWJlcnMsIGJ1dCBzb21lIHR5cGVzIG1heSBoYXZlCiAgKiBhcmJpdHJhcnkgbGVuZ3Rocywg dGh1cyB0aGUgcG9pbnRlcnMgYXJlIHN0b3JlZCBpbnN0ZWFkLiBUaGlzCkBAIC05MSw2ICs5NSw5 IEBAIHN0cnVjdCBleHRyYV90aHJlYWRfZGF0YQogICAgIG9zX2NvbnRleHRfcmVnaXN0ZXJfdCBj YXJyaWVkX2Jhc2VfcG9pbnRlcjsKICAgICBIQU5ETEUgc3luY2hyb25vdXNfaW9faGFuZGxlX2Fu ZF9mbGFnOwogICAgIHZvaWQqIHdhaXRpbmdfb25fYWRkcmVzczsgLy8gdXNlZCBvbmx5IGlmICMr c2ItZnV0ZXgKKyNlbmRpZgorI2lmZGVmIExJU1BfRkVBVFVSRV9TQl9GSUJFUgorICAgIHN0cnVj dCBzYl9maWJlcl9jdHggKmZpYmVyX2xpc3Q7IC8vIGhlYWQgb2YgcmVnaXN0ZXJlZCBmaWJlciBs aXN0CiAjZW5kaWYKICAgICBpbnQgYXJlbmFfY291bnQ7IC8vIG51bWJlciBvZiBzdHJ1Y3R1cmVz IGluIGFyZW5hX3NhdmVhcmVhcwogICAgIGFyZW5hX3N0YXRlKiBhcmVuYV9zYXZlYXJlYTsKZGlm ZiAtLWdpdCBhL3NyYy9ydW50aW1lL3g4Ni02NC1maWJlci5jIGIvc3JjL3J1bnRpbWUveDg2LTY0 LWZpYmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi4wOWZkMTcxOWUK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcnVudGltZS94ODYtNjQtZmliZXIuYwpAQCAtMCwwICsx LDEwOSBAQAorI2luY2x1ZGUgImZpYmVyLmgiCisjaW5jbHVkZSAiZ2VuZXNpcy9zeW1ib2wuaCIK KyNpbmNsdWRlICJnZW5lc2lzL3N0YXRpYy1zeW1ib2xzLmgiCisjaW5jbHVkZSA8c3RkaW50Lmg+ CisKK3ZvaWQgc2JfZmliZXJfcHJlcGFyZShzdHJ1Y3Qgc2JfZmliZXJfY3R4ICpmLAorICAgICAg ICAgICAgICAgICAgICAgIHZvaWQgKCpmbikodm9pZCAqKSwgdm9pZCAqYXJnKQoreworICAgIGYt PmVudHJ5X2ZuID0gZm47CisgICAgZi0+ZW50cnlfYXJnID0gYXJnOworCisgICAgdm9pZCAqKnNw ID0gKHZvaWQgKiopZi0+c3RhY2tfZW5kOworICAgIHNwID0gKHZvaWQgKiopKCh1aW50cHRyX3Qp c3AgJiB+MHhGVUxMKTsgICAgICAvKiAxNi1ieXRlIGFsaWduICovCisgICAgKigtLXNwKSA9ICh2 b2lkICopMDsKKyAgICAqKC0tc3ApID0gKHZvaWQgKilTWU1CT0woRklCRVJfVFJBTVApLT52YWx1 ZTsgLyogUkVUIHRhcmdldCAqLworCisgICAgZi0+cmVncy5yc3AgPSBzcDsKKyAgICBmLT5yZWdz LnJicCA9IDA7CisgICAgZi0+cmVncy5yYnggPSAwOworICAgIGYtPnJlZ3MucjEyID0gKHZvaWQg KilmOworICAgIGYtPnJlZ3MucjEzID0gMDsKKyAgICBmLT5yZWdzLnIxNCA9IDA7CisgICAgZi0+ cmVncy5yMTUgPSAwOworCisgICAgdWludDMyX3QgbXhjc3I7CisgICAgX19hc21fXyB2b2xhdGls ZSAoInN0bXhjc3IgJTAiIDogIj1tIihteGNzcikpOworICAgIGYtPnJlZ3MubXhjc3IgPSBteGNz cjsKKyAgICBmLT5yZWdzLnBhZF8gID0gMDsKK30KKwordm9pZCAqc2JfZmliZXJfc3AoY29uc3Qg c3RydWN0IHNiX2ZpYmVyX2N0eCAqZikKK3sKKyAgICByZXR1cm4gZi0+cmVncy5yc3A7Cit9CisK K2ludCBzYl9maWJlcl9nY19yZWdzKGNvbnN0IHN0cnVjdCBzYl9maWJlcl9jdHggKmYsIGxpc3Bv YmogKm91dCwgaW50IG1heCkKK3sKKyAgICBzdGF0aWMgY29uc3QgaW50IG4gPSA2OworICAgIGlm IChtYXggPCBuKSByZXR1cm4gMDsKKyAgICBpbnQgaSA9IDA7CisgICAgb3V0W2krK10gPSAobGlz cG9iailmLT5yZWdzLnJieDsKKyAgICBvdXRbaSsrXSA9IChsaXNwb2JqKWYtPnJlZ3MucmJwOwor ICAgIG91dFtpKytdID0gKGxpc3BvYmopZi0+cmVncy5yMTI7CisgICAgb3V0W2krK10gPSAobGlz cG9iailmLT5yZWdzLnIxMzsKKyAgICBvdXRbaSsrXSA9IChsaXNwb2JqKWYtPnJlZ3MucjE0Owor ICAgIG91dFtpKytdID0gKGxpc3BvYmopZi0+cmVncy5yMTU7CisgICAgcmV0dXJuIGk7Cit9CisK K3ZvaWQgc2JfZmliZXJfcmViaW5kX3RocmVhZChzdHJ1Y3Qgc2JfZmliZXJfY3R4ICpmLCBzdHJ1 Y3QgdGhyZWFkICpuZXdfb3duZXIpCit7CisgICAgZi0+cmVncy5yMTMgPSAodm9pZCAqKW5ld19v d25lcjsKK30KKworLyogTGlzcC1zdGFjayBob29rczogYWxpYXMgY29udHJvbF9zdGFja18qIHRv IHRoZSBmaWJlcidzIG5hdGl2ZSBDCisgICBzdGFjayByYW5nZS4gKi8KKworaW50IHNiX2ZpYmVy X2xpc3Bfc3RhY2tfYWxsb2Moc3RydWN0IHNiX2ZpYmVyX2N0eCAqZiwgc2l6ZV90IHNpemUpCit7 CisgICAgKHZvaWQpc2l6ZTsKKyAgICBmLT5jb250cm9sX3N0YWNrX2Jhc2UgPSAobGlzcG9iaiAq KWYtPnN0YWNrX2Jhc2U7CisgICAgZi0+Y29udHJvbF9zdGFja19lbmQgID0gKGxpc3BvYmogKilm LT5zdGFja19lbmQ7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgc2JfZmliZXJfbGlzcF9zdGFj a19mcmVlKHN0cnVjdCBzYl9maWJlcl9jdHggKmYpCit7CisgICAgZi0+Y29udHJvbF9zdGFja19i YXNlID0gTlVMTDsKKyAgICBmLT5jb250cm9sX3N0YWNrX2VuZCAgPSBOVUxMOworfQorCit2b2lk IHNiX2ZpYmVyX2xpc3Bfc3RhY2tfY2FwdHVyZV9tYWluKHN0cnVjdCBzYl9maWJlcl9jdHggKmYs IHN0cnVjdCB0aHJlYWQgKnRoKQoreworICAgIGYtPmNvbnRyb2xfc3RhY2tfYmFzZSA9IHRoLT5j b250cm9sX3N0YWNrX3N0YXJ0OworICAgIGYtPmNvbnRyb2xfc3RhY2tfZW5kICA9IHRoLT5jb250 cm9sX3N0YWNrX2VuZDsKKyAgICBmLT5jc19ndWFyZF9wcm90ZWN0ZWQgPQorICAgICAgICB0aC0+ c3RhdGVfd29yZC5jb250cm9sX3N0YWNrX2d1YXJkX3BhZ2VfcHJvdGVjdGVkOworfQorCit2b2lk IHNiX2ZpYmVyX2xpc3Bfc3RhY2tfc3VzcGVuZChzdHJ1Y3Qgc2JfZmliZXJfY3R4ICpmLCBzdHJ1 Y3QgdGhyZWFkICp0aCkKK3sKKyAgICBmLT5jb250cm9sX3N0YWNrX2Jhc2UgPSB0aC0+Y29udHJv bF9zdGFja19zdGFydDsKKyAgICBmLT5jb250cm9sX3N0YWNrX2VuZCAgPSB0aC0+Y29udHJvbF9z dGFja19lbmQ7CisgICAgZi0+Y3NfZ3VhcmRfcHJvdGVjdGVkID0gdGgtPnN0YXRlX3dvcmQuY29u dHJvbF9zdGFja19ndWFyZF9wYWdlX3Byb3RlY3RlZDsKK30KKwordm9pZCBzYl9maWJlcl9saXNw X3N0YWNrX3Jlc3VtZShzdHJ1Y3Qgc2JfZmliZXJfY3R4ICpmLCBzdHJ1Y3QgdGhyZWFkICp0aCkK K3sKKyAgICB0aC0+Y29udHJvbF9zdGFja19zdGFydCA9IGYtPmNvbnRyb2xfc3RhY2tfYmFzZTsK KyAgICB0aC0+Y29udHJvbF9zdGFja19lbmQgICA9IGYtPmNvbnRyb2xfc3RhY2tfZW5kOworICAg IHRoLT5zdGF0ZV93b3JkLmNvbnRyb2xfc3RhY2tfZ3VhcmRfcGFnZV9wcm90ZWN0ZWQgPSBmLT5j c19ndWFyZF9wcm90ZWN0ZWQ7Cit9CisKK3NpemVfdCBzYl9maWJlcl9jb250cm9sX3N0YWNrX3Np emVfYnl0ZXMoY29uc3Qgc3RydWN0IHNiX2ZpYmVyX2N0eCAqZikKK3sKKyAgICBpZiAoZi0+c3Rh Y2tfc3RhcnQgJiYgZi0+c3RhY2tfZW5kKQorICAgICAgICByZXR1cm4gKGNoYXIgKilmLT5zdGFj a19lbmQgLSAoY2hhciAqKWYtPnN0YWNrX3N0YXJ0OworICAgIGlmIChmLT5jb250cm9sX3N0YWNr X2Jhc2UgJiYgZi0+Y29udHJvbF9zdGFja19lbmQpCisgICAgICAgIHJldHVybiAoY2hhciAqKWYt PmNvbnRyb2xfc3RhY2tfZW5kIC0gKGNoYXIgKilmLT5jb250cm9sX3N0YWNrX2Jhc2U7CisgICAg cmV0dXJuIDA7Cit9CisKK3NpemVfdCBzYl9maWJlcl9jb250cm9sX3N0YWNrX3VzZWRfYnl0ZXMo Y29uc3Qgc3RydWN0IHNiX2ZpYmVyX2N0eCAqZikKK3sKKyAgICB2b2lkICpzcCA9IGYtPnJlZ3Mu cnNwOworICAgIGlmIChzcCAmJiBmLT5zdGFja19lbmQgJiYgKGNoYXIgKilzcCA8IChjaGFyICop Zi0+c3RhY2tfZW5kKQorICAgICAgICByZXR1cm4gKGNoYXIgKilmLT5zdGFja19lbmQgLSAoY2hh ciAqKXNwOworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc3JjL3J1bnRpbWUveDg2LTY0 LWZpYmVyLmggYi9zcmMvcnVudGltZS94ODYtNjQtZmliZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAuLjI4NDVlNmIzNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9ydW50 aW1lL3g4Ni02NC1maWJlci5oCkBAIC0wLDAgKzEsMjMgQEAKKyNpZm5kZWYgU0JDTF9GSUJFUl9Y ODZfNjRfSAorI2RlZmluZSBTQkNMX0ZJQkVSX1g4Nl82NF9ICisKKyNpbmNsdWRlIDxzdGRpbnQu aD4KKworLyogQ2FsbGVlLXNhdmVkIHJlZ2lzdGVyIHNldDogUkJYLCBSQlAsIFIxMi1SMTUsIE1Y Q1NSLiBSU1AgaXMgZmlyc3QKKyAqIGJlY2F1c2UgdGhlIGZhbGxiYWNrIHN3aXRjaGVyIGZpYmVy LXN3YXAtcmVncyBpcyByZWFjaGVkIHZpYSBDQUxMLAorICogc28gdGhlIGNhbGxlZSdzIHJldHVy biBQQyBzaXRzIGF0IFtSU1BdIHdoZW4gdGhlIHNhdmUgaGFwcGVucy4gVGhlCisgKiAlc3dhcC1y ZWdzIFZPUCBwdXNoZXMgUkVTVU1FIGJlZm9yZSBzYXZpbmcgc28gdGhlIHNhbWUgc2hhcGUgd29y a3MuCisgKi8KK3N0cnVjdCBzYl9maWJlcl9yZWdzIHsKKyAgICB2b2lkICAgICpyc3A7ICAgICAv KiAweDAwICovCisgICAgdm9pZCAgICAqcmJ4OyAgICAgLyogMHgwOCAqLworICAgIHZvaWQgICAg KnJicDsgICAgIC8qIDB4MTAgKi8KKyAgICB2b2lkICAgICpyMTI7ICAgICAvKiAweDE4ICovCisg ICAgdm9pZCAgICAqcjEzOyAgICAgLyogMHgyMCAqLworICAgIHZvaWQgICAgKnIxNDsgICAgIC8q IDB4MjggKi8KKyAgICB2b2lkICAgICpyMTU7ICAgICAvKiAweDMwICovCisgICAgdWludDMyX3Qg bXhjc3I7ICAgLyogMHgzOCAqLworICAgIHVpbnQzMl90IHBhZF87ICAgIC8qIDB4M0MgKi8KK307 CisKKyNlbmRpZiAvKiBTQkNMX0ZJQkVSX1g4Nl82NF9IICovCmRpZmYgLS1naXQgYS90ZXN0cy9m aWJlci5pbXB1cmUubGlzcCBiL3Rlc3RzL2ZpYmVyLmltcHVyZS5saXNwCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uZDIxNDk2ZDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVz dHMvZmliZXIuaW1wdXJlLmxpc3AKQEAgLTAsMCArMSw2MjUgQEAKKzs7OzsgU3RyZXNzIGFuZCBy ZWdyZXNzaW9uIHRlc3RzIGZvciBzYi1maWJlci4KKworOzs7OyBUaGlzIHNvZnR3YXJlIGlzIHBh cnQgb2YgdGhlIFNCQ0wgc3lzdGVtLiBTZWUgdGhlIFJFQURNRSBmaWxlIGZvcgorOzs7OyBtb3Jl IGluZm9ybWF0aW9uLgorCisodW5sZXNzIChhbmQgKG1lbWJlciA6c2ItdGhyZWFkICpmZWF0dXJl cyopCisgICAgICAgICAgICAgKG1lbWJlciA6c2ItZmliZXIgKmZlYXR1cmVzKikKKyAgICAgICAg ICAgICAob3IgKG1lbWJlciA6eDg2LTY0ICpmZWF0dXJlcyopCisgICAgICAgICAgICAgICAgICht ZW1iZXIgOmFybTY0ICpmZWF0dXJlcyopKQorICAgICAgICAgICAgIChub3QgKG1lbWJlciA6d2lu MzIgKmZlYXR1cmVzKikpKQorICAoaW52b2tlLXJlc3RhcnQgJ3J1bi10ZXN0czo6c2tpcC1maWxl KSkKKworKHJlcXVpcmUgOnNiLWZpYmVyKQorKHVzZS1wYWNrYWdlIDpzYi1maWJlcikKKworKGRl Zm1hY3JvIHdpdGgtbWFpbi1maWJlciAoKG1haW4pICZib2R5IGJvZHkpCisgIGAobGV0ICgoLG1h aW4gKG1ha2UtbWFpbi1maWJlcikpKQorICAgICAodW53aW5kLXByb3RlY3QgKHByb2duICxAYm9k eSkKKyAgICAgICAocmVsZWFzZS1maWJlciAsbWFpbikpKSkKKworKGRlZm1hY3JvIHdpdGgtbWFp bitjaGlsZCAoKG1haW4gY2hpbGQgZW50cnktZm4gJnJlc3QgbWFrZS1hcmdzKSAmYm9keSBib2R5 KQorICBgKHdpdGgtbWFpbi1maWJlciAoLG1haW4pCisgICAgICh3aXRoLWZpYmVyICgsY2hpbGQg LGVudHJ5LWZuICxAbWFrZS1hcmdzKSAsQGJvZHkpKSkKKworOzs7IC0tLSBHQyBpbnRlZ3JhdGlv biAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor KHdpdGgtdGVzdCAoOm5hbWUgKDpmaWJlciA6Z2Mtd2l0aC1zdXNwZW5kZWQtZmliZXJzKSkKKyAg KHdpdGgtbWFpbi1maWJlciAobWFpbikKKyAgICAobGV0KiAoKG4gNTApCisgICAgICAgICAgIChm aWJlcnMgKG1ha2UtYXJyYXkgbikpCisgICAgICAgICAgIChvayAobWFrZS1hcnJheSBuIDppbml0 aWFsLWVsZW1lbnQgbmlsKSkpCisgICAgICAoZG90aW1lcyAoaSBuKQorICAgICAgICAobGV0ICgo aWR4IGkpKQorICAgICAgICAgIChzZXRmIChhcmVmIGZpYmVycyBpKQorICAgICAgICAgICAgICAg IChtYWtlLWZpYmVyCisgICAgICAgICAgICAgICAgIChsYW1iZGEgKCkKKyAgICAgICAgICAgICAg ICAgICAobGV0ICgoZGF0YSAobGlzdCAobWFrZS1hcnJheSA1IDppbml0aWFsLWVsZW1lbnQgaWR4 KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zIGlkeCAoKiBpZHgg aWR4KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9ybWF0IG5pbCAi ZmliZXItfkQiIGlkeCkpKSkKKyAgICAgICAgICAgICAgICAgICAgIChzd2l0Y2gtZmliZXIgKGFy ZWYgZmliZXJzIGlkeCkgbWFpbikKKyAgICAgICAgICAgICAgICAgICAgIChzZXRmIChhcmVmIG9r IGlkeCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChhbmQgKD0gKGFyZWYgKGZpcnN0IGRh dGEpIDApIGlkeCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKD0gKGNhciAoc2Vj b25kIGRhdGEpKSBpZHgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmc9 ICh0aGlyZCBkYXRhKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo Zm9ybWF0IG5pbCAiZmliZXItfkQiIGlkeCkpKSkKKyAgICAgICAgICAgICAgICAgICAgIChzd2l0 Y2gtZmliZXIgKGFyZWYgZmliZXJzIGlkeCkgbWFpbikpKSkpKSkKKyAgICAgIChkb3RpbWVzIChp IG4pIChzd2l0Y2gtZmliZXIgbWFpbiAoYXJlZiBmaWJlcnMgaSkpKQorICAgICAgKGRvdGltZXMg KF8gMykgKHNiLWV4dDpnYyA6ZnVsbCB0KSkKKyAgICAgIChkb3RpbWVzIChpIG4pIChzd2l0Y2gt ZmliZXIgbWFpbiAoYXJlZiBmaWJlcnMgaSkpKQorICAgICAgKGRvdGltZXMgKGkgbikgKGFzc2Vy dCAoYXJlZiBvayBpKSAoKSAiZmliZXIgfkQgY29ycnVwdGVkIiBpKSkKKyAgICAgIChkb3RpbWVz IChpIG4pIChyZWxlYXNlLWZpYmVyIChhcmVmIGZpYmVycyBpKSkpKSkpCisKKyh3aXRoLXRlc3Qg KDpuYW1lICg6ZmliZXIgOmdjLWR1cmluZy1yZXBlYXRlZC1zd2l0Y2hlcykpCisgIChsZXQgKChj b3VudCAwKSkKKyAgICAod2l0aC1tYWluK2NoaWxkIChtYWluIGNoaWxkCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAobGFtYmRhICgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChs b29wIChpbmNmIGNvdW50KSAobWFrZS1hcnJheSAxMDAwKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoeWllbGQtZmliZXIpKSkpCisgICAgICAoZG90aW1lcyAoaSAyMDApCisg ICAgICAgIChzd2l0Y2gtZmliZXIgbWFpbiBjaGlsZCkKKyAgICAgICAgKHdoZW4gKHplcm9wICht b2QgaSAyMCkpIChzYi1leHQ6Z2MgOmZ1bGwgdCkpKQorICAgICAgKGFzc2VydCAoPSBjb3VudCAy MDApKSkpKQorCisod2l0aC10ZXN0ICg6bmFtZSAoOmZpYmVyIDpnYy1kdXJpbmctbWFzcy1jcmVh dGlvbikpCisgICh3aXRoLWZpYmVyLXRocmVhZCAoKQorICAgIChsZXQgKGZpYmVycykKKyAgICAg IChkb3RpbWVzIChpIDUwMCkKKyAgICAgICAgKHB1c2ggKG1ha2UtZmliZXIgKGxhbWJkYSAoKSkp IGZpYmVycykKKyAgICAgICAgKHdoZW4gKHplcm9wIChtb2QgaSA1MCkpIChzYi1leHQ6Z2MgOmZ1 bGwgdCkpKQorICAgICAgKG1hcGMgIydyZWxlYXNlLWZpYmVyIGZpYmVycykpKSkKKworKHdpdGgt dGVzdCAoOm5hbWUgKDpmaWJlciA6dHJhbXBvbGluZS12cy1nYy1zdG9wKSkKKyAgKGxldCAoKGRv bmUgKHNiLXRocmVhZDptYWtlLXNlbWFwaG9yZSkpCisgICAgICAgIChzdG9wLWdjIG5pbCkpCisg ICAgKGxldCAoKGdjLXRocmVhZAorICAgICAgICAgICAgKHNiLXRocmVhZDptYWtlLXRocmVhZAor ICAgICAgICAgICAgIChsYW1iZGEgKCkKKyAgICAgICAgICAgICAgIChsb29wIHVudGlsIHN0b3At Z2MgZG8gKHNiLWV4dDpnYykgKHNsZWVwIDAuMDAwMSkpKQorICAgICAgICAgICAgIDpuYW1lICJ0 cmFtcG9saW5lLXZzLWdjLXN0b3AgcHVtcGVyIikpKQorICAgICAgKHNiLXRocmVhZDptYWtlLXRo cmVhZAorICAgICAgIChsYW1iZGEgKCkKKyAgICAgICAgICh3aXRoLWZpYmVyLXRocmVhZCAoKQor ICAgICAgICAgICAoZG90aW1lcyAoaSA1MDApCisgICAgICAgICAgICAgKGxldCAoKGYgKG1ha2Ut ZmliZXIgKGxhbWJkYSAoKSBpKSkpKQorICAgICAgICAgICAgICAgKHJlc3VtZS1maWJlciBmKSkp KQorICAgICAgICAgKHNiLXRocmVhZDpzaWduYWwtc2VtYXBob3JlIGRvbmUpKQorICAgICAgIDpu YW1lICJ0cmFtcG9saW5lLXZzLWdjLXN0b3Agd29ya2VyIikKKyAgICAgIChzYi10aHJlYWQ6d2Fp dC1vbi1zZW1hcGhvcmUgZG9uZSkKKyAgICAgIChzZXRmIHN0b3AtZ2MgdCkKKyAgICAgIChzYi10 aHJlYWQ6am9pbi10aHJlYWQgZ2MtdGhyZWFkKSkpKQorCisoZGVmdmFyICpicy1zdHJlc3MtdmFy KiA6ZGVmYXVsdCkKKworKHdpdGgtdGVzdCAoOm5hbWUgKDpmaWJlciA6YmluZGluZy1zdGFjay1z dHJlc3MpKQorICAod2l0aC1tYWluLWZpYmVyIChtYWluKQorICAgIChsZXQqICgobiAyMCkKKyAg ICAgICAgICAgKGZpYmVycyAobWFrZS1hcnJheSBuKSkKKyAgICAgICAgICAgKHJlc3VsdHMgKG1h a2UtYXJyYXkgbiA6aW5pdGlhbC1lbGVtZW50IG5pbCkpKQorICAgICAgKGRvdGltZXMgKGkgbikK KyAgICAgICAgKGxldCAoKGlkeCBpKSkKKyAgICAgICAgICAoc2V0ZiAoYXJlZiBmaWJlcnMgaSkK KyAgICAgICAgICAgICAgICAobWFrZS1maWJlcgorICAgICAgICAgICAgICAgICAobGFtYmRhICgp CisgICAgICAgICAgICAgICAgICAgKGxldCAoKCpicy1zdHJlc3MtdmFyKiBpZHgpKQorICAgICAg ICAgICAgICAgICAgICAgKGRvdGltZXMgKF8gMTApCisgICAgICAgICAgICAgICAgICAgICAgIChz d2l0Y2gtZmliZXIgKGFyZWYgZmliZXJzIGlkeCkgbWFpbikKKyAgICAgICAgICAgICAgICAgICAg ICAgKHVubGVzcyAoPSAqYnMtc3RyZXNzLXZhciogaWR4KQorICAgICAgICAgICAgICAgICAgICAg ICAgIChzZXRmIChhcmVmIHJlc3VsdHMgaWR4KSA6ZmFpbGVkKQorICAgICAgICAgICAgICAgICAg ICAgICAgIChyZXR1cm4pKSkKKyAgICAgICAgICAgICAgICAgICAgIChzZXRmIChhcmVmIHJlc3Vs dHMgaWR4KSA6b2spKQorICAgICAgICAgICAgICAgICAgIChzd2l0Y2gtZmliZXIgKGFyZWYgZmli ZXJzIGlkeCkgbWFpbikpKSkpKQorICAgICAgKGRvdGltZXMgKF8gMTApCisgICAgICAgIChkb3Rp bWVzIChpIG4pIChzd2l0Y2gtZmliZXIgbWFpbiAoYXJlZiBmaWJlcnMgaSkpKQorICAgICAgICAo YXNzZXJ0IChlcSAqYnMtc3RyZXNzLXZhciogOmRlZmF1bHQpKSkKKyAgICAgIChkb3RpbWVzIChp IG4pIChzd2l0Y2gtZmliZXIgbWFpbiAoYXJlZiBmaWJlcnMgaSkpKQorICAgICAgKGRvdGltZXMg KGkgbikgKGFzc2VydCAoZXEgOm9rIChhcmVmIHJlc3VsdHMgaSkpKSkKKyAgICAgIChkb3RpbWVz IChpIG4pIChyZWxlYXNlLWZpYmVyIChhcmVmIGZpYmVycyBpKSkpKSkpCisKKyh3aXRoLXRlc3Qg KDpuYW1lICg6ZmliZXIgOmhhbmRsZXItY2x1c3RlcnMtYWNyb3NzLXN3aXRjaCkpCisgIChsZXQg KChzZW0gKHNiLXRocmVhZDptYWtlLXNlbWFwaG9yZSkpCisgICAgICAgIChpbm5lci1jYXVnaHQg bmlsKQorICAgICAgICAob3V0ZXItY2F1Z2h0IG5pbCkpCisgICAgKHNiLXRocmVhZDptYWtlLXRo cmVhZAorICAgICAobGFtYmRhICgpCisgICAgICAgKGxldCogKChtZiAobWFrZS1tYWluLWZpYmVy KSkKKyAgICAgICAgICAgICAgKGYgbmlsKSkKKyAgICAgICAgIChzZXRmIGYgKG1ha2UtZmliZXIK KyAgICAgICAgICAgICAgICAgIChsYW1iZGEgKCkKKyAgICAgICAgICAgICAgICAgICAgKGhhbmRs ZXItY2FzZQorICAgICAgICAgICAgICAgICAgICAgICAgKGhhbmRsZXItY2FzZQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChwcm9nbiAoc3dpdGNoLWZpYmVyIGYgbWYpIChlcnJvciAiYm9v bSIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IgKGUpIChzZXRmIGlubmVyLWNh dWdodCAocHJpbmMtdG8tc3RyaW5nIGUpKSkpCisgICAgICAgICAgICAgICAgICAgICAgKGVycm9y IChlKSAoc2V0ZiBvdXRlci1jYXVnaHQgKHByaW5jLXRvLXN0cmluZyBlKSkpKSkpKQorICAgICAg ICAgKHN3aXRjaC1maWJlciBtZiBmKQorICAgICAgICAgKHN3aXRjaC1maWJlciBtZiBmKQorICAg ICAgICAgKHJlbGVhc2UtZmliZXIgZikKKyAgICAgICAgIChyZWxlYXNlLWZpYmVyIG1mKSkKKyAg ICAgICAoc2ItdGhyZWFkOnNpZ25hbC1zZW1hcGhvcmUgc2VtKSkpCisgICAgKGFzc2VydCAoc2It dGhyZWFkOndhaXQtb24tc2VtYXBob3JlIHNlbSA6dGltZW91dCA1KSkKKyAgICAoYXNzZXJ0IChl cXVhbCAiYm9vbSIgaW5uZXItY2F1Z2h0KSkKKyAgICAoYXNzZXJ0IChudWxsIG91dGVyLWNhdWdo dCkpKSkKKworKHdpdGgtdGVzdCAoOm5hbWUgKDpmaWJlciA6aGFuZGxlciA6ZXNjYXBlKSkKKyAg KGxldCAoY2F1Z2h0KQorICAgICh3aXRoLW1haW4rY2hpbGQgKG1mIGYgKGxhbWJkYSAoKSAoZXJy b3IgImVycm9yIikpKQorICAgICAgKGhhbmRsZXItY2FzZSAoc3dpdGNoLWZpYmVyIG1mIGYpCisg ICAgICAgIChlcnJvciAoZSkgKHNldGYgY2F1Z2h0IChwcmluYy10by1zdHJpbmcgZSkpKSkpCisg ICAgKGFzc2VydCAoZXF1YWwgY2F1Z2h0ICJlcnJvciIpKSkpCisKKyh3aXRoLXRlc3QgKDpuYW1l ICg6ZmliZXIgOmhhbmRsZXIgOm5lc3RlZCkpCisgIChkb3RpbWVzIChpIDEwMDApCisgICAgKGxl dCAoY2F1Z2h0KQorICAgICAgKHdpdGgtbWFpbitjaGlsZCAobWYgZgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGxhbWJkYSAoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGFu ZGxlci1jYXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGFuZGxlci1jYXNl CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb2duICh5aWVsZC1maWJl cikgKGVycm9yICJpdGVyIH5BIiBpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGVycm9yIChlKSAoc2V0ZiBjYXVnaHQgKHByaW5jLXRvLXN0cmluZyBlKSkpKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvciAoKSBuaWwpKSkpCisgICAgICAgIChzd2l0 Y2gtZmliZXIgbWYgZikKKyAgICAgICAgKHN3aXRjaC1maWJlciBtZiBmKQorICAgICAgICAoYXNz ZXJ0IChzZWFyY2ggKGZvcm1hdCBuaWwgIml0ZXIgfkEiIGkpIChvciBjYXVnaHQgIiIpKSkpKSkp CisKKyh3aXRoLXRlc3QgKDpuYW1lICg6ZmliZXIgOm11bHRpLXRocmVhZC1pbmRlcGVuZGVudC1m aWJlcnMpKQorICAobGV0ICgocmVzdWx0cyAobWFrZS1hcnJheSA0IDppbml0aWFsLWVsZW1lbnQg bmlsKSkKKyAgICAgICAgKGxvY2sgKHNiLXRocmVhZDptYWtlLW11dGV4KSkpCisgICAgKGxldCAo KHRocmVhZHMKKyAgICAgICAgICAgIChsb29wIGZvciB0aSBiZWxvdyA0IGNvbGxlY3QKKyAgICAg ICAgICAgICAgICAgIChsZXQgKChpZHggdGkpKQorICAgICAgICAgICAgICAgICAgICAoc2ItdGhy ZWFkOm1ha2UtdGhyZWFkCisgICAgICAgICAgICAgICAgICAgICAobGFtYmRhICgpCisgICAgICAg ICAgICAgICAgICAgICAgICh3aXRoLWZpYmVyLXRocmVhZCAoKQorICAgICAgICAgICAgICAgICAg ICAgICAgIChsZXQqICgoY291bnQgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGNoaWxkIChtYWtlLWZpYmVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGxhbWJkYSAoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGRvdGltZXMgKF8gMTAwMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGluY2YgY291bnQpICh5aWVsZC1maWJlcikpKSkpKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGRvdGltZXMgKF8gMTAwMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KHN3aXRjaC1maWJlciAqY3VycmVudC1maWJlciogY2hpbGQpKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgKHJlbGVhc2UtZmliZXIgY2hpbGQpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAoc2ItdGhyZWFkOndpdGgtbXV0ZXggKGxvY2spCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChzZXRmIChhcmVmIHJlc3VsdHMgaWR4KSBjb3VudCkpKSkpKSkpKSkKKyAgICAgIChtYXBj ICMnc2ItdGhyZWFkOmpvaW4tdGhyZWFkIHRocmVhZHMpKQorICAgIChkb3RpbWVzIChpIDQpIChh c3NlcnQgKD0gMTAwMCAoYXJlZiByZXN1bHRzIGkpKSkpKSkKKworKHdpdGgtdGVzdCAoOm5hbWUg KDpmaWJlciA6Y3VycmVudC1maWJlci1pcy1wZXItdGhyZWFkKSkKKyAgKGxldCogKChuLXRocmVh ZHMgNCkKKyAgICAgICAgIChzdGFydCAoc2ItdGhyZWFkOm1ha2Utc2VtYXBob3JlKSkKKyAgICAg ICAgIChyZXN1bHRzIChtYWtlLWFycmF5IG4tdGhyZWFkcyA6aW5pdGlhbC1lbGVtZW50IG5pbCkp KQorICAgIChsZXQgKCh0aHJlYWRzCisgICAgICAgICAgICAobG9vcCBmb3IgaSBiZWxvdyBuLXRo cmVhZHMgY29sbGVjdAorICAgICAgICAgICAgICAgICAgKGxldCAoKGlkeCBpKSkKKyAgICAgICAg ICAgICAgICAgICAgKHNiLXRocmVhZDptYWtlLXRocmVhZAorICAgICAgICAgICAgICAgICAgICAg KGxhbWJkYSAoKQorICAgICAgICAgICAgICAgICAgICAgICAod2l0aC1maWJlci10aHJlYWQgKCkK KyAgICAgICAgICAgICAgICAgICAgICAgICAobGV0ICgoYyAobWFrZS1maWJlcgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAobGFtYmRhICgpIChsb29wICh5aWVsZC1maWJlcikp KSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNiLXRocmVhZDp3YWl0LW9uLXNlbWFw aG9yZSBzdGFydCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChoYW5kbGVyLWNhc2UKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJvZ24gKGRvdGltZXMgKF8gNTAwMCkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3dpdGNoLWZpYmVyICpjdXJy ZW50LWZpYmVyKiBjKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNl dGYgKGFyZWYgcmVzdWx0cyBpZHgpIDpvaykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChlcnJvciAoZSkgKHNldGYgKGFyZWYgcmVzdWx0cyBpZHgpIGUpKSkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIChyZWxlYXNlLWZpYmVyIGMpKSkpKSkpKSkKKyAgICAgIChzbGVlcCAwLjA1 KQorICAgICAgKGRvdGltZXMgKF8gbi10aHJlYWRzKSAoc2ItdGhyZWFkOnNpZ25hbC1zZW1hcGhv cmUgc3RhcnQpKQorICAgICAgKG1hcGMgIydzYi10aHJlYWQ6am9pbi10aHJlYWQgdGhyZWFkcykp CisgICAgKGxvb3AgZm9yIHIgYWNyb3NzIHJlc3VsdHMKKyAgICAgICAgICBkbyAoYXNzZXJ0IChl cSByIDpvaykgKCkgInRocmVhZCBlcnJvcmVkOiB+UyIgcikpKSkKKworKHNiLWFsaWVuOmRlZmlu ZS1hbGllbi12YXJpYWJsZSAoImxvc2Vfb25fY29ycnVwdGlvbl9wIiAlbG9zZS1vbi1jb3JydXB0 aW9uLXApCisgICAgc2ItYWxpZW46aW50KQorCisoZGVmbWFjcm8gd2l0aG91dC1sb3NlLW9uLWNv cnJ1cHRpb24gKCZib2R5IGJvZHkpCisgIChsZXQgKChzYXZlZCAoZ2Vuc3ltKSkpCisgICAgYChs ZXQgKCgsc2F2ZWQgJWxvc2Utb24tY29ycnVwdGlvbi1wKSkKKyAgICAgICAodW53aW5kLXByb3Rl Y3QgKHByb2duIChzZXRmICVsb3NlLW9uLWNvcnJ1cHRpb24tcCAwKSAsQGJvZHkpCisgICAgICAg ICAoc2V0ZiAlbG9zZS1vbi1jb3JydXB0aW9uLXAgLHNhdmVkKSkpKSkKKworKHdpdGgtdGVzdCAo Om5hbWUgKDpmaWJlciA6c3RhY2stb3ZlcmZsb3ctcmVjb3ZlcnMpKQorICAobGV0IChjYXVnaHQp CisgICAgKHdpdGgtbWFpbitjaGlsZCAobWFpbiBjaGlsZAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGxhbWJkYSAoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVjbGFyZSAo b3B0aW1pemUgKHNwZWVkIDApIChzYWZldHkgMykgKGRlYnVnIDMpKSkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGhhbmRsZXItY2FzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGxhYmVscyAoKGJsb3cgKG4pICgxKyAoYmxvdyAoMSsgbikpKSkpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChibG93IDApKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChzdG9yYWdlLWNvbmRpdGlvbiAoKSAoc2V0ZiBjYXVnaHQgdCkpKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoeWllbGQtZmliZXIpKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgOnN0YWNrLXNpemUgNjU1MzYpCisgICAgICAod2l0aG91dC1sb3NlLW9uLWNvcnJ1 cHRpb24gKHN3aXRjaC1maWJlciBtYWluIGNoaWxkKSkpCisgICAgKGFzc2VydCBjYXVnaHQpKSkK KworKGRlZnZhciAqYnMtYSopIChkZWZ2YXIgKmJzLWIqKSAoZGVmdmFyICpicy1jKikgKGRlZnZh ciAqYnMtZCopCisKKyh3aXRoLXRlc3QgKDpuYW1lICg6ZmliZXIgOmJpbmRpbmctc3RhY2stb3Zl cmZsb3ctcmVjb3ZlcnMpKQorICAobGV0IChjYXVnaHQpCisgICAgKHdpdGgtbWFpbitjaGlsZCAo bWFpbiBjaGlsZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAoKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoZGVjbGFyZSAob3B0aW1pemUgKHNwZWVkIDApIChzYWZl dHkgMykgKGRlYnVnIDMpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhYmVscyAo KHJlY3VyIChkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkZWNs YXJlICh0eXBlIGZpeG51bSBkKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAocHJvZ3YgJygqYnMtYSogKmJzLWIqICpicy1jKiAqYnMtZCopCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcoMCAwIDAgMCkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZWN1ciAoMSsgZCkpKSkpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGhhbmRsZXItY2FzZSAocmVjdXIgMCkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChzdG9yYWdlLWNvbmRpdGlvbiAoKSAoc2V0ZiBjYXVnaHQg dCkpKSkpKQorICAgICAgKHdpdGhvdXQtbG9zZS1vbi1jb3JydXB0aW9uIChzd2l0Y2gtZmliZXIg bWFpbiBjaGlsZCkpKQorICAgIChhc3NlcnQgY2F1Z2h0KSkpCisKKyh3aXRoLXRlc3QgKDpuYW1l ICg6ZmliZXIgOmZhbm91dC1zY2FsaW5nKSA6c2xvdyB0IDpza2lwcGVkLW9uIChub3QgOnNsb3cp KQorICAoZG9saXN0IChuICcoMTAgMTAwIDEwMDAgMTAwMDApKQorICAgICh3aXRoLW1haW4tZmli ZXIgKG1haW4pCisgICAgICAobGV0KiAoKGZpYmVycyAobWFrZS1hcnJheSBuKSkKKyAgICAgICAg ICAgICAodG90YWwgIDApKQorICAgICAgICAoZG90aW1lcyAoaSBuKQorICAgICAgICAgIChzZXRm IChhcmVmIGZpYmVycyBpKQorICAgICAgICAgICAgICAgIChtYWtlLWZpYmVyIChsYW1iZGEgKCkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb29wIChpbmNmIHRvdGFsKSAoeWllbGQt ZmliZXIpKSkpKSkKKyAgICAgICAgKGxldCogKChyb3VuZHMgKG1heCAxIChmbG9vciAxMDAwMDAg bikpKQorICAgICAgICAgICAgICAgKHN0YXJ0ICAoZ2V0LWludGVybmFsLXJlYWwtdGltZSkpKQor ICAgICAgICAgIChkb3RpbWVzIChfIHJvdW5kcykKKyAgICAgICAgICAgIChkb3RpbWVzIChpIG4p IChzd2l0Y2gtZmliZXIgbWFpbiAoYXJlZiBmaWJlcnMgaSkpKSkKKyAgICAgICAgICAobGV0KiAo KGVsYXBzZWQgKC8gKC0gKGdldC1pbnRlcm5hbC1yZWFsLXRpbWUpIHN0YXJ0KQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbC10aW1lLXVuaXRzLXBlci1zZWNvbmQpKQorICAg ICAgICAgICAgICAgICAocmF0ZSAgICAoaWYgKD4gZWxhcHNlZCAwKSAoLyAoKiByb3VuZHMgbikg ZWxhcHNlZCkgMCkpKQorICAgICAgICAgICAgKGZvcm1hdCB0ICJ+JjsgICB+NkQgZmliZXJzIHgg fkQgcm91bmRzOiB+LDJGIHN3aXRjaGVzL3NlY34lIgorICAgICAgICAgICAgICAgICAgICBuIHJv dW5kcyByYXRlKSkpCisgICAgICAgIChhc3NlcnQgKD4gdG90YWwgMCkpCisgICAgICAgIChkb3Rp bWVzIChpIG4pIChyZWxlYXNlLWZpYmVyIChhcmVmIGZpYmVycyBpKSkpKSkpKQorCisod2l0aC10 ZXN0ICg6bmFtZSAoOmZpYmVyIDpmYW5vdXQtZ2MtdW5kZXItbG9hZCkgOnNsb3cgdCA6c2tpcHBl ZC1vbiAobm90IDpzbG93KSkKKyAgKGRvbGlzdCAobiAnKDEwMCAxMDAwIDUwMDApKQorICAgICh3 aXRoLW1haW4tZmliZXIgKG1haW4pCisgICAgICAobGV0KiAoKGZpYmVycyAobWFrZS1hcnJheSBu KSkKKyAgICAgICAgICAgICAob2sgICAgIChtYWtlLWFycmF5IG4gOmluaXRpYWwtZWxlbWVudCBu aWwpKSkKKyAgICAgICAgKGRvdGltZXMgKGkgbikKKyAgICAgICAgICAobGV0ICgoaWR4IGkpKQor ICAgICAgICAgICAgKHNldGYgKGFyZWYgZmliZXJzIGkpCisgICAgICAgICAgICAgICAgICAobWFr ZS1maWJlcgorICAgICAgICAgICAgICAgICAgIChsYW1iZGEgKCkKKyAgICAgICAgICAgICAgICAg ICAgIChsZXQgKChkYXRhIChsaXN0IChjb25zIGlkeCBpZHgpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAobWFrZS1hcnJheSAzIDppbml0aWFsLWVsZW1lbnQgaWR4KSkp KQorICAgICAgICAgICAgICAgICAgICAgICAoeWllbGQtZmliZXIpCisgICAgICAgICAgICAgICAg ICAgICAgIChzZXRmIChhcmVmIG9rIGlkeCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGFuZCAoPSBpZHggKGNhciAoZmlyc3QgZGF0YSkpKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICg9IGlkeCAoYXJlZiAoc2Vjb25kIGRhdGEpIDApKSkpCisgICAgICAgICAgICAg ICAgICAgICAgICh5aWVsZC1maWJlcikpKSkpKSkKKyAgICAgICAgKGRvdGltZXMgKGkgbikgKHN3 aXRjaC1maWJlciBtYWluIChhcmVmIGZpYmVycyBpKSkpCisgICAgICAgIChzYi1leHQ6Z2MgOmZ1 bGwgdCkKKyAgICAgICAgKGRvdGltZXMgKGkgbikgKHN3aXRjaC1maWJlciBtYWluIChhcmVmIGZp YmVycyBpKSkpCisgICAgICAgIChhc3NlcnQgKD0gbiAoY291bnQgdCBvaykpICgpICJHQyBjb3Jy dXB0aW9uIGF0IG49fkQiIG4pCisgICAgICAgIChkb3RpbWVzIChpIG4pIChyZWxlYXNlLWZpYmVy IChhcmVmIGZpYmVycyBpKSkpKSkpKQorCisoZGVmdW4gJWNhbGxlci1mcmFtZS1kcml2ZXIgKCkK KyAgKHdpdGgtbWFpbitjaGlsZCAobWFpbiBjaGlsZCAobGFtYmRhICgpIChsb29wICh5aWVsZC1m aWJlcikpKSkKKyAgICAoZG90aW1lcyAoXyAxMDAwMDAwKSAoc3dpdGNoLWZpYmVyIG1haW4gY2hp bGQpKQorICAgIDs7IEZvcmNlIGFuIElOVk9LRS1XSVRILVNBVkVELUZQIHdyYXAgYWZ0ZXIgdGhl IGxvb3AuCisgICAgKGxldCAoKHggKGdldC1pbnRlcm5hbC1yZWFsLXRpbWUpKSkgKGRlY2xhcmUg KGlnbm9yZSB4KSkpKSkKKworKHdpdGgtdGVzdCAoOm5hbWUgKDpmaWJlciA6Y2FsbGVyLWZyYW1l LWxpdmUtYWNyb3NzLTFtLXN3aXRjaGVzKQorICAgICAgICAgICAgOnNsb3cgdCA6c2tpcHBlZC1v biAobm90IDpzbG93KSkKKyAgKGxldCAoKHdpdG5lc3MgKGxpc3QgOmZpYmVyIDpsaXZlbmVzcy1w cm9iZSkpKQorICAgICglY2FsbGVyLWZyYW1lLWRyaXZlcikKKyAgICAoYXNzZXJ0IChjb25zcCB3 aXRuZXNzKSkKKyAgICAoYXNzZXJ0IChlcSAoZmlyc3Qgd2l0bmVzcykgOmZpYmVyKSkKKyAgICAo YXNzZXJ0IChlcSAoc2Vjb25kIHdpdG5lc3MpIDpsaXZlbmVzcy1wcm9iZSkpKSkKKworKHdpdGgt dGVzdCAoOm5hbWUgKDpmaWJlciA6Z2MtdW5kZXItY3JlYXRlLWRlc3Ryb3ktY2h1cm4pKQorICAo d2l0aC1maWJlci10aHJlYWQgKCkKKyAgICAoZG90aW1lcyAoaSAyMDApCisgICAgICAocmVsZWFz ZS1maWJlciAobWFrZS1maWJlciAobGFtYmRhICgpIChtYWtlLWFycmF5IDEwKSkpKQorICAgICAg KHdoZW4gKHplcm9wIChtb2QgaSAyNSkpIChzYi1leHQ6Z2MgOmZ1bGwgdCkpKSkpCisKKyh3aXRo LXRlc3QgKDpuYW1lICg6ZmliZXIgOnN3aXRjaC1jeWNsZS1zdXJ2aXZlcy1nYy1jaHVybikgOnNs b3cgdCA6c2tpcHBlZC1vbiAobm90IDpzbG93KSkKKyAgKHdpdGgtbWFpbi1maWJlciAobWFpbikK KyAgICAobGV0ICgoaGl0cyAwKSkKKyAgICAgIChkb3RpbWVzIChpIDUwMDApCisgICAgICAgIChs ZXQgKChleHBlY3RlZCBpKSkKKyAgICAgICAgICAod2l0aC1maWJlciAoY2hpbGQgKGxhbWJkYSAo KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbmNmIGhpdHMpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGFzc2VydCAoPSBleHBlY3RlZCBpKSkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoeWllbGQtZmliZXIpKSkKKyAgICAgICAgICAgIChzd2l0Y2gt ZmliZXIgbWFpbiBjaGlsZCkpKQorICAgICAgICAod2hlbiAoemVyb3AgKG1vZCBpIDI1MCkpIChz Yi1leHQ6Z2MgOmZ1bGwgdCkpKQorICAgICAgKGFzc2VydCAoPSBoaXRzIDUwMDApKSkpKQorCiso d2l0aC10ZXN0ICg6bmFtZSAoOmZpYmVyIDpjcm9zcy10aHJlYWQtZGVzdHJveSkpCisgIChsZXQq ICgoY3JlYXRlZCBuaWwpCisgICAgICAgICAoY3JlYXRvci1kb25lIChzYi10aHJlYWQ6bWFrZS1z ZW1hcGhvcmUpKQorICAgICAgICAgKGRlc3Ryb3llci1vayAoc2ItdGhyZWFkOm1ha2Utc2VtYXBo b3JlKSkKKyAgICAgICAgICh0MSAoc2ItdGhyZWFkOm1ha2UtdGhyZWFkCisgICAgICAgICAgICAg IChsYW1iZGEgKCkKKyAgICAgICAgICAgICAgICAobGV0ICgobWYgKG1ha2UtbWFpbi1maWJlcikp KQorICAgICAgICAgICAgICAgICAgKHNldGYgY3JlYXRlZCAobWFrZS1maWJlciAobGFtYmRhICgp KSkpCisgICAgICAgICAgICAgICAgICAoc2ItdGhyZWFkOnNpZ25hbC1zZW1hcGhvcmUgY3JlYXRv ci1kb25lKQorICAgICAgICAgICAgICAgICAgKHNiLXRocmVhZDp3YWl0LW9uLXNlbWFwaG9yZSBk ZXN0cm95ZXItb2sgOnRpbWVvdXQgNSkKKyAgICAgICAgICAgICAgICAgIChyZWxlYXNlLWZpYmVy IG1mKSkpKSkpCisgICAgKHNiLXRocmVhZDp3YWl0LW9uLXNlbWFwaG9yZSBjcmVhdG9yLWRvbmUg OnRpbWVvdXQgNSkKKyAgICAocmVsZWFzZS1maWJlciBjcmVhdGVkKQorICAgIChzYi10aHJlYWQ6 c2lnbmFsLXNlbWFwaG9yZSBkZXN0cm95ZXItb2spCisgICAgKHNiLXRocmVhZDpqb2luLXRocmVh ZCB0MSkpKQorCisod2l0aC10ZXN0ICg6bmFtZSAoOmZpYmVyIDpzaWduYWwtc2FmZS11bmRlci10 aW1lci1nYykpCisgIChsZXQgKChmaXJlZCAwKSkKKyAgICAod2l0aC1tYWluK2NoaWxkIChtYWlu IGNoaWxkIChsYW1iZGEgKCkgKGxvb3AgKHlpZWxkLWZpYmVyKSkpKQorICAgICAgKGxldCAoKHRp bWVyIChzYi1leHQ6bWFrZS10aW1lcgorICAgICAgICAgICAgICAgICAgICAobGFtYmRhICgpCisg ICAgICAgICAgICAgICAgICAgICAgKGluY2YgZmlyZWQpCisgICAgICAgICAgICAgICAgICAgICAg KHdoZW4gKHplcm9wIChtb2QgZmlyZWQgNTApKSAoc2ItZXh0OmdjKSkpCisgICAgICAgICAgICAg ICAgICAgIDp0aHJlYWQgc2ItdGhyZWFkOipjdXJyZW50LXRocmVhZCopKSkKKyAgICAgICAgKHNi LWV4dDpzY2hlZHVsZS10aW1lciB0aW1lciAwLjAwMDUgOnJlcGVhdC1pbnRlcnZhbCAwLjAwMDUp CisgICAgICAgICh1bndpbmQtcHJvdGVjdAorICAgICAgICAgICAgIChkb3RpbWVzIChfIDIwMDAw MCkgKHN3aXRjaC1maWJlciBtYWluIGNoaWxkKSkKKyAgICAgICAgICAoc2ItZXh0OnVuc2NoZWR1 bGUtdGltZXIgdGltZXIpKSkpCisgICAgKGFzc2VydCAoPj0gZmlyZWQgMSkpKSkKKworIytzYi10 aHJlYWQKKyh3aXRoLXRlc3QgKDpuYW1lICg6ZmliZXIgOnJlZ2lzdGVyLXByZXBhcmUtZ2MtcmFj ZSkpCisgIChsZXQgKChzdG9wIG5pbCkpCisgICAgKGxldCAoKGdjLXRoIChzYi10aHJlYWQ6bWFr ZS10aHJlYWQKKyAgICAgICAgICAgICAgICAgIChsYW1iZGEgKCkgKGxvb3AgdW50aWwgc3RvcCBk byAoc2ItZXh0OmdjKSAoc2xlZXAgMC4wMDA1KSkpKSkKKyAgICAgICAgICAoZHJpdmVycworICAg ICAgICAgICAgKGxvb3AgZm9yIGQgYmVsb3cgNCBjb2xsZWN0CisgICAgICAgICAgICAgICAgICAo c2ItdGhyZWFkOm1ha2UtdGhyZWFkCisgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAoKQorICAg ICAgICAgICAgICAgICAgICAgKG1ha2UtbWFpbi1maWJlcikKKyAgICAgICAgICAgICAgICAgICAg IChkb3RpbWVzIChfIDUwKQorICAgICAgICAgICAgICAgICAgICAgICAobGV0ICgoZnMgKGxvb3Ag cmVwZWF0IDE2CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0 IChtYWtlLWZpYmVyIChsYW1iZGEgKCkpKSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICht YXBjICMncmVsZWFzZS1maWJlciBmcykpKSkpKSkpCisgICAgICAobWFwYyAjJ3NiLXRocmVhZDpq b2luLXRocmVhZCBkcml2ZXJzKQorICAgICAgKHNldGYgc3RvcCB0KQorICAgICAgKHNiLXRocmVh ZDpqb2luLXRocmVhZCBnYy10aCkpKSkKKworKHdpdGgtdGVzdCAoOm5hbWUgKDpmaWJlciA6dGhy ZWFkLWV4aXQtcmVsZWFzZXMtb3JwaGFuZWQtZmliZXJzKSkKKyAgKGRvdGltZXMgKF8gNTApCisg ICAgKHNiLXRocmVhZDpqb2luLXRocmVhZAorICAgICAoc2ItdGhyZWFkOm1ha2UtdGhyZWFkCisg ICAgICAobGFtYmRhICgpCisgICAgICAgIChtYWtlLW1haW4tZmliZXIpCisgICAgICAgIChkb3Rp bWVzIChfIDIwMCkKKyAgICAgICAgICAobWFrZS1maWJlciAobGFtYmRhICgpIChsb29wICh5aWVs ZC1maWJlcikpKSkpKSkpKQorICAoc2ItZXh0OmdjIDpmdWxsIHQpKQorCisod2l0aC10ZXN0ICg6 bmFtZSAoOmZpYmVyIDpkZWVwLXN0YWNrLXVuZGVyLWdjKSkKKyAgKGxldCogKChkZXB0aCAyMDAp CisgICAgICAgICAoYnVpbHQgbmlsKSkKKyAgICAod2l0aC1tYWluK2NoaWxkIChtYWluIGNoaWxk CisgICAgICAgICAgICAgICAgICAgICAgICAgICAobGFtYmRhICgpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChsYWJlbHMgKChyZWMgKG4gYWNjKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChkZWNsYXJlICh0eXBlIGZpeG51bSBuKSkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgKHplcm9wIG4pCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcm9nbiAoeWllbGQtZmliZXIpIGFjYykK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlYyAoMS0gbikg KGNvbnMgbiBhY2MpKSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZXRmIGJ1 aWx0IChyZWMgZGVwdGggbmlsKSkpKSkKKyAgICAgIChzd2l0Y2gtZmliZXIgbWFpbiBjaGlsZCkg ICAgICAgICA7IGNoaWxkIHJlYWNoZXMgZGVwdGgsIHlpZWxkcworICAgICAgKHNiLWV4dDpnYyA6 ZnVsbCB0KQorICAgICAgKHNiLWV4dDpnYyA6ZnVsbCB0KQorICAgICAgKHN3aXRjaC1maWJlciBt YWluIGNoaWxkKSkgICAgICAgIDsgcmVzdW1lLCB1bndpbmQsIGZpYmVyIGRpZXMKKyAgICAoYXNz ZXJ0ICg9IChsZW5ndGggYnVpbHQpIGRlcHRoKSkKKyAgICAoYXNzZXJ0ICg9IChyZWR1Y2UgIycr IGJ1aWx0KSAoLyAoKiBkZXB0aCAoMSsgZGVwdGgpKSAyKSkpKSkKKworKHdpdGgtdGVzdCAoOm5h bWUgKDpmaWJlciA6c2NydWItc2hydW5rLXBhdGggOm5vLXdpdG5lc3MtY29ycnVwdGlvbikKKyAg ICAgICAgICAgIDpzbG93IHQgOnNraXBwZWQtb24gKG5vdCA6c2xvdykpCisgIChsZXQqICgoaXRl cmF0aW9ucyAyMDApCisgICAgICAgICAocmVjdXJzZS1kZXB0aCAxNTApCisgICAgICAgICAod2l0 bmVzcyAobG9vcCByZXBlYXQgNjQgY29sbGVjdCAoY29ucyA6YWxpdmUgbmlsKSkpKQorICAgICh3 aXRoLW1haW4rY2hpbGQgKG1haW4gY2hpbGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChs YW1iZGEgKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhYmVscyAoKHJlYyAobiBh Y2MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlY2xhcmUgKHR5 cGUgZml4bnVtIG4pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChp ZiAoemVyb3AgbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YWNjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZWMgKDEt IG4pIChjb25zIG4gYWNjKSkpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9v cAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlYyByZWN1cnNlLWRlcHRoIG5p bCkgOyBncm93cyB+MTUwIGZyYW1lcyArIGNvbnNlcworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKHlpZWxkLWZpYmVyKSkpKSkKKyAgICAgIChkb3RpbWVzIChfIGl0ZXJhdGlvbnMp CisgICAgICAgIChzd2l0Y2gtZmliZXIgbWFpbiBjaGlsZCkKKyAgICAgICAgKHNiLWV4dDpnYyA6 ZnVsbCB0KQorICAgICAgICAoYXNzZXJ0IChldmVyeSAobGFtYmRhIChjKSAoZXEgKGNhciBjKSA6 YWxpdmUpKSB3aXRuZXNzKQorICAgICAgICAgICAgICAgICgpCisgICAgICAgICAgICAgICAgIndp dG5lc3MgY29ycnVwdGlvbiAtLSBjb25zZXJ2YXRpdmUgc2Nhbm5lciBwaW5uZWQgZ2FyYmFnZSIp KSkpKQorCisod2l0aC10ZXN0ICg6bmFtZSAoOmZpYmVyIDppbnRlcnJ1cHQtZmliZXIgOm5lc3Rl ZC1oYW5kbGVyLWNhc2UpKQorICAobGV0IChpbm5lci1jYXVnaHQgb3V0ZXItY2F1Z2h0KQorICAg ICh3aXRoLW1haW4rY2hpbGQgKG1haW4gY2hpbGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IChsYW1iZGEgKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhhbmRsZXItY2FzZQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhhbmRsZXItY2FzZSAoeWllbGQtZmli ZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaW1wbGUtZXJyb3IgKGUp IChzZXRmIGlubmVyLWNhdWdodCBlKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGVycm9yIChlKSAoc2V0ZiBvdXRlci1jYXVnaHQgZSkpKSkpCisgICAgICAoc3dpdGNoLWZpYmVy IG1haW4gY2hpbGQpICAgICAgICAgOyBydW4gdG8geWllbGQKKyAgICAgIChpbnRlcnJ1cHQtZmli ZXIgY2hpbGQgKG1ha2UtY29uZGl0aW9uICdzaW1wbGUtZXJyb3IKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpmb3JtYXQtY29udHJvbCAiaW50ZXJydXB0ZWQi KSkKKyAgICAgIChzd2l0Y2gtZmliZXIgbWFpbiBjaGlsZCkpICAgICAgICA7IHJlc3VtZTsgaW50 ZXJydXB0IGZpcmVzIGluc2lkZSBjaGlsZAorICAgIChhc3NlcnQgaW5uZXItY2F1Z2h0ICAgKCkg ImlubmVyIGhhbmRsZXItY2FzZSBkaWQgbm90IGNhdGNoIikKKyAgICAoYXNzZXJ0IChudWxsIG91 dGVyLWNhdWdodCkgKCkgIm91dGVyIGhhbmRsZXItY2FzZSBmaXJlZCAoc2hvdWxkIG5vdCkiKQor ICAgIChhc3NlcnQgKHNlYXJjaCAiaW50ZXJydXB0ZWQiIChwcmluYy10by1zdHJpbmcgaW5uZXIt Y2F1Z2h0KSkpKSkKKworKHdpdGgtdGVzdCAoOm5hbWUgKDpmaWJlciA6aW50ZXJydXB0LWZpYmVy IDpoYW5kbGVyLXRyYW5zZm9ybXMtY29uZGl0aW9uKSkKKyAgKGxldCAocmVjZWl2ZWQpCisgICAg KHdpdGgtbWFpbitjaGlsZCAobWFpbiBjaGlsZAorICAgICAgICAgICAgICAgICAgICAgICAgICAg KGxhbWJkYSAoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGFuZGxlci1jYXNlICh5 aWVsZC1maWJlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2ltcGxlLWVycm9y ICgpIChlcnJvciAidHJhbnNmb3JtZWQiKSkpKSkKKyAgICAgIChzd2l0Y2gtZmliZXIgbWFpbiBj aGlsZCkKKyAgICAgIChpbnRlcnJ1cHQtZmliZXIgY2hpbGQgKG1ha2UtY29uZGl0aW9uICdzaW1w bGUtZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpm b3JtYXQtY29udHJvbCAib3JpZ2luYWwiKSkKKyAgICAgIChoYW5kbGVyLWNhc2UgKHN3aXRjaC1m aWJlciBtYWluIGNoaWxkKQorICAgICAgICAoc2ltcGxlLWVycm9yIChlKSAoc2V0ZiByZWNlaXZl ZCAocHJpbmMtdG8tc3RyaW5nIGUpKSkpKQorICAgIChhc3NlcnQgKHNlYXJjaCAidHJhbnNmb3Jt ZWQiIHJlY2VpdmVkKSAoKQorICAgICAgICAgICAgImV4cGVjdGVkICd0cmFuc2Zvcm1lZCcsIGdv dCB+UyIgcmVjZWl2ZWQpKSkKKworKHdpdGgtdGVzdCAoOm5hbWUgKDpmaWJlciA6am9pbi1maWJl ciA6Y29uZGl0aW9uLWVzY2FwZSkpCisgICh3aXRoLW1haW4rY2hpbGQgKG1haW4gY2hpbGQgKGxh bWJkYSAoKSAoZXJyb3IgImVzY2FwZXMtdmlhLWpvaW4iKSkpCisgICAgKGhhbmRsZXItY2FzZSAo am9pbi1maWJlciBjaGlsZCkKKyAgICAgIChzaW1wbGUtZXJyb3IgKGUpCisgICAgICAgIChhc3Nl cnQgKHNlYXJjaCAiZXNjYXBlcy12aWEtam9pbiIgKHByaW5jLXRvLXN0cmluZyBlKSkpKSkpKQor Cis7OzsgLS0tIFBhcnRpYWwtZmFpbHVyZSBjbGVhbnVwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7OzsKKzs7OyBJZiBhIHN0ZXAgYWZ0ZXIgdGhlIEMtbGV2 ZWwgZmliZXIgYWxsb2NhdGlvbiBzaWduYWxzLCB0aGUgcmF3IFNBUCBtdXN0Cis7OzsgYmUgcmVs ZWFzZWQgcmF0aGVyIHRoYW4gbGVha2VkLiAgV2UgZm9yY2UgdGhlIGZhaWx1cmUgYnkgc2hhZG93 aW5nCis7OzsgJUZJQkVSLVJFR0lTVEVSIGFuZCBpbnN0cnVtZW50ICVGSUJFUi1SRUxFQVNFIHRv IGNvdW50IGNsZWFudXAgY2FsbHMuCisKKyhkZWZtYWNybyB3aXRoLWluamVjdGVkLXJlZ2lzdGVy LWZhaWx1cmUgKChyZWxlYXNlLWNvdW50LXZhcikgJmJvZHkgYm9keSkKKyAgKGxldCAoKG9yaWct ciAoZ2Vuc3ltKSkgKG9yaWctcmVsIChnZW5zeW0pKSkKKyAgICBgKGxldCogKCgscmVsZWFzZS1j b3VudC12YXIgMCkKKyAgICAgICAgICAgICgsb3JpZy1yICAgKGZkZWZpbml0aW9uICdzYi1maWJl cjo6JWZpYmVyLXJlZ2lzdGVyKSkKKyAgICAgICAgICAgICgsb3JpZy1yZWwgKGZkZWZpbml0aW9u ICdzYi1maWJlcjo6JWZpYmVyLXJlbGVhc2UpKSkKKyAgICAgICAodW53aW5kLXByb3RlY3QKKyAg ICAgICAgICAgIChwcm9nbgorICAgICAgICAgICAgICAoc2V0ZiAoZmRlZmluaXRpb24gJ3NiLWZp YmVyOjolZmliZXItcmVnaXN0ZXIpCisgICAgICAgICAgICAgICAgICAgIChsYW1iZGEgKHRoIHNh cCkKKyAgICAgICAgICAgICAgICAgICAgICAoZGVjbGFyZSAoaWdub3JlIHRoIHNhcCkpCisgICAg ICAgICAgICAgICAgICAgICAgKGVycm9yICJpbmplY3RlZCByZWdpc3RlciBmYWlsdXJlIikpKQor ICAgICAgICAgICAgICAoc2V0ZiAoZmRlZmluaXRpb24gJ3NiLWZpYmVyOjolZmliZXItcmVsZWFz ZSkKKyAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAoc2FwKQorICAgICAgICAgICAgICAgICAg ICAgIChpbmNmICxyZWxlYXNlLWNvdW50LXZhcikKKyAgICAgICAgICAgICAgICAgICAgICAoZnVu Y2FsbCAsb3JpZy1yZWwgc2FwKSkpCisgICAgICAgICAgICAgICxAYm9keSkKKyAgICAgICAgIChz ZXRmIChmZGVmaW5pdGlvbiAnc2ItZmliZXI6OiVmaWJlci1yZWdpc3RlcikgLG9yaWctcikKKyAg ICAgICAgIChzZXRmIChmZGVmaW5pdGlvbiAnc2ItZmliZXI6OiVmaWJlci1yZWxlYXNlKSAgLG9y aWctcmVsKSkpKSkKKworKHdpdGgtdGVzdCAoOm5hbWUgKDpmaWJlciA6bWFrZS1maWJlciA6cGFy dGlhbC1mYWlsdXJlLXJlbGVhc2VzLXNhcCkpCisgICh3aXRoLW1haW4tZmliZXIgKG1haW4pCisg ICAgKGFzc2VydCAoZXEgbWFpbiAqY3VycmVudC1maWJlciopKQorICAgIChsZXQgKGdvdC1lcnJv cikKKyAgICAgICh3aXRoLWluamVjdGVkLXJlZ2lzdGVyLWZhaWx1cmUgKHJlbGVhc2VzKQorICAg ICAgICAoaGFuZGxlci1jYXNlIChtYWtlLWZpYmVyIChsYW1iZGEgKCkpKQorICAgICAgICAgIChz aW1wbGUtZXJyb3IgKCkgKHNldGYgZ290LWVycm9yIHQpKSkKKyAgICAgICAgKGFzc2VydCBnb3Qt ZXJyb3IpCisgICAgICAgIChhc3NlcnQgKD0gMSByZWxlYXNlcykgKCkKKyAgICAgICAgICAgICAg ICAiZXhwZWN0ZWQgb25lICVmaWJlci1yZWxlYXNlIGNhbGwsIGdvdCB+RCIgcmVsZWFzZXMpKQor ICAgICAgOzsgU3RhdGUgcmVtYWlucyB1c2FibGU6IGEgc3Vic2VxdWVudCBtYWtlLWZpYmVyIHdv cmtzIGZpbmUuCisgICAgICAobGV0ICgoZiAobWFrZS1maWJlciAobGFtYmRhICgpKSkpKQorICAg ICAgICAoYXNzZXJ0IChmaWJlci1hbGl2ZS1wIGYpKQorICAgICAgICAocmVsZWFzZS1maWJlciBm KSkpKSkKKworKHdpdGgtdGVzdCAoOm5hbWUgKDpmaWJlciA6bWFrZS1tYWluLWZpYmVyIDpwYXJ0 aWFsLWZhaWx1cmUtcmVsZWFzZXMtc2FwKSkKKyAgKGFzc2VydCAobnVsbCAqY3VycmVudC1maWJl ciopKQorICAobGV0ICgoZ290LWVycm9yIG5pbCkpCisgICAgKHdpdGgtaW5qZWN0ZWQtcmVnaXN0 ZXItZmFpbHVyZSAocmVsZWFzZXMpCisgICAgICAoaGFuZGxlci1jYXNlIChtYWtlLW1haW4tZmli ZXIpCisgICAgICAgIChzaW1wbGUtZXJyb3IgKCkgKHNldGYgZ290LWVycm9yIHQpKSkKKyAgICAg IChhc3NlcnQgZ290LWVycm9yKQorICAgICAgKGFzc2VydCAoPSAxIHJlbGVhc2VzKSAoKQorICAg ICAgICAgICAgICAiZXhwZWN0ZWQgb25lICVmaWJlci1yZWxlYXNlIGNhbGwsIGdvdCB+RCIgcmVs ZWFzZXMpKQorICAgIDs7IEEgZmFpbGVkIG1ha2UtbWFpbi1maWJlciBtdXN0IG5vdCBwdWJsaXNo IHRoZSBwYXJ0aWFsIHdyYXBwZXIuCisgICAgKGFzc2VydCAobnVsbCAqY3VycmVudC1maWJlciop KQorICAgIDs7IFJlY292ZXJ5OiBhIHN1YnNlcXVlbnQgbWFrZS1tYWluLWZpYmVyIHdvcmtzLgor ICAgIChsZXQgKChtIChtYWtlLW1haW4tZmliZXIpKSkKKyAgICAgIChhc3NlcnQgKGZpYmVyLWFs aXZlLXAgbSkpCisgICAgICAocmVsZWFzZS1maWJlciBtKSkpKQorCis7OzsgLS0tIENyb3NzLXRo cmVhZCBtaWdyYXRpb24gLS0tCisKKyh3aXRoLXRlc3QgKDpuYW1lICg6ZmliZXIgOm1pZ3JhdGUg Om1ldGFkYXRhLW9ubHkpCisgICAgICAgICAgICA6c2tpcHBlZC1vbiAobm90IDpzYi10aHJlYWQp KQorICAobGV0KiAoKGZpYmVyLWNlbGwgKGxpc3QgbmlsKSkKKyAgICAgICAgIChhLWluc3RhbGxl ZCAoc2ItdGhyZWFkOm1ha2Utc2VtYXBob3JlIDpuYW1lICJtZXRhb25seS1pbnN0YWxsZWQiKSkK KyAgICAgICAgIChhLXJlbGVhc2VkICAoc2ItdGhyZWFkOm1ha2Utc2VtYXBob3JlIDpuYW1lICJt ZXRhb25seS1yZWxlYXNlZCIpKQorICAgICAgICAgKGItZ28gICAgICAgIChzYi10aHJlYWQ6bWFr ZS1zZW1hcGhvcmUgOm5hbWUgIm1ldGFvbmx5LWItZ28iKSkpCisgICAgKGxldCogKChhLXRocmVh ZAorICAgICAgICAgICAgIChzYi10aHJlYWQ6bWFrZS10aHJlYWQKKyAgICAgICAgICAgICAgKGxh bWJkYSAoKQorICAgICAgICAgICAgICAgICh3aXRoLW1haW4tZmliZXIgKGEtbWFpbikKKyAgICAg ICAgICAgICAgICAgIChsZXQgKChjaGlsZCAobWFrZS1maWJlciAobGFtYmRhICgpICh5aWVsZC1m aWJlcikgOmRvbmUpKSkpCisgICAgICAgICAgICAgICAgICAgIChyZXN1bWUtZmliZXIgY2hpbGQp CisgICAgICAgICAgICAgICAgICAgIChzZXRmIChjYXIgZmliZXItY2VsbCkgY2hpbGQpCisgICAg ICAgICAgICAgICAgICAgIChzYi10aHJlYWQ6c2lnbmFsLXNlbWFwaG9yZSBhLWluc3RhbGxlZCkK KyAgICAgICAgICAgICAgICAgICAgKHNiLXRocmVhZDp3YWl0LW9uLXNlbWFwaG9yZSBhLXJlbGVh c2VkKSkpKQorICAgICAgICAgICAgICA6bmFtZSAiZmliZXItbWlncmF0ZS1tZXRhLXNyYyIpKQor ICAgICAgICAgICAoYi10aHJlYWQKKyAgICAgICAgICAgICAoc2ItdGhyZWFkOm1ha2UtdGhyZWFk CisgICAgICAgICAgICAgIChsYW1iZGEgKCkKKyAgICAgICAgICAgICAgICAoc2ItdGhyZWFkOndh aXQtb24tc2VtYXBob3JlIGItZ28pCisgICAgICAgICAgICAgICAgOzsgTWlncmF0ZWQgY2hpbGQg c2l0cyBpbiBCJ3MgZmliZXIgbGlzdC4gIEIgcmVsZWFzZXMKKyAgICAgICAgICAgICAgICA7OyBp dCB3aXRob3V0IGV2ZXIgc3dpdGNoaW5nIGludG8gaXQuICBUaGUgd3JhcHBlcidzCisgICAgICAg ICAgICAgICAgOzsgRklCRVItVEhSRUFEIG11c3QgYmUgQiBieSB0aGlzIHBvaW50LCBhbmQKKyAg ICAgICAgICAgICAgICA7OyBSRUxFQVNFLUZJQkVSIG11c3Qgc3VjY2VlZCB3aXRob3V0IHNpZ25h bGxpbmcuCisgICAgICAgICAgICAgICAgKHJlbGVhc2UtZmliZXIgKGNhciBmaWJlci1jZWxsKSkp CisgICAgICAgICAgICAgIDpuYW1lICJmaWJlci1taWdyYXRlLW1ldGEtZGVzdCIpKSkKKyAgICAg IChzYi10aHJlYWQ6d2FpdC1vbi1zZW1hcGhvcmUgYS1pbnN0YWxsZWQpCisgICAgICAobGV0ICgo Y2hpbGQgKGNhciBmaWJlci1jZWxsKSkpCisgICAgICAgIChhc3NlcnQgY2hpbGQpCisgICAgICAg IChhc3NlcnQgKGVxIChzYi1maWJlcjo6ZmliZXItdGhyZWFkIGNoaWxkKSBhLXRocmVhZCkKKyAg ICAgICAgICAgICAgICBuaWwgImJlZm9yZSBtaWdyYXRlLCBmaWJlcidzIHRocmVhZCBzbG90IHNo b3VsZCBiZSBBIikKKyAgICAgICAgKGFzc2VydCAoZXEgY2hpbGQgKGZpYmVyLW1pZ3JhdGUgY2hp bGQgYi10aHJlYWQpKSkKKyAgICAgICAgKGFzc2VydCAoZXEgKHNiLWZpYmVyOjpmaWJlci10aHJl YWQgY2hpbGQpIGItdGhyZWFkKQorICAgICAgICAgICAgICAgIG5pbCAiYWZ0ZXIgbWlncmF0ZSwg ZmliZXIncyB0aHJlYWQgc2xvdCBzaG91bGQgYmUgQiIpKQorICAgICAgKHNiLXRocmVhZDpzaWdu YWwtc2VtYXBob3JlIGItZ28pCisgICAgICAoc2ItdGhyZWFkOmpvaW4tdGhyZWFkIGItdGhyZWFk KQorICAgICAgKHNiLXRocmVhZDpzaWduYWwtc2VtYXBob3JlIGEtcmVsZWFzZWQpCisgICAgICAo c2ItdGhyZWFkOmpvaW4tdGhyZWFkIGEtdGhyZWFkKSkpKQorCisod2l0aC10ZXN0ICg6bmFtZSAo OmZpYmVyIDptaWdyYXRlIDpydW5uYWJsZS1ydW5zLW9uLWRlc3QpCisgICAgICAgICAgICA6c2tp cHBlZC1vbiAobm90IDpzYi10aHJlYWQpKQorICAobGV0KiAoKGZpYmVyLWNlbGwgKGxpc3Qgbmls KSkKKyAgICAgICAgIChhLWluc3RhbGxlZCAoc2ItdGhyZWFkOm1ha2Utc2VtYXBob3JlIDpuYW1l ICJhLWluc3RhbGxlZCIpKQorICAgICAgICAgKGEtcmVsZWFzZWQgIChzYi10aHJlYWQ6bWFrZS1z ZW1hcGhvcmUgOm5hbWUgImEtcmVsZWFzZWQiKSkKKyAgICAgICAgIChtaWdyYXRlLWRvbmUgKHNi LXRocmVhZDptYWtlLXNlbWFwaG9yZSA6bmFtZSAibWlncmF0ZS1kb25lIikpCisgICAgICAgICAo Yi1yZXN1bHQgICAgKGxpc3QgbmlsKSkKKyAgICAgICAgIChvYnNlcnZlZC10aHJlYWQgKGxpc3Qg bmlsKSkpCisgICAgKGxldCogKChhLXRocmVhZAorICAgICAgICAgICAgIChzYi10aHJlYWQ6bWFr ZS10aHJlYWQKKyAgICAgICAgICAgICAgKGxhbWJkYSAoKQorICAgICAgICAgICAgICAgICh3aXRo LW1haW4tZmliZXIgKGEtbWFpbikKKyAgICAgICAgICAgICAgICAgIChsZXQgKChjaGlsZCAobWFr ZS1maWJlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGFtYmRhICgpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHlpZWxkLWZpYmVyKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChzZXRmIChjYXIgb2JzZXJ2ZWQtdGhyZWFkKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNiLXRocmVhZDoqY3VycmVudC10aHJl YWQqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpib2R5LWRvbmUpKSkpCisg ICAgICAgICAgICAgICAgICAgIChyZXN1bWUtZmliZXIgY2hpbGQpCisgICAgICAgICAgICAgICAg ICAgIChzZXRmIChjYXIgZmliZXItY2VsbCkgY2hpbGQpCisgICAgICAgICAgICAgICAgICAgIChz Yi10aHJlYWQ6c2lnbmFsLXNlbWFwaG9yZSBhLWluc3RhbGxlZCkKKyAgICAgICAgICAgICAgICAg ICAgKHNiLXRocmVhZDp3YWl0LW9uLXNlbWFwaG9yZSBhLXJlbGVhc2VkKSkpKQorICAgICAgICAg ICAgICA6bmFtZSAiZmliZXItbWlncmF0ZS1zcmMiKSkpCisgICAgICAoc2ItdGhyZWFkOndhaXQt b24tc2VtYXBob3JlIGEtaW5zdGFsbGVkKQorICAgICAgKGxldCAoKGNoaWxkIChjYXIgZmliZXIt Y2VsbCkpKQorICAgICAgICAoYXNzZXJ0IGNoaWxkKQorICAgICAgICAobGV0ICgoYi10aHJlYWQK KyAgICAgICAgICAgICAgICAoc2ItdGhyZWFkOm1ha2UtdGhyZWFkCisgICAgICAgICAgICAgICAg IChsYW1iZGEgKCkKKyAgICAgICAgICAgICAgICAgICAoc2ItdGhyZWFkOndhaXQtb24tc2VtYXBo b3JlIG1pZ3JhdGUtZG9uZSkKKyAgICAgICAgICAgICAgICAgICAod2l0aC1tYWluLWZpYmVyIChi LW1haW4pCisgICAgICAgICAgICAgICAgICAgICAoc2V0ZiAoY2FyIGItcmVzdWx0KSAoam9pbi1m aWJlciBjaGlsZCkpKSkKKyAgICAgICAgICAgICAgICAgOm5hbWUgImZpYmVyLW1pZ3JhdGUtZGVz dCIpKSkKKyAgICAgICAgICAoZmliZXItbWlncmF0ZSBjaGlsZCBiLXRocmVhZCkKKyAgICAgICAg ICAoYXNzZXJ0IChlcSAoc2ItZmliZXI6OmZpYmVyLXRocmVhZCBjaGlsZCkgYi10aHJlYWQpCisg ICAgICAgICAgICAgICAgICBuaWwKKyAgICAgICAgICAgICAgICAgICJhZnRlciBtaWdyYXRlLCBm aWJlciBUSFJFQUQgc2xvdCBzaG91bGQgYmUgQjsgZ290IH5BIgorICAgICAgICAgICAgICAgICAg KHNiLWZpYmVyOjpmaWJlci10aHJlYWQgY2hpbGQpKQorICAgICAgICAgIChzYi10aHJlYWQ6c2ln bmFsLXNlbWFwaG9yZSBtaWdyYXRlLWRvbmUpCisgICAgICAgICAgKHNiLXRocmVhZDpqb2luLXRo cmVhZCBiLXRocmVhZCkKKyAgICAgICAgICAoYXNzZXJ0IChlcSAoY2FyIG9ic2VydmVkLXRocmVh ZCkgYi10aHJlYWQpCisgICAgICAgICAgICAgICAgICBuaWwKKyAgICAgICAgICAgICAgICAgICJm aWJlciBib2R5IHJhbiBvbiB+QTsgZXhwZWN0ZWQgQiA9IH5BIgorICAgICAgICAgICAgICAgICAg KGNhciBvYnNlcnZlZC10aHJlYWQpIGItdGhyZWFkKQorICAgICAgICAgIChhc3NlcnQgKGVxIChj YXIgYi1yZXN1bHQpIDpib2R5LWRvbmUpCisgICAgICAgICAgICAgICAgICBuaWwKKyAgICAgICAg ICAgICAgICAgICJqb2luLWZpYmVyIHJldHVybmVkIH5BOyBleHBlY3RlZCA6Ym9keS1kb25lIgor ICAgICAgICAgICAgICAgICAgKGNhciBiLXJlc3VsdCkpKSkKKyAgICAgIChzYi10aHJlYWQ6c2ln bmFsLXNlbWFwaG9yZSBhLXJlbGVhc2VkKQorICAgICAgKHNiLXRocmVhZDpqb2luLXRocmVhZCBh LXRocmVhZCkpKSkKKworKHdpdGgtdGVzdCAoOm5hbWUgKDpmaWJlciA6bWlncmF0ZSA6cmVqZWN0 cy1yZWxlYXNlZCkKKyAgICAgICAgICAgIDpza2lwcGVkLW9uIChub3QgOnNiLXRocmVhZCkpCisg IChsZXQqICgob3RoZXIgKHNiLXRocmVhZDptYWtlLXRocmVhZAorICAgICAgICAgICAgICAgICAo bGFtYmRhICgpIChzYi10aHJlYWQ6dGhyZWFkLXlpZWxkKSA6b2spCisgICAgICAgICAgICAgICAg IDpuYW1lICJtaWdyYXRlLXZhbGlkYXRlLWRlc3QiKSkKKyAgICAgICAgIChyZWxlYXNlZC1maWJl ciBuaWwpKQorICAgICh3aXRoLW1haW4tZmliZXIgKG1haW4pCisgICAgICAobGV0ICgoZiAobWFr ZS1maWJlciAobGFtYmRhICgpIDppbW1lZGlhdGVseS1kb25lKSkpKQorICAgICAgICAoam9pbi1m aWJlciBmKQorICAgICAgICAocmVsZWFzZS1maWJlciBmKQorICAgICAgICAoc2V0ZiByZWxlYXNl ZC1maWJlciBmKSkpCisgICAgKGhhbmRsZXItY2FzZQorICAgICAgICAocHJvZ24gKGZpYmVyLW1p Z3JhdGUgcmVsZWFzZWQtZmliZXIgb3RoZXIpCisgICAgICAgICAgICAgICAoZXJyb3IgImV4cGVj dGVkIERFQUQtRklCRVItRVJST1I7IG5vbmUgc2lnbmFsZWQiKSkKKyAgICAgIChkZWFkLWZpYmVy LWVycm9yICgpIDpvaykpCisgICAgKHNiLXRocmVhZDpqb2luLXRocmVhZCBvdGhlcikpKQpkaWZm IC0tZ2l0IGEvdGVzdHMvZmliZXIucHVyZS5saXNwIGIvdGVzdHMvZmliZXIucHVyZS5saXNwCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uMGJiZTFkNGRiCi0tLSAvZGV2L251 bGwKKysrIGIvdGVzdHMvZmliZXIucHVyZS5saXNwCkBAIC0wLDAgKzEsNDU3IEBACis7Ozs7IFRl c3RzIGZvciBzYi1maWJlciwgb25lIHBlciBwdWJsaWMgZW50cnkgcG9pbnQgYW5kIGVycm9yIGNh c2UuCis7Ozs7IFN0cmVzcyBhbmQgcmVncmVzc2lvbiBjb3ZlcmFnZSBsaXZlcyBpbiBmaWJlci5p bXB1cmUubGlzcC4KKworOzs7OyBUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIFNCQ0wgc3lz dGVtLiBTZWUgdGhlIFJFQURNRSBmaWxlIGZvcgorOzs7OyBtb3JlIGluZm9ybWF0aW9uLgorCiso dW5sZXNzIChhbmQgKG1lbWJlciA6c2ItdGhyZWFkICpmZWF0dXJlcyopCisgICAgICAgICAgICAg KG1lbWJlciA6c2ItZmliZXIgKmZlYXR1cmVzKikKKyAgICAgICAgICAgICAob3IgKG1lbWJlciA6 eDg2LTY0ICpmZWF0dXJlcyopCisgICAgICAgICAgICAgICAgIChtZW1iZXIgOmFybTY0ICpmZWF0 dXJlcyopKQorICAgICAgICAgICAgIChub3QgKG1lbWJlciA6d2luMzIgKmZlYXR1cmVzKikpKQor ICAoaW52b2tlLXJlc3RhcnQgJ3J1bi10ZXN0czo6c2tpcC1maWxlKSkKKworKHJlcXVpcmUgOnNi LWZpYmVyKQorKHVzZS1wYWNrYWdlIDpzYi1maWJlcikKKworKGRlZm1hY3JvIHdpdGgtbWFpbi1m aWJlciAoKG1haW4pICZib2R5IGJvZHkpCisgIGAobGV0ICgoLG1haW4gKG1ha2UtbWFpbi1maWJl cikpKQorICAgICAodW53aW5kLXByb3RlY3QgKHByb2duICxAYm9keSkKKyAgICAgICAocmVsZWFz ZS1maWJlciAsbWFpbikpKSkKKworKGRlZm1hY3JvIHdpdGgtbWFpbitjaGlsZCAoKG1haW4gY2hp bGQgZW50cnktZm4gJnJlc3QgbWFrZS1hcmdzKSAmYm9keSBib2R5KQorICBgKHdpdGgtbWFpbi1m aWJlciAoLG1haW4pCisgICAgICh3aXRoLWZpYmVyICgsY2hpbGQgLGVudHJ5LWZuICxAbWFrZS1h cmdzKSAsQGJvZHkpKSkKKworOzs7IC0tLSBMaWZlY3ljbGUgLS0tCisKKyh3aXRoLXRlc3QgKDpu YW1lICg6ZmliZXIgOm1ha2UtYW5kLWRlc3Ryb3kpKQorICAod2l0aC1maWJlci10aHJlYWQgKCkK KyAgICAobGV0ICgoZiAobWFrZS1maWJlciAobGFtYmRhICgpKSkpKQorICAgICAgKGFzc2VydCAo ZmliZXItYWxpdmUtcCBmKSkKKyAgICAgIChhc3NlcnQgKGVxIChmaWJlci1zdGF0ZSBmKSA6bmV3 KSkKKyAgICAgIChyZWxlYXNlLWZpYmVyIGYpCisgICAgICAoYXNzZXJ0IChub3QgKGZpYmVyLWFs aXZlLXAgZikpKQorICAgICAgOzsgRG91YmxlIGRlc3Ryb3kgaXMgYSBuby1vcC4KKyAgICAgIChy ZWxlYXNlLWZpYmVyIGYpKSkpCisKKyh3aXRoLXRlc3QgKDpuYW1lICg6ZmliZXIgOm1ha2UtZmli ZXIgOmN1c3RvbS1zaXplcykpCisgICh3aXRoLWZpYmVyLXRocmVhZCAoKQorICAgIChsZXQgKChm IChtYWtlLWZpYmVyIChsYW1iZGEgKCkpIDpzdGFjay1zaXplIDEzMTA3MiA6YmluZGluZy1zdGFj ay1zaXplIDE2Mzg0KSkpCisgICAgICAoYXNzZXJ0IChmaWJlci1hbGl2ZS1wIGYpKQorICAgICAg KHJlbGVhc2UtZmliZXIgZikpKSkKKworKHdpdGgtdGVzdCAoOm5hbWUgKDpmaWJlciA6bWFrZS1m aWJlciA6cmVxdWlyZXMtbWFpbi1maWJlcikpCisgIChsZXQgKChzYi1maWJlcjo6KmN1cnJlbnQt ZmliZXIqIG5pbCkpCisgICAgKGFzc2VydC1lcnJvciAobWFrZS1maWJlciAobGFtYmRhICgpKSkp KSkKKworKHdpdGgtdGVzdCAoOm5hbWUgKDpmaWJlciA6d2l0aC1maWJlci1jbGVhbnMtdXApKQor ICAod2l0aC1maWJlci10aHJlYWQgKCkKKyAgICAobGV0IChjYXB0dXJlZCkKKyAgICAgICh3aXRo LWZpYmVyIChmIChsYW1iZGEgKCkpIDpzdGFjay1zaXplIDY1NTM2KQorICAgICAgICAoc2V0ZiBj YXB0dXJlZCBmKQorICAgICAgICAoYXNzZXJ0IChmaWJlci1hbGl2ZS1wIGYpKSkKKyAgICAgIChh c3NlcnQgKG5vdCAoZmliZXItYWxpdmUtcCBjYXB0dXJlZCkpKSkpKQorCisod2l0aC10ZXN0ICg6 bmFtZSAoOmZpYmVyIDp3aXRoLWZpYmVyLXRocmVhZCA6Y3JlYXRlcy1hbmQtcmVsZWFzZXMpKQor ICAobGV0ICgoc2ItZmliZXI6OipjdXJyZW50LWZpYmVyKiBuaWwpKQorICAgICh3aXRoLWZpYmVy LXRocmVhZCAoKQorICAgICAgKGFzc2VydCAodHlwZXAgKmN1cnJlbnQtZmliZXIqICdmaWJlcikp CisgICAgICAoYXNzZXJ0IChmaWJlci1hbGl2ZS1wICpjdXJyZW50LWZpYmVyKikpKQorICAgIChh c3NlcnQgKG51bGwgKmN1cnJlbnQtZmliZXIqKSkpKQorCisod2l0aC10ZXN0ICg6bmFtZSAoOmZp YmVyIDp3aXRoLWZpYmVyLXRocmVhZCA6bmVzdGVkLWlzLW5vb3ApKQorICA7OyBJZiAqQ1VSUkVO VC1GSUJFUiogaXMgYWxyZWFkeSBib3VuZCwgdGhlIGlubmVyIFdJVEgtRklCRVItVEhSRUFECisg IDs7IG11c3Qgbm90IGNyZWF0ZSBvciByZWxlYXNlIGFueXRoaW5nLgorICAod2l0aC1tYWluLWZp YmVyIChvdXRlcikKKyAgICAod2l0aC1maWJlci10aHJlYWQgKCkKKyAgICAgIChhc3NlcnQgKGVx IG91dGVyICpjdXJyZW50LWZpYmVyKikpKQorICAgIChhc3NlcnQgKGVxIG91dGVyICpjdXJyZW50 LWZpYmVyKikpCisgICAgKGFzc2VydCAoZmliZXItYWxpdmUtcCBvdXRlcikpKSkKKworKHdpdGgt dGVzdCAoOm5hbWUgKDpmaWJlciA6bWFrZS1tYWluLWZpYmVyKSkKKyAgKHdpdGgtbWFpbi1maWJl ciAobWFpbikKKyAgICAoYXNzZXJ0IChmaWJlci1hbGl2ZS1wIG1haW4pKQorICAgIChhc3NlcnQg KGVxIG1haW4gKmN1cnJlbnQtZmliZXIqKSkpKQorCisod2l0aC10ZXN0ICg6bmFtZSAoOmZpYmVy IDpmaWJlci10aHJlYWQpKQorICAod2l0aC1tYWluK2NoaWxkIChtYWluIGYgKGxhbWJkYSAoKSkp CisgICAgKGFzc2VydCAoZXEgc2ItdGhyZWFkOipjdXJyZW50LXRocmVhZCogKGZpYmVyLXRocmVh ZCBtYWluKSkpCisgICAgKGFzc2VydCAoZXEgc2ItdGhyZWFkOipjdXJyZW50LXRocmVhZCogKGZp YmVyLXRocmVhZCBmKSkpKQorICA7OyBGb3JlaWduIGZpYmVyIGNhcnJpZXMgaXRzIGNyZWF0aW5n IHRocmVhZC4KKyAgKGxldCogKChvdGhlciAoc2ItdGhyZWFkOm1ha2UtdGhyZWFkCisgICAgICAg ICAgICAgICAgIChsYW1iZGEgKCkKKyAgICAgICAgICAgICAgICAgICAobWFrZS1tYWluLWZpYmVy KQorICAgICAgICAgICAgICAgICAgIChtYWtlLWZpYmVyIChsYW1iZGEgKCkpKSkKKyAgICAgICAg ICAgICAgICAgOm5hbWUgImZpYmVyLXRocmVhZC10ZXN0IikpCisgICAgICAgICAoZm9yZWlnbiAo c2ItdGhyZWFkOmpvaW4tdGhyZWFkIG90aGVyKSkpCisgICAgKGFzc2VydCAoZXEgb3RoZXIgKGZp YmVyLXRocmVhZCBmb3JlaWduKSkpCisgICAgKHJlbGVhc2UtZmliZXIgZm9yZWlnbikKKyAgICAo YXNzZXJ0IChudWxsIChmaWJlci10aHJlYWQgZm9yZWlnbikpKSkpCisKKyh3aXRoLXRlc3QgKDpu YW1lICg6ZmliZXIgOm5hbWUgOmlzLWFjY2Vzc2libGUtYW5kLXByaW50ZWQpKQorICAod2l0aC1m aWJlci10aHJlYWQgKCkKKyAgICAod2l0aC1maWJlciAoZiAobGFtYmRhICgpKSA6bmFtZSAid29y a2VyIikKKyAgICAgIChhc3NlcnQgKGVxdWFsICJ3b3JrZXIiIChmaWJlci1uYW1lIGYpKSkKKyAg ICAgIChhc3NlcnQgKHNlYXJjaCAid29ya2VyIiAocHJpbmMtdG8tc3RyaW5nIGYpKQorICAgICAg ICAgICAgICAoKQorICAgICAgICAgICAgICAiZXhwZWN0ZWQgUFJJTlQtT0JKRUNUIHRvIG1lbnRp b24gdGhlIG5hbWUsIGdvdCB+UyIKKyAgICAgICAgICAgICAgKHByaW5jLXRvLXN0cmluZyBmKSkp CisgICAgKHdpdGgtZmliZXIgKGYgKGxhbWJkYSAoKSkpCisgICAgICAoYXNzZXJ0IChudWxsIChm aWJlci1uYW1lIGYpKSkpKSkKKworKHdpdGgtdGVzdCAoOm5hbWUgKDpmaWJlciA6am9pbi1maWJl cikpCisgIDs7IGpvaW4tZmliZXIgZHJpdmVzIEZJQkVSIHRvIGNvbXBsZXRpb24sIHByb3BhZ2F0 ZXMgZW50cnktZm4gcmV0dXJuCisgIDs7IHZhbHVlcyAoaW5jbHVkaW5nIHplcm8pLCBhbmQgbGVh dmVzIHRoZSBmaWJlciBERUFELgorICAod2l0aC1tYWluK2NoaWxkIChtYWluIGNoaWxkIChsYW1i ZGEgKCkgKHlpZWxkLWZpYmVyIDpzdGVwKSA6ZG9uZSkpCisgICAgKGFzc2VydCAoZXEgOmRvbmUg KGpvaW4tZmliZXIgY2hpbGQpKSkKKyAgICAoYXNzZXJ0IChlcSAoZmliZXItc3RhdGUgY2hpbGQp IDpkZWFkKSkpCisgICh3aXRoLW1haW4rY2hpbGQgKG1haW4gY2hpbGQgKGxhbWJkYSAoKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHlpZWxkLWZpYmVyIDpzdGVwKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlcyA6YSAxICNceCkpKQorICAgIChtdWx0 aXBsZS12YWx1ZS1iaW5kIChrIG4gYykgKGpvaW4tZmliZXIgY2hpbGQpCisgICAgICAoYXNzZXJ0 IChlcSA6YSBrKSkKKyAgICAgIChhc3NlcnQgKGVxbCAxIG4pKQorICAgICAgKGFzc2VydCAoZXFs ICNceCBjKSkpKQorICAod2l0aC1tYWluK2NoaWxkIChtYWluIGNoaWxkIChsYW1iZGEgKCkgKHlp ZWxkLWZpYmVyIDpzdGVwKSAodmFsdWVzKSkpCisgICAgKGFzc2VydCAoZXF1YWwgJygpIChtdWx0 aXBsZS12YWx1ZS1saXN0IChqb2luLWZpYmVyIGNoaWxkKSkpKSkpCisKKyh3aXRoLXRlc3QgKDpu YW1lICg6ZmliZXIgOnlpZWxkLWZpYmVyIDp6ZXJvLXZhbHVlcykpCisgICh3aXRoLW1haW4rY2hp bGQgKG1haW4gY2hpbGQgKGxhbWJkYSAoKSAoeWllbGQtZmliZXIpKSkKKyAgICAoYXNzZXJ0IChl cXVhbCAnKCkgKG11bHRpcGxlLXZhbHVlLWxpc3QgKHN3aXRjaC1maWJlciBtYWluIGNoaWxkKSkp KSkpCisKKzs7OyAtLS0gSW50ZXJydXB0IC8gY29uZGl0aW9uIHN0YWdpbmcgLS0tCisKKyh3aXRo LXRlc3QgKDpuYW1lICg6ZmliZXIgOmludGVycnVwdC1maWJlciA6bmV3LW5ldmVyLXJ1bnMpKQor ICAobGV0IChyYW4pCisgICAgKHdpdGgtbWFpbitjaGlsZCAobWFpbiBmIChsYW1iZGEgKCkgKHNl dGYgcmFuIHQpIDp1bnJlYWNoZWQpKQorICAgICAgKGludGVycnVwdC1maWJlciBmIChtYWtlLWNv bmRpdGlvbiAnc2ltcGxlLWVycm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDpmb3JtYXQtY29udHJvbCAiY2FuY2VsbGVkIikpCisgICAgICAoaGFuZGxlci1jYXNl IChzd2l0Y2gtZmliZXIgbWFpbiBmKQorICAgICAgICAoc2ltcGxlLWVycm9yIChlKQorICAgICAg ICAgIChhc3NlcnQgKHNlYXJjaCAiY2FuY2VsbGVkIiAocHJpbmMtdG8tc3RyaW5nIGUpKSkpKQor ICAgICAgKGFzc2VydCAobnVsbCByYW4pKSkpKQorCisod2l0aC10ZXN0ICg6bmFtZSAoOmZpYmVy IDppbnRlcnJ1cHQtZmliZXIgOnJ1bm5hYmxlLWZpcmVzLWluLWNvbnRleHQpKQorICAobGV0IChj YXVnaHQpCisgICAgKHdpdGgtbWFpbitjaGlsZCAobWFpbiBmIChsYW1iZGEgKCkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoaGFuZGxlci1jYXNlICh5aWVsZC1maWJlcikKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaW1wbGUtZXJyb3IgKGUpIChzZXRmIGNhdWdo dCAocHJpbmMtdG8tc3RyaW5nIGUpKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OmRvbmUpKQorICAgICAgKHN3aXRjaC1maWJlciBtYWluIGYpICAgICAgICAgICAgIDsgcnVuIHRv IHRoZSB5aWVsZAorICAgICAgKGludGVycnVwdC1maWJlciBmIChtYWtlLWNvbmRpdGlvbiAnc2lt cGxlLWVycm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpmb3Jt YXQtY29udHJvbCAib3VjaCIpKQorICAgICAgKGFzc2VydCAoZXEgOmRvbmUgKGpvaW4tZmliZXIg ZikpKQorICAgICAgKGFzc2VydCAoc3RyaW5nPSBjYXVnaHQgIm91Y2giKSkpKSkKKworKHdpdGgt dGVzdCAoOm5hbWUgKDpmaWJlciA6ZmliZXItY29uZGl0aW9uKSkKKyAgKHdpdGgtZmliZXItdGhy ZWFkICgpCisgICAgKHdpdGgtZmliZXIgKGYgKGxhbWJkYSAoKSkpCisgICAgICAoYXNzZXJ0IChu dWxsIChmaWJlci1jb25kaXRpb24gZikpKQorICAgICAgKGxldCAoKGMgKG1ha2UtY29uZGl0aW9u ICdzaW1wbGUtZXJyb3IgOmZvcm1hdC1jb250cm9sICJ4IikpKQorICAgICAgICAoaW50ZXJydXB0 LWZpYmVyIGYgYykKKyAgICAgICAgKGFzc2VydCAoZXEgYyAoZmliZXItY29uZGl0aW9uIGYpKSkp KSkpCisKKyh3aXRoLXRlc3QgKDpuYW1lICg6ZmliZXIgOmludGVycnVwdC1maWJlciA6c3RheXMt c3RhZ2VkLWFjcm9zcy15aWVsZCkpCisgIDs7IEEgY29uZGl0aW9uIHN0YWdlZCB2aWEgSU5URVJS VVBULUZJQkVSIG11c3QgZmlyZSBvbmx5IHdoZW4gdGhlCisgIDs7IHRhcmdldCBhY3R1YWxseSBy ZXN1bWVzIC0tIG5vdCB3aGVuIHRoZSB0YXJnZXQgeWllbGRzIGJhY2sgdG8KKyAgOzsgaXRzIHJl c3VtZXIuICBSZWdyZXNzaW9uOiB0aGUgaW50ZXJydXB0IGFuZCBlc2NhcGUgY2hhbm5lbHMgYXJl CisgIDs7IHNlcGFyYXRlOyBvbmx5IGFuIGVudHJ5LWZ1bmN0aW9uIGVzY2FwZSBwcm9wYWdhdGVz IHRvIHRoZQorICA7OyByZXN1bWVyLgorICAobGV0ICgoYyAobWFrZS1jb25kaXRpb24gJ3NpbXBs ZS1lcnJvciA6Zm9ybWF0LWNvbnRyb2wgInN0YWdlZCIpKQorICAgICAgICBjYXVnaHQtaW4tY2hp bGQpCisgICAgKHdpdGgtbWFpbitjaGlsZCAobWFpbiBjaGlsZAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGxhbWJkYSAoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50ZXJy dXB0LWZpYmVyICpjdXJyZW50LWZpYmVyKiBjKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoaGFuZGxlci1jYXNlICh5aWVsZC1maWJlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoc2ltcGxlLWVycm9yIChlKSAoc2V0ZiBjYXVnaHQtaW4tY2hpbGQgZSkpKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA6ZG9uZSkpCisgICAgICAoaGFuZGxlci1jYXNlIChzd2l0 Y2gtZmliZXIgbWFpbiBjaGlsZCkKKyAgICAgICAgKHNpbXBsZS1lcnJvciAoZSkKKyAgICAgICAg ICAoZXJyb3IgImNvbmRpdGlvbiBsZWFrZWQgdG8gcmVzdW1lcjogflMiIGUpKSkKKyAgICAgIChh c3NlcnQgKGVxIGMgKGZpYmVyLWNvbmRpdGlvbiBjaGlsZCkpICgpCisgICAgICAgICAgICAgICJj b25kaXRpb24gbm8gbG9uZ2VyIHN0YWdlZCBvbiBjaGlsZCBhZnRlciB5aWVsZCIpCisgICAgICAo YXNzZXJ0IChlcSA6ZG9uZSAoam9pbi1maWJlciBjaGlsZCkpKQorICAgICAgKGFzc2VydCAoZXEg YyBjYXVnaHQtaW4tY2hpbGQpICgpCisgICAgICAgICAgICAgICJjaGlsZCBkaWQgbm90IHNlZSBz dGFnZWQgY29uZGl0aW9uIG9uIHJlc3VtZSIpKSkpCisKKyh3aXRoLXRlc3QgKDpuYW1lICg6Zmli ZXIgOmludGVycnVwdC1maWJlciA6ZGVhZC1lcnJvcnMpKQorICAod2l0aC1maWJlci10aHJlYWQg KCkKKyAgICAobGV0ICgoZiAobWFrZS1maWJlciAobGFtYmRhICgpKSkpKQorICAgICAgKHJlbGVh c2UtZmliZXIgZikKKyAgICAgIChhc3NlcnQtZXJyb3IKKyAgICAgICAoaW50ZXJydXB0LWZpYmVy IGYgKG1ha2UtY29uZGl0aW9uICdzaW1wbGUtZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDpmb3JtYXQtY29udHJvbCAieCIpKQorICAgICAgIGRlYWQtZmli ZXItZXJyb3IpKSkpCisKKzs7OyAtLS0gQ29udHJvbCB0cmFuc2ZlciAtLS0KKworKHdpdGgtdGVz dCAoOm5hbWUgKDpmaWJlciA6c3dpdGNoLWZpYmVyIDpiYXNpYykpCisgIChsZXQgKGxvZykKKyAg ICAod2l0aC1tYWluK2NoaWxkIChtYWluIGNoaWxkCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAobGFtYmRhICgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwdXNoIDpjaGlsZCBs b2cpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzd2l0Y2gtZmliZXIgKmN1cnJlbnQt ZmliZXIqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpYmVy LXJldHVybi1maWJlciAqY3VycmVudC1maWJlciopKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAocHVzaCA6Y2hpbGQtYWdhaW4gbG9nKSkpCisgICAgICAocHVzaCA6bWFpbiBsb2cpCisg ICAgICAoc3dpdGNoLWZpYmVyIG1haW4gY2hpbGQpCisgICAgICAocHVzaCA6bWFpbi1hZ2FpbiBs b2cpCisgICAgICAoc3dpdGNoLWZpYmVyIG1haW4gY2hpbGQpCisgICAgICAoYXNzZXJ0IChlcXVh bCAobnJldmVyc2UgbG9nKSAnKDptYWluIDpjaGlsZCA6bWFpbi1hZ2FpbiA6Y2hpbGQtYWdhaW4p KSkpKSkKKworKHdpdGgtdGVzdCAoOm5hbWUgKDpmaWJlciA6c3dpdGNoLWZpYmVyIDp2YWx1ZS1p bikpCisgIDs7IFNXSVRDSC1GSUJFUiBkZWxpdmVycyBWQUxVRSB0byB0aGUgcmVzdW1lZCBmaWJl ciBhcyB0aGUgcmV0dXJuCisgIDs7IHZhbHVlIG9mIGl0cyBvd24gKHByZWNlZGluZykgWUlFTEQt RklCRVIgLyBTV0lUQ0gtRklCRVIgY2FsbC4KKyAgKGxldCAocmVjZWl2ZWQpCisgICAgKHdpdGgt bWFpbitjaGlsZCAobWFpbiBjaGlsZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhbWJk YSAoKSAoc2V0ZiByZWNlaXZlZCAoeWllbGQtZmliZXIpKSkpCisgICAgICAoc3dpdGNoLWZpYmVy IG1haW4gY2hpbGQpICAgICAgICAgICA7IGZpcnN0IGVudHJ5LCBubyB2YWx1ZQorICAgICAgKHN3 aXRjaC1maWJlciBtYWluIGNoaWxkIDpoZWxsbykgICAgOyByZXN1bWVkOiB5aWVsZCByZXR1cm5z IDpoZWxsbworICAgICAgKGFzc2VydCAoZXEgcmVjZWl2ZWQgOmhlbGxvKSkpKSkKKworKHdpdGgt dGVzdCAoOm5hbWUgKDpmaWJlciA6eWllbGQtZmliZXIgOnZhbHVlLW91dCkpCisgIDs7IFlJRUxE LUZJQkVSJ3MgYXJndW1lbnQgYmVjb21lcyBTV0lUQ0gtRklCRVIncyByZXR1cm4gdmFsdWUgaW4K KyAgOzsgdGhlIHJlc3VtZXIuCisgICh3aXRoLW1haW4rY2hpbGQgKG1haW4gY2hpbGQgKGxhbWJk YSAoKSAoeWllbGQtZmliZXIgOmZyb20tY2hpbGQpKSkKKyAgICAoYXNzZXJ0IChlcSA6ZnJvbS1j aGlsZCAoc3dpdGNoLWZpYmVyIG1haW4gY2hpbGQpKSkpKQorCisod2l0aC10ZXN0ICg6bmFtZSAo OmZpYmVyIDpzd2l0Y2gtZmliZXIgOmVudHJ5LWZuLXJldHVybi1wcm9wYWdhdGVzKSkKKyAgOzsg V2hlbiBhIGZpYmVyJ3MgZW50cnkgZnVuY3Rpb24gcmV0dXJucyBub3JtYWxseSwgaXRzIHZhbHVl IGlzCisgIDs7IGRlbGl2ZXJlZCB0byB0aGUgcmVzdW1lciBvbiBhdXRvLXJldHVybi4KKyAgKHdp dGgtbWFpbitjaGlsZCAobWFpbiBjaGlsZCAobGFtYmRhICgpIDpkb25lKSkKKyAgICAoYXNzZXJ0 IChlcSA6ZG9uZSAoc3dpdGNoLWZpYmVyIG1haW4gY2hpbGQpKSkKKyAgICAoYXNzZXJ0IChlcSAo ZmliZXItc3RhdGUgY2hpbGQpIDpkZWFkKSkKKyAgICAoYXNzZXJ0IChub3QgKGZpYmVyLWFsaXZl LXAgY2hpbGQpKSkpKQorCisod2l0aC10ZXN0ICg6bmFtZSAoOmZpYmVyIDp5aWVsZC1maWJlciA6 bm8tcmV0dXJuLWZpYmVyLWVycm9ycykpCisgICh3aXRoLW1haW4tZmliZXIgKG1haW4pCisgICAg KGFzc2VydCAoZXEgbWFpbiAqY3VycmVudC1maWJlciopKQorICAgIChhc3NlcnQtZXJyb3IgKHlp ZWxkLWZpYmVyKSkpKQorCisod2l0aC10ZXN0ICg6bmFtZSAoOmZpYmVyIDpyZXN1bWUtZmliZXIg OmJhc2ljKSkKKyAgOzsgUkVTVU1FLUZJQkVSIGlzIChTV0lUQ0gtRklCRVIgKkNVUlJFTlQtRklC RVIqIFRPIC4gVkFMVUVTKTsgdGVzdAorICA7OyBib3RoIGRpcmVjdGlvbnMgb2YgdGhlIHZhbHVl IGNoYW5uZWwgaW5jbHVkaW5nIG11bHRpcGxlIHZhbHVlcy4KKyAgKHdpdGgtbWFpbitjaGlsZCAo bWFpbiBjaGlsZAorICAgICAgICAgICAgICAgICAgICAgICAgIChsYW1iZGEgKCkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIChsZXQgKCh2IChtdWx0aXBsZS12YWx1ZS1saXN0ICh5aWVsZC1m aWJlciA6YSAxICNceCkpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpc3QgOmdv dCB2KSkpKQorICAgIChtdWx0aXBsZS12YWx1ZS1iaW5kIChrIG4gYykgKHJlc3VtZS1maWJlciBj aGlsZCkKKyAgICAgIChhc3NlcnQgKGVxIDphIGspKQorICAgICAgKGFzc2VydCAoZXFsIDEgbikp CisgICAgICAoYXNzZXJ0IChlcWwgI1x4IGMpKSkKKyAgICAoYXNzZXJ0IChlcXVhbCAnKDpnb3Qg KDk5KSkgKHJlc3VtZS1maWJlciBjaGlsZCA5OSkpKSkpCisKKyh3aXRoLXRlc3QgKDpuYW1lICg6 ZmliZXIgOnJlc3VtZS1maWJlciA6bm8tY3VycmVudC1maWJlci1lcnJvcnMpKQorICAod2l0aC1t YWluK2NoaWxkIChtYWluIGYgKGxhbWJkYSAoKSkpCisgICAgKGFzc2VydCAoZXEgbWFpbiAqY3Vy cmVudC1maWJlciopKQorICAgIChsZXQgKChzYi1maWJlcjo6KmN1cnJlbnQtZmliZXIqIG5pbCkp CisgICAgICAoYXNzZXJ0LWVycm9yIChyZXN1bWUtZmliZXIgZikgbm8tY3VycmVudC1maWJlci1l cnJvcikpKSkKKworKHdpdGgtdGVzdCAoOm5hbWUgKDpmaWJlciA6eWllbGQtcHJlc2VydmVzLXJl c3VtZXItcmV0dXJuLWZpYmVyKSkKKyAgKHdpdGgtbWFpbi1maWJlciAobWFpbikKKyAgICAobGV0 KiAoKGcyIChtYWtlLWZpYmVyIChsYW1iZGEgKCkgKHlpZWxkLWZpYmVyIDQyKSkpKQorICAgICAg ICAgICAoZzEgKG1ha2UtZmliZXIKKyAgICAgICAgICAgICAgICAobGFtYmRhICgpCisgICAgICAg ICAgICAgICAgICAobGV0ICgodiAocmVzdW1lLWZpYmVyIGcyKSkpCisgICAgICAgICAgICAgICAg ICAgICh5aWVsZC1maWJlciB2KSkpKSkpCisgICAgICAoYXNzZXJ0IChlcWwgNDIgKHJlc3VtZS1m aWJlciBnMSkpKQorICAgICAgKHJlbGVhc2UtZmliZXIgZzEpCisgICAgICAocmVsZWFzZS1maWJl ciBnMikpKSkKKworKHdpdGgtdGVzdCAoOm5hbWUgKDpmaWJlciA6c3RhY2stdXNhZ2UtYWNjZXNz b3JzKSkKKyAgKGxldCogKChzdGFjay1zaXplIDEzMTA3MikKKyAgICAgICAgIChicy1zaXplICAg IDE2Mzg0KSkKKyAgICAod2l0aC1tYWluLWZpYmVyIChtYWluKQorICAgICAgKGxldCAoKGYgKG1h a2UtZmliZXIgKGxhbWJkYSAoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJvZ3Yg JygqcHJpbnQtYmFzZSopICcoMTYpICh5aWVsZC1maWJlcikpKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgOnN0YWNrLXNpemUgc3RhY2stc2l6ZQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgOmJpbmRpbmctc3RhY2stc2l6ZSBicy1zaXplKSkpCisgICAgICAgIChhc3NlcnQgKD0gc3Rh Y2stc2l6ZSAoZmliZXItY29udHJvbC1zdGFjay1zaXplIGYpKSkKKyAgICAgICAgKGFzc2VydCAo PSBicy1zaXplICAgIChmaWJlci1iaW5kaW5nLXN0YWNrLXNpemUgZikpKQorICAgICAgICAoYXNz ZXJ0ICh6ZXJvcCAoZmliZXItYmluZGluZy1zdGFjay11c2FnZSBmKSkpCisgICAgICAgIChzd2l0 Y2gtZmliZXIgbWFpbiBmKSAgICAgICAgICAgICA7IHJ1biB0byB0aGUgeWllbGQKKyAgICAgICAg KGFzc2VydCAoPSBzdGFjay1zaXplIChmaWJlci1jb250cm9sLXN0YWNrLXNpemUgZikpKQorICAg ICAgICAoYXNzZXJ0IChwbHVzcCAoZmliZXItY29udHJvbC1zdGFjay11c2FnZSBmKSkpCisgICAg ICAgIChhc3NlcnQgKHBsdXNwIChmaWJlci1iaW5kaW5nLXN0YWNrLXVzYWdlIGYpKQorICAgICAg ICAgICAgICAgICgpCisgICAgICAgICAgICAgICAgImV4cGVjdGVkIFBST0dWIHRvIGdyb3cgdGhl IGJpbmRpbmcgc3RhY2s7IGdvdCB+RCIKKyAgICAgICAgICAgICAgICAoZmliZXItYmluZGluZy1z dGFjay11c2FnZSBmKSkKKyAgICAgICAgKHJlbGVhc2UtZmliZXIgZikKKyAgICAgICAgKGFzc2Vy dCAoemVyb3AgKGZpYmVyLWNvbnRyb2wtc3RhY2stc2l6ZSBmKSkpCisgICAgICAgIChhc3NlcnQg KHplcm9wIChmaWJlci1jb250cm9sLXN0YWNrLXVzYWdlIGYpKSkKKyAgICAgICAgKGFzc2VydCAo emVyb3AgKGZpYmVyLWJpbmRpbmctc3RhY2stc2l6ZSBmKSkpCisgICAgICAgIChhc3NlcnQgKHpl cm9wIChmaWJlci1iaW5kaW5nLXN0YWNrLXVzYWdlIGYpKSkpCisgICAgICA7OyBNYWluIGZpYmVy OiBiaW5kaW5nLXN0YWNrLXNpemUgPSAwIChub3Qgb3duZWQpOyBvdGhlciB0aHJlZQorICAgICAg Ozsgc2hvdWxkIGJlIHF1ZXJ5YWJsZSB3aXRob3V0IGVycm9yLgorICAgICAgKGFzc2VydCAoemVy b3AgKGZpYmVyLWJpbmRpbmctc3RhY2stc2l6ZSBtYWluKSkpCisgICAgICAoZmliZXItY29udHJv bC1zdGFjay1zaXplIG1haW4pCisgICAgICAoZmliZXItY29udHJvbC1zdGFjay11c2FnZSBtYWlu KQorICAgICAgKGZpYmVyLWJpbmRpbmctc3RhY2stdXNhZ2UgbWFpbikpKSkKKworOzs7IC0tLSBT d2l0Y2ggdmFsaWRhdGlvbiAtLS0KKworKHdpdGgtdGVzdCAoOm5hbWUgKDpmaWJlciA6c3dpdGNo LWZpYmVyIDpkZXN0cm95ZWQtZXJyb3JzKSkKKyAgKHdpdGgtbWFpbi1maWJlciAobWFpbikKKyAg ICAobGV0ICgoY2hpbGQgKG1ha2UtZmliZXIgKGxhbWJkYSAoKSkpKSkKKyAgICAgIChyZWxlYXNl LWZpYmVyIGNoaWxkKQorICAgICAgKGFzc2VydC1lcnJvciAoc3dpdGNoLWZpYmVyIG1haW4gY2hp bGQpIGRlYWQtZmliZXItZXJyb3IpKSkpCisKKyh3aXRoLXRlc3QgKDpuYW1lICg6ZmliZXIgOnN3 aXRjaC1maWJlciA6d3JvbmctdGhyZWFkLWVycm9ycykpCisgICh3aXRoLW1haW4tZmliZXIgKG1h aW4pCisgICAgKGxldCogKChvdGhlciAoc2ItdGhyZWFkOm1ha2UtdGhyZWFkCisgICAgICAgICAg ICAgICAgICAgKGxhbWJkYSAoKQorICAgICAgICAgICAgICAgICAgICAgKG1ha2UtbWFpbi1maWJl cikKKyAgICAgICAgICAgICAgICAgICAgIChtYWtlLWZpYmVyIChsYW1iZGEgKCkpKSkpKQorICAg ICAgICAgICAoZm9yZWlnbiAoc2ItdGhyZWFkOmpvaW4tdGhyZWFkIG90aGVyKSkpCisgICAgICAo YXNzZXJ0LWVycm9yIChzd2l0Y2gtZmliZXIgbWFpbiBmb3JlaWduKSBmaWJlci10aHJlYWQtbWlz bWF0Y2gtZXJyb3IpCisgICAgICAocmVsZWFzZS1maWJlciBmb3JlaWduKSkpKQorCis7OzsgLS0t IER5bmFtaWMgZW52aXJvbm1lbnQgaXNvbGF0aW9uIGFjcm9zcyBzd2l0Y2hlcyAtLS0KKworKGRl ZnZhciAqZmliZXItdGVzdC12YXIqIDptYWluLXZhbHVlKQorCisod2l0aC10ZXN0ICg6bmFtZSAo OmZpYmVyIDpzcGVjaWFsLXZhcmlhYmxlLWlzb2xhdGlvbikpCisgICh3aXRoLW1haW4tZmliZXIg KG1haW4pCisgICAgKGxldCogKChzZWVuIG5pbCkKKyAgICAgICAgICAgKGNoaWxkIG5pbCkpCisg ICAgICAoc2V0ZiBjaGlsZCAobWFrZS1maWJlcgorICAgICAgICAgICAgICAgICAgIChsYW1iZGEg KCkKKyAgICAgICAgICAgICAgICAgICAgIChzZXRmIHNlZW4gKmZpYmVyLXRlc3QtdmFyKikKKyAg ICAgICAgICAgICAgICAgICAgIChzd2l0Y2gtZmliZXIgY2hpbGQgbWFpbikpKSkKKyAgICAgIChs ZXQgKCgqZmliZXItdGVzdC12YXIqIDpyZWJvdW5kKSkKKyAgICAgICAgKHN3aXRjaC1maWJlciBt YWluIGNoaWxkKQorICAgICAgICAoYXNzZXJ0IChlcSAqZmliZXItdGVzdC12YXIqIDpyZWJvdW5k KSkpCisgICAgICAoYXNzZXJ0IChlcSBzZWVuIDpyZWJvdW5kKSkKKyAgICAgIChyZWxlYXNlLWZp YmVyIGNoaWxkKSkpKQorCisod2l0aC10ZXN0ICg6bmFtZSAoOmZpYmVyIDpoYW5kbGVyLWNhc2Ut YWNyb3NzLXN3aXRjaCkpCisgICh3aXRoLW1haW4tZmliZXIgKG1haW4pCisgICAgKGxldCogKChj aGlsZCBuaWwpCisgICAgICAgICAgIChjYXVnaHQgbmlsKSkKKyAgICAgIChzZXRmIGNoaWxkICht YWtlLWZpYmVyCisgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAoKQorICAgICAgICAgICAgICAg ICAgICAgKGhhbmRsZXItY2FzZQorICAgICAgICAgICAgICAgICAgICAgICAgIChwcm9nbiAoc3dp dGNoLWZpYmVyIGNoaWxkIG1haW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChl cnJvciAidGVzdCBlcnJvciIpKQorICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IgKGMpIChz ZXRmIGNhdWdodCAocHJpbmMtdG8tc3RyaW5nIGMpKSkpCisgICAgICAgICAgICAgICAgICAgICAo c3dpdGNoLWZpYmVyIGNoaWxkIG1haW4pKSkpCisgICAgICAoc3dpdGNoLWZpYmVyIG1haW4gY2hp bGQpCisgICAgICAoc3dpdGNoLWZpYmVyIG1haW4gY2hpbGQpCisgICAgICAoYXNzZXJ0IChzdHJp bmc9IGNhdWdodCAidGVzdCBlcnJvciIpKQorICAgICAgKHJlbGVhc2UtZmliZXIgY2hpbGQpKSkp CisKKyh3aXRoLXRlc3QgKDpuYW1lICg6ZmliZXIgOnVud2luZC1wcm90ZWN0LWFjcm9zcy1zd2l0 Y2gpKQorICAod2l0aC1tYWluLWZpYmVyIChtYWluKQorICAgIChsZXQqICgoY2hpbGQgbmlsKQor ICAgICAgICAgICAoY2xlYW51cC1yYW4gbmlsKSkKKyAgICAgIChzZXRmIGNoaWxkIChtYWtlLWZp YmVyCisgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAoKQorICAgICAgICAgICAgICAgICAgICAg KHVud2luZC1wcm90ZWN0IChzd2l0Y2gtZmliZXIgY2hpbGQgbWFpbikKKyAgICAgICAgICAgICAg ICAgICAgICAgKHNldGYgY2xlYW51cC1yYW4gdCkpCisgICAgICAgICAgICAgICAgICAgICAoc3dp dGNoLWZpYmVyIGNoaWxkIG1haW4pKSkpCisgICAgICAoc3dpdGNoLWZpYmVyIG1haW4gY2hpbGQp CisgICAgICAoc3dpdGNoLWZpYmVyIG1haW4gY2hpbGQpCisgICAgICAoYXNzZXJ0IGNsZWFudXAt cmFuKQorICAgICAgKHJlbGVhc2UtZmliZXIgY2hpbGQpKSkpCisKKyh3aXRoLXRlc3QgKDpuYW1l ICg6ZmliZXIgOnRocm93LWNhbm5vdC1lc2NhcGUtZmliZXIpKQorICA7OyBUSFJPVyBvdXQgb2Yg YSBmaWJlciB0byBhIENBVENIIG9uIHRoZSBjYWxsZXIncyBzdGFjayBpcworICA7OyBpbnRlcmNl cHRlZCAoY29udHJvbC1lcnJvcikgLS0gaXQgd291bGQgb3RoZXJ3aXNlIHVud2luZCB0byBhCisg IDs7IGZyYW1lIG9uIGEgZGlmZmVyZW50IHN0YWNrLiAgRGlzdGluZ3Vpc2ggIm91dGVyIGNhdWdo dCIgdnMKKyAgOzsgImZlbGwgdGhyb3VnaCIgdmlhIHRoZSBlbnRyeS1mbidzIHRlcm1pbmFsIHNl bnRpbmVsIHZhbHVlLgorICAobGV0IChjaGlsZC1jYXVnaHQpCisgICAgKHdpdGgtbWFpbitjaGls ZCAobWFpbiBjaGlsZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAoKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoaGFuZGxlci1jYXNlICh0aHJvdyAnb3V0ZXIgOm91 dGVyLWZpcmVkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb250cm9sLWVycm9y ICgpIChzZXRmIGNoaWxkLWNhdWdodCB0KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDpmZWxsLXRocm91Z2gpKQorICAgICAgKGxldCAoKHJlc3VsdCAoY2F0Y2ggJ291dGVyIChzd2l0 Y2gtZmliZXIgbWFpbiBjaGlsZCkpKSkKKyAgICAgICAgKGFzc2VydCBjaGlsZC1jYXVnaHQgKCkg ImNoaWxkIGRpZCBub3QgY2F0Y2ggQ09OVFJPTC1FUlJPUiIpCisgICAgICAgIChhc3NlcnQgKGVx IHJlc3VsdCA6ZmVsbC10aHJvdWdoKSAoKQorICAgICAgICAgICAgICAgICJ0aHJvdyBlc2NhcGVk IHRvIG91dGVyIGNhdGNoIChnb3QgflMpIiByZXN1bHQpKSkpKQorCis7OzsgLS0tIFBpbm5pbmcg LS0tCisKKyh3aXRoLXRlc3QgKDpuYW1lICg6ZmliZXIgOndpdGgtZmliZXItcGlubmVkIDpwcmVk aWNhdGUpKQorICAod2l0aC1tYWluLWZpYmVyIChtYWluKQorICAgIChhc3NlcnQgKG5vdCAoZmli ZXItcGlubmVkLXAgbWFpbikpKQorICAgICh3aXRoLWZpYmVyLXBpbm5lZCAoKQorICAgICAgKGFz c2VydCAoZmliZXItcGlubmVkLXAgbWFpbikpCisgICAgICAod2l0aC1maWJlci1waW5uZWQgKCkK KyAgICAgICAgKGFzc2VydCAoPSAyIChmaWJlci1waW4tY291bnQgbWFpbikpKSkKKyAgICAgIChh c3NlcnQgKGZpYmVyLXBpbm5lZC1wIG1haW4pKSkKKyAgICAoYXNzZXJ0IChub3QgKGZpYmVyLXBp bm5lZC1wIG1haW4pKSkpKQorCisod2l0aC10ZXN0ICg6bmFtZSAoOmZpYmVyIDp3aXRoLWZpYmVy LXBpbm5lZCA6bm8tY3VycmVudC1maWJlci1lcnJvcnMpKQorICAobGV0ICgoc2ItZmliZXI6Oipj dXJyZW50LWZpYmVyKiBuaWwpKQorICAgIChhc3NlcnQtZXJyb3IgKHdpdGgtZmliZXItcGlubmVk ICgpIDp1bnJlYWNoYWJsZSkgbm8tY3VycmVudC1maWJlci1lcnJvcikpKQorCisod2l0aC10ZXN0 ICg6bmFtZSAoOmZpYmVyIDp3aXRoLWZpYmVyLXBpbm5lZCA6c3dpdGNoLWZyb20tcGlubmVkLWVy cm9ycykpCisgICh3aXRoLW1haW4rY2hpbGQgKG1haW4gY2hpbGQgKGxhbWJkYSAoKSkpCisgICAg KHdpdGgtZmliZXItcGlubmVkICgpCisgICAgICAoYXNzZXJ0LWVycm9yIChzd2l0Y2gtZmliZXIg bWFpbiBjaGlsZCkgcGlubmVkLWZpYmVyLWVycm9yKSkpKQorCis7OzsgLS0tIENvbmRpdGlvbnMg LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisKKyh3aXRoLXRlc3QgKDpuYW1lICg6ZmliZXIgOmNvbmRpdGlvbnMgOmJhc2UtY2F0Y2hlcy1z dWJjbGFzc2VzKSkKKyAgOzsgQSBzY2hlZHVsZXIgY2FuIEhBTkRMRVItQ0FTRSBvbiBGSUJFUi1F UlJPUiB0byBjYXRjaCBhbGwgc2ItZmliZXIKKyAgOzsgcHJlY29uZGl0aW9uIGZhaWx1cmVzIHVu aWZvcm1seS4KKyAgKHdpdGgtbWFpbi1maWJlciAobWFpbikKKyAgICAobGV0ICgoZGVhZCAobWFr ZS1maWJlciAobGFtYmRhICgpKSkpKQorICAgICAgKHJlbGVhc2UtZmliZXIgZGVhZCkKKyAgICAg IChsZXQgKChjYXVnaHQKKyAgICAgICAgICAgICAgKGhhbmRsZXItY2FzZSAoc3dpdGNoLWZpYmVy IG1haW4gZGVhZCkKKyAgICAgICAgICAgICAgICAoZmliZXItZXJyb3IgKGMpIGMpKSkpCisgICAg ICAgIChhc3NlcnQgKHR5cGVwIGNhdWdodCAnZGVhZC1maWJlci1lcnJvcikpCisgICAgICAgIChh c3NlcnQgKGVxIGRlYWQgKGZpYmVyLWVycm9yLWZpYmVyIGNhdWdodCkpKSkpKSkKKworKHdpdGgt dGVzdCAoOm5hbWUgKDpmaWJlciA6Y29uZGl0aW9ucyA6c3RhdGUtZXJyb3Itc2xvdHMpKQorICA7 OyBGSUJFUi1TVEFURS1FUlJPUiBleHBvc2VzIHRoZSBhY3R1YWwgYW5kIGV4cGVjdGVkIHN0YXRl cy4KKyAgKHdpdGgtbWFpbitjaGlsZCAobWFpbiBjaGlsZCAobGFtYmRhICgpKSkKKyAgICAoc3dp dGNoLWZpYmVyIG1haW4gY2hpbGQpICAgICAgICAgICA7IHJ1bnMgdG8gY29tcGxldGlvbiwgbm93 IDpkZWFkCisgICAgKGhhbmRsZXItY2FzZSAoc3dpdGNoLWZpYmVyIG1haW4gY2hpbGQpCisgICAg ICAoZmliZXItc3RhdGUtZXJyb3IgKGMpCisgICAgICAgIChhc3NlcnQgKGVxIGNoaWxkIChmaWJl ci1lcnJvci1maWJlciBjKSkpCisgICAgICAgIChhc3NlcnQgKGVxIDpkZWFkIChmaWJlci1zdGF0 ZS1lcnJvci1zdGF0ZSBjKSkpCisgICAgICAgIChhc3NlcnQgKGVxdWFsICcoOnJ1bm5hYmxlIDpu ZXcpIChmaWJlci1zdGF0ZS1lcnJvci1leHBlY3RlZCBjKSkpKSkpKQorCisod2l0aC10ZXN0ICg6 bmFtZSAoOmZpYmVyIDpjb25kaXRpb25zIDpwaW5uZWQtZXJyb3ItZGVwdGgpKQorICAod2l0aC1t YWluK2NoaWxkIChtYWluIGNoaWxkIChsYW1iZGEgKCkpKQorICAgICh3aXRoLWZpYmVyLXBpbm5l ZCAoKQorICAgICAgKHdpdGgtZmliZXItcGlubmVkICgpCisgICAgICAgIChoYW5kbGVyLWNhc2Ug KHN3aXRjaC1maWJlciBtYWluIGNoaWxkKQorICAgICAgICAgIChwaW5uZWQtZmliZXItZXJyb3Ig KGMpCisgICAgICAgICAgICAoYXNzZXJ0IChlcSBtYWluIChmaWJlci1lcnJvci1maWJlciBjKSkp CisgICAgICAgICAgICAoYXNzZXJ0ICg9IDIgKHBpbm5lZC1maWJlci1lcnJvci1kZXB0aCBjKSkp KSkpKSkpCisKKyh3aXRoLXRlc3QgKDpuYW1lICg6ZmliZXIgOmNvbmRpdGlvbnMgOm5vLWN1cnJl bnQtZmliZXIpKQorICAobGV0ICgoc2ItZmliZXI6OipjdXJyZW50LWZpYmVyKiBuaWwpKQorICAg IChsZXQgKChjIChoYW5kbGVyLWNhc2UgKG1ha2UtZmliZXIgKGxhbWJkYSAoKSkpCisgICAgICAg ICAgICAgICAoZmliZXItZXJyb3IgKGUpIGUpKSkpICAgICAgICAgIDsgY2F1Z2h0IHZpYSB0aGUg YmFzZSBjbGFzcworICAgICAgKGFzc2VydCAodHlwZXAgYyAnbm8tY3VycmVudC1maWJlci1lcnJv cikpCisgICAgICAoYXNzZXJ0IChlcSAnbWFrZS1maWJlciAobm8tY3VycmVudC1maWJlci1lcnJv ci1vcGVyYXRpb24gYykpKQorICAgICAgKGFzc2VydCAobnVsbCAoZmliZXItZXJyb3ItZmliZXIg YykpKSkKKyAgICAobGV0ICgoYyAoaGFuZGxlci1jYXNlICh5aWVsZC1maWJlcikKKyAgICAgICAg ICAgICAgIChuby1jdXJyZW50LWZpYmVyLWVycm9yIChlKSBlKSkpKQorICAgICAgKGFzc2VydCAo ZXEgJ3lpZWxkLWZpYmVyIChuby1jdXJyZW50LWZpYmVyLWVycm9yLW9wZXJhdGlvbiBjKSkpKSkp CisKKyh3aXRoLXRlc3QgKDpuYW1lICg6ZmliZXIgOmNvbmRpdGlvbnMgOnRocmVhZC1taXNtYXRj aC1yb2xlKSkKKyAgKHdpdGgtbWFpbi1maWJlciAobWFpbikKKyAgICAobGV0KiAoKG90aGVyIChz Yi10aHJlYWQ6bWFrZS10aHJlYWQKKyAgICAgICAgICAgICAgICAgICAobGFtYmRhICgpCisgICAg ICAgICAgICAgICAgICAgICAobWFrZS1tYWluLWZpYmVyKQorICAgICAgICAgICAgICAgICAgICAg KG1ha2UtZmliZXIgKGxhbWJkYSAoKSkpKSkpCisgICAgICAgICAgIChmb3JlaWduIChzYi10aHJl YWQ6am9pbi10aHJlYWQgb3RoZXIpKSkKKyAgICAgIChoYW5kbGVyLWNhc2UgKHN3aXRjaC1maWJl ciBtYWluIGZvcmVpZ24pCisgICAgICAgIChmaWJlci10aHJlYWQtbWlzbWF0Y2gtZXJyb3IgKGMp CisgICAgICAgICAgKGFzc2VydCAoZXEgZm9yZWlnbiAoZmliZXItZXJyb3ItZmliZXIgYykpKQor ICAgICAgICAgIChhc3NlcnQgKGVxIDp0byAoZmliZXItdGhyZWFkLW1pc21hdGNoLWVycm9yLXJv bGUgYykpKSkpCisgICAgICAocmVsZWFzZS1maWJlciBmb3JlaWduKSkpKQorCisod2l0aC10ZXN0 ICg6bmFtZSAoOmZpYmVyIDp3aXRoLWZpYmVyLXBpbm5lZCA6cmVsZWFzZWQtb24tbm9uLWxvY2Fs LWV4aXQpKQorICAod2l0aC1tYWluLWZpYmVyIChtYWluKQorICAgIChibG9jayBuaWwKKyAgICAg ICh3aXRoLWZpYmVyLXBpbm5lZCAoKQorICAgICAgICAocmV0dXJuKSkpCisgICAgKGFzc2VydCAo bm90IChmaWJlci1waW5uZWQtcCBtYWluKSkpKSkKZGlmZiAtLWdpdCBhL3Rlc3RzL2lucHV0LW1h bmlmZXN0Lmxpc3AtZXhwciBiL3Rlc3RzL2lucHV0LW1hbmlmZXN0Lmxpc3AtZXhwcgppbmRleCBj MDlhY2VjOTguLmM1OTlhMzk1ZCAxMDA2NDQKLS0tIGEvdGVzdHMvaW5wdXQtbWFuaWZlc3QubGlz cC1leHByCisrKyBiL3Rlc3RzL2lucHV0LW1hbmlmZXN0Lmxpc3AtZXhwcgpAQCAtNDYsNiArNDYs OCBAQAogICgiZWxmY29yZS50ZXN0LnNoIiAic3JjL3J1bnRpbWUvc2hyaW5rd3JhcC1zYmNsIikK ICAoImV4aXQtaGFuZy5pbXB1cmUubGlzcCIgInRlc3RzL2ZjYi10aHJlYWRzLnNvIikKICAoImZj Yi10aHJlYWRzLmltcHVyZS5saXNwIiAidGVzdHMvZmNiLXRocmVhZHMuc28iKQorICgiZmliZXIu cHVyZS5saXNwIiAiY29udHJpYi9zYi1maWJlci5mYXNsIikKKyAoImZpYmVyLmltcHVyZS5saXNw IiAiY29udHJpYi9zYi1maWJlci5mYXNsIikKICAoImZpZm8tc2xvdy5pbXB1cmUubGlzcCIgImNv bnRyaWIvc2ItcG9zaXguZmFzbCIpCiAgKCJmaWxlY29tcGlsZS5pbXB1cmUubGlzcCIKICAgInRl c3RzL2RhdGEvd29ua3kxLmxpc3AiCi0tIAoyLjUwLjEgKEFwcGxlIEdpdC0xNTUpCgo= --b1=_D6HjCpfIgRg39jtH6OSxSrrDhqiWoDiY5lB10hD94 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline --b1=_D6HjCpfIgRg39jtH6OSxSrrDhqiWoDiY5lB10hD94 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Sbcl-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/sbcl-devel --b1=_D6HjCpfIgRg39jtH6OSxSrrDhqiWoDiY5lB10hD94--